Коли використовувати фоновий образ IMG проти CSS?


777

У яких ситуаціях доцільніше використовувати IMGтег HTML для відображення зображення, на відміну від CSS background-image, і навпаки?

Фактори можуть включати доступність, підтримку браузера, динамічний контент або будь-які технічні обмеження чи принципи зручності використання.


Вам потрібне зображення, щоб зайняти місце або ви хочете написати над ним?
geowa4

9
Як оновлення, оскільки цей показник займає досить високу позицію в Google, тепер можливе масштабування браузера та розтягнення зображення для фонового зображення і досить широко підтримується (IE8 та нижче, звичайно, виняток), що відображає елементи 4 та 7 спір у випадках що може спричинити резервний ефект або ігнорувати такий ефект для IE8 та нижче. caniuse.com/#search=background-image
Shauna

чудовий і корисний пост, я додам питання для порівняння, перевагою css є також ефекти наведення? чи можна це повторити за допомогою тегів img?
ericosg

Я зазвичай додаю як атрибут alt, так і атрибут title до всіх зображень вмісту. Це не є кращим?
HartleySan

2
Також img може мати карту з областями та підказками, які можна натиснути
Vitim.us

Відповіді:


796

Правильне використання IMG

  1. Використовуйте, IMGякщо ви плануєте, щоб люди друкували вашу сторінку, і ви хочете, щоб зображення було включене за замовчуванням. - JayTee
  2. Використовуйте IMGaltтекстом), коли зображення має важливе смислове значення, наприклад, значок попередження . Це гарантує можливість передачі значення зображення в усіх користувальницьких агентах, включаючи зчитувачі екрану.

Прагматичне використання IMG

  1. Використовуйте IMGатрибут plus alt, якщо зображення є частиною вмісту, таким як логотип або діаграма або особа (реальна особа, а не люди з фотографії) - санхотефат
  2. Використовуйте, IMGякщо ви покладаєтесь на масштабування браузера, щоб візуалізувати зображення пропорційно розміру тексту.
  3. Використовувати IMG для декількох зображень накладання в IE6 .
  4. Використовуйте IMGклавішу a z-index, щоб розтягнути фонове зображення, щоб заповнити все його вікно.
    Зауважте, що це вже не вірно з розміром фону CSS3; див. № 6 нижче.
  5. Використання imgзамість background-imageможе значно покращити продуктивність анімації на тлі.

Коли використовувати фонове зображення CSS

  1. Використовуйте фонові зображення CSS, якщо зображення не є частиною вмісту . - санхотефат
  2. Використовуйте фонові зображення CSS, виконуючи заміну тексту, наприклад. пункти / заголовки. - санхотефат
  3. Використовуйте, background-imageякщо ви плануєте, щоб люди друкували вашу сторінку, і ви не хочете, щоб зображення було включене за замовчуванням. - JayTee
  4. Використовуйте, background-imageякщо вам потрібно покращити час завантаження, як у спрайтах CSS .
  5. Використовуйте, background-imageякщо вам потрібна видимість лише частини зображення, як у спрайтах CSS.
  6. Використовуйте background-imageз background-size:coverтим щоб розтягнути фонове зображення , щоб заповнити всі його вікно.

3
Я все ще баю фонові зображення для заміни тексту. Я бачу людей, які використовують фонові зображення, а потім використовують текст-відступ: -9999px для тексту. Однак я знаю, що подібні текстові відступи були поганими для SEO, і я думаю, що це все ще має бути для деяких пошукових систем. Але найважливіше, якщо вимкнути зображення, але залишити css на зображенні зникне, але текст все одно вимкнений з екрана. Що стосується мене, текст alt на зображенні - це якщо зображення не відображається, тож теги img краще.
Скотт Рід

53
Прагматичне використання фонового зображення : коли ви не хочете розкручувати волосся щодо проблем з вертикальним центром (зображень різної вертикальної величини);)
Frank Nocke

12
Так, проблеми з вертикальним центром - принесіть Flexbox!
Dean_Wilson

3
@BinaryFunt - <div class="my-css-page-styles" style="background-image:url(blah.png);"></div>Таким чином ви можете стилювати його у своєму стилі CSS-стилів, але якщо фонове зображення - це скоріше питання вмісту, ніж стилю, ви все ще редагуєте його з боку HTML.
Jimbo Jonny

2
Здається, що в пункті 5 прагматичного використання IMG є перелік кліків - вказівка ​​на японський блог про косметику. посилання є www.ajaxline.com/browsers-performance-in-dependence-of-html-coding [НЕ
КЛІКУЙТЕ

292

Для мене це чорно-біле рішення. Якщо зображення є частиною вмісту, таким як логотип або діаграма або особа (реальна особа, а не люди з фотографій), то використовуйте <img />атрибут тега плюс alt. Для всього іншого є фонові зображення CSS.

Інший час використовувати фонові зображення CSS - це коли ви робите заміну тексту, наприклад. пункти / заголовки.


Відмінна справа! CON - Використовуйте фонове зображення під час заміни тексту зображення.
система ПАУЗА

2
Це справедливо, але, безумовно, заміна тексту (наприклад, для заголовка) вимагає від вас додати "alt" для того, щоб читачі екрану прочитали його? Або у випадку, якщо зображення не відображаються, ви все одно отримуєте заголовок? Так, заголовок, а потім стиліше було б краще, але напевно текст ви хочете?
Тео Шоліадіс

4
@TheoScholiadis, що використовує заміну зображення, не означає використовувати зображення замість тексту, але приховувати текст певним чином за допомогою CSS та подавати зображення як фон за допомогою CSS. Документ залишається семантично недоторканим.
roborourke

57
Особисто я ненавиджу, коли не можу скопіювати "текст", оскільки це насправді зображення. Називай мене ледачим, але ей ...
Шаз

1
Якщо вам потрібно зображення для SEO, використовуйте тег img з атрибутом alt. В іншому випадку використовуйте зображення у фоновому режимі за допомогою css.
Super Model

107

Я здивований, що про це ще ніхто не згадував: переходи CSS .

Ви можете переключити divфонове зображення на перший план:

#some_div {
    background-image:url(image_1.jpg);
    -webkit-transition:background-image 0.5s;
    /* Other vendor-prefixed transition properties */
    transition:background-image 0.5s;
}

#some_div:hover {
    background-image:url(image_2.jpg);
}

Це економить будь JavaScript або JQuery анімації вицвітає <img/>«S src.

Більше інформації про переходи на MDN .


3
Це не вагомі причини. Ви могли б DIV з 2 накладеними зображеннями, і наступний CSS: #some_div { transition: opacity 0.5s; }, #some_div:hover #top_img { opacity: 0; }
warkentien2

5
Якщо ви прочитаєте пов’язану статтю MDN (або специфікації w3c), то виявите, що фонове зображення НЕ є однією з властивостей анімації, і будь-який браузер, який робить це (хром), не відповідає веб-стандартам. Однак, я думаю, що це має бути, і це приємний простий ефект, тому я розчарований, що це не є частиною стандарту.
Роберт Маккі

73

Наведені вище відповіді розглядають лише аспект дизайну. Я перелічую його в аспектах SEO.

Коли використовувати <img />

  1. Коли Ваше зображення потрібно проіндексувати пошуковою системою
  2. Якщо він має відношення до змісту, не до дизайну.
  3. Якщо ваше зображення не надто мало (не знакових зображень).
  4. Зображення, де можна додавати altта titleатрибутувати.
  5. Зображення з веб-сторінки, яку ви хочете надрукувати за допомогою css-носія для друку

Коли використовувати CSS background-image

  1. Зображення, чисто використані для проектування.
  2. Немає стосунків із вмістом.
  3. Невеликі зображення, які ми можемо грати з CSS3.
  4. Повторювані зображення (у піктограмі автора блогу піктограма дати повторюватиметься для кожної статті тощо).

Оскільки я буду використовувати їх, виходячи з цих причин. Це хороші практики оптимізації зображень пошукових систем.


54

Браузери не завжди налаштовані для друку фонових зображень за замовчуванням; якщо ви маєте намір друкувати вашу сторінку :)


9
Звучить так: PRO - використовуйте IMG, якщо ви бажаєте, щоб зображення друкувалося за замовчуванням. CON - використовуйте фонове зображення, якщо ви не бажаєте, щоб зображення друкувалося за замовчуванням. Хороший!
система ПАУЗА

7
Я думаю, що ідея полягає в тому, щоб мати окремі стилі CSS для друку, які приховують зображення або змінюють їх на щось більш відповідне.
Blazemonger

52

Якщо у вас є CSS у зовнішньому файлі, то часто зручно відображати зображення, яке часто використовується на сайті (наприклад, зображення заголовка) як фонове зображення, оскільки тоді ви маєте можливість змінити зображення згодом.

Наприклад, скажімо, у вас є такий HTML:

<div id="headerImage"></div>

... і CSS:

#headerImage {
    width: 200px;
    height: 100px;
    background: url(Images/headerImage.png) no-repeat;
}

Через кілька днів ви змінюєте розташування зображення. Все, що вам потрібно зробити - оновити CSS:

#headerImage {
    width: 200px;
    height: 100px;
    background: url(../resources/images/headerImage.png) no-repeat;
}

В іншому випадку вам доведеться оновити srcатрибут відповідного <img>тегу у кожному HTML-файлі (якщо припустити, що ви не використовуєте серверну мову сценарію або CMS для автоматизації процесу).

Також фонові зображення корисні, якщо ви не хочете, щоб користувач міг зберегти зображення (хоча мені цього ніколи не потрібно було робити).


14
Фонові зображення, безумовно, можна зберегти за допомогою мінімального розширення джерела перегляду, не так просто, як клацання правою кнопкою миші на зображенні.
Майкл Хакнер

2
Firefox. Клацніть правою кнопкою миші. "Переглянути фонове зображення". Не так складно.
TRiG

1
@TRiG Якщо немає прозорої накладки або модифікації контекстного меню, що не дозволяє вам це робити. Я вже бачив це раніше, і на мою думку, це досить нерозумно, оскільки вам навіть не потрібно заглиблюватися в джерело, якщо сторінка повністю завантажена, то в Firefox принаймні ви можете натиснути Інструменти> Інформація про сторінку / alt + t, i / клацніть правою кнопкою миші та виберіть «Переглянути інформацію про сторінку», перейдіть до розділу «Медіа» та збережіть зі списку всі потрібні елементи. Звичайно, є способи запобігти навіть такому, як вбудовування зображення у файл Flash або інші дивні хитрощі, але навіть їх можна обійти або врахувати.
JAB

Я думаю, що фонова техніка не дуже хороша для того, щоб користувач відмовив зберігати зображення ...
ncubica

45

Приблизно те саме , що відповідь санхофефата , але з іншого боку. Я завжди запитую себе: якщо я повністю видалю таблиці стилів із веб-сайту, чи залишиться лише елементи, що належать до вмісту? Якщо так, то я добре зробив свою роботу.


42

Деякі відповіді тут ускладнюють сценарій. Це мертва проста ситуація.

Просто відповідайте на це питання кожного разу, коли ви хочете розмістити зображення:

Це частина змісту чи частина дизайну?

Якщо ви не можете відповісти на це, ви, мабуть, не знаєте, що ви робите чи що хочете робити!

Крім того, НЕ розглядайте поряд з двома методиками, лише тому, що ви хочете бути "дружніми до друку" чи ні. Також НЕ ховайте вміст з точки зору SEO за допомогою CSS. Якщо ви виявите, що керуєте своїм вмістом у файлах CSS, ви застрелилися в ногу. Це лише тривіальне рішення того, що є змістом чи ні. Будь-який інший аспект слід ігнорувати.


Мені подобається ця відповідь. Це дуже зрозуміло. Решта питань, таких як друк для друку чи SEO, слід розглядати індивідуально у кожному сценарії.
Хуан Еррера

28

Я б додав ще два аргументи:

  • Тег img добре, якщо вам потрібно змінити розмір зображення. Наприклад, якщо вихідне зображення становить 100 пікселів на 100 пікселів, і ви хочете, щоб воно було 80 пікселів на 80 пікселів, ви можете встановити ширину CSS та висоту тегу img. Я не знаю жодного хорошого способу зробити це за допомогою фонового зображення. РЕДАКТУВАННЯ: Тепер це також можна зробити з фоновим зображенням, використовуючи background-sizeатрибут CSS3.

  • Використання фонового зображення добре, коли вам потрібно динамічно переключатися між спрайтами . Наприклад, якщо у вас є зображення кнопки, і ви хочете, щоб окреме зображення відображалося, коли курсор наводить на елемент, ви можете використовувати фонове зображення, що містить як нормальний, так і курсор, і динамічно змінювати позицію фону.


2
Це дійсно гарна відповідь, особливо точка зміни розміру. Люди стверджують, що ви можете використовувати фоновий розмір, але якщо ви намагаєтесь підтримувати старі браузери, це не обов'язково найкращий шлях.
dudewad

1
Так робиться в CSSbackground-size: 80px 80px;
Kareem

2
Дякую @Kareem Я бачу, що це було введено з CSS3, який ще не існував, коли я відповів спочатку. Я відредагував свою відповідь, щоб це відобразити.
Андерс Рабо Торбек

Я думаю, що важливо відзначити, що зміни розміру фотографій можуть бути складними з точки зору пікселізації чи інтерполяції. Коли це можливо, я не зміняв би розмір більше 40% (і це розтягнення - 20% є стандартним), не вводячи ваше зображення в програмне забезпечення для фотозображення, щоб правильно змінити розмір, не втрачаючи якості. Якість DPI тут може бути важливим, якщо недостатньо інформації для розтягування та заповнення виділеної кількості пікселів.
далека земля

18

Ще одна користь від використання тегу <IMG> пов'язана з SEO - тобто ви можете надати додаткову інформацію про зображення в атрибуті ALT тегу зображення, тоді як немає можливості надати таку інформацію при вказівці зображення через CSS і в цьому У випадку пошукових систем може індексуватися лише ім'я файлу зображення. Атрибут ALT безумовно дає перевагу тегу <IMG> SEO SEO перед CSS-підходом. Тому, на мій погляд, краще вказати зображення, які ви хочете добре класифікувати в результатах пошуку зображень (наприклад, пошук зображень Google) за допомогою тегу <IMG>.


Значення ALT для фонових зображень можна визначити у мапі сайту. google.com/schemas/sitemap-image/1.1
Kareem

17

Передній план = img

Фон = CSS фон.


5
Звичайно, але як бути з маленьким індикатором стрілки вниз поруч із кнопкою "меню" або іншими подібними елементами. Як ви класифікуєте це - передній план чи фон?
dudewad

@dudewad Я б сказав передній план, тому що вони (візуально) знаходяться у "верхньому" шарі сторінки, накладеному на інші елементи.
jkdev

14

Використовуйте фонові зображення лише в разі необхідності, наприклад, контейнери із зображеннями, які плитки.

Однією з головних PROS за допомогою IMAGES є те, що це краще для SEO .


3
Можливо, тому, що ви можете використовувати атрибут alt.
Девід

4
Чи це не залежить від того, чи хочете ви SEO для цього конкретного зображення? Я не розумію, чому ви б хотіли займатися SEO зображенням, що є частиною стилю сторінки, а не вмістом (наприклад, піктограмою електронної пошти на вашій сторінці контактів). Тож насправді я краще переверну вашу заяву. Використовуйте IMAGES лише за необхідності (що стосується вмісту, друку та / або SEO).
Волзи

12

Використовуючи фонове зображення, потрібно абсолютно вказати розміри. Це може бути значною проблемою, якщо ви насправді не знаєте їх заздалегідь або не можете їх визначити.

Великою проблемою <img />є накладки. Що робити, якщо я хочу внутрішню тінь CSS на своєму зображенні ( box-shadow:inset 0 0 5px rgb(0,0,0,.5))? У цьому випадку, оскільки <img />не може бути дочірніх елементів, потрібно використовувати позиціонування та додати порожні елементи, що прирівнюється до марної розмітки.

На закінчення, це досить ситуативно.


11

Кілька інших сценаріїв, де background-imageслід використовувати:

  • Коли ви хочете, щоб зображення змінювалося, коли миша на ньому лежить.
  • Коли ви хочете додати зображення до закруглених кутів. Якщо ви користуєтесь img, зображення витікає із закруглених кутів.

Насправді ви можете зробити:img { border-radius: 10px; }
Рафф

@RafcioKowalsky ви праві. Не можу згадати точні умови, в яких border-radiusне працювало.
Behrang Saeedzadeh

10

Використовуйте CSS-фонове зображення у випадку декількох скінів або версій дизайну. Javascript можна використовувати для динамічної зміни класу елемента, що змусить його надати інше зображення. З тегом IMG це може бути складніше.


ви також можете динамічно змінювати атрибут src тегу зображення, так само просто, як і зміна класу
roborourke

3
@sanchothefat, правда, проте в цьому випадку джерело зображення потрібно зберігати в JS замість CSS. CSO-файл IMO було б доцільніше зберегти ім'я файлу.
MK_Dev

7

Ось технічний розгляд: чи буде генеруватися зображення динамічно? Згенерувати <img>тег у HTML, як правило, набагато простіше, ніж намагатися динамічно редагувати властивість CSS.


1
А як щодо вбудованих стилів? Це питання справді не повинно вирішити цю ідею.
viam0Zah

можливо, я повинен сказати, що саме так: ви б краще працювали з елементом DOM або атрибутом елемента?
Брайан М.

напевно, варто розглянути bacl у '09, але з jQuery це навряд чи проблема. Це навіть простіше і більш текуче для переключення css або класів на елемент, ніж перемикання елементів.
dfherr

7

А як щодо розміру зображення? Якщо я використовую тег img, браузер масштабує зображення. Якщо я використовую css фон, браузер просто вирізає шматок із більшого зображення.


7

Що стосується анімації зображень за допомогою CSS TranslateX / Y (правильний спосіб анімувати html) - якщо ви робите запис хронової шкали Chrome на фонових зображеннях CSS, які анімовані, а також теги IMG, що анімуються, ви побачите, що час фарби різко скорочується для CSS фонові зображення.


7

Є ще одна причина! Якщо ви маєте чуйний дизайн і хочете розділити використання зображень низької, середньої та високої роздільної здатності для пристроїв за допомогою медіа-запитів, також слід використовувати фони.


1
maarten, тершелінг - це не трубопровід, що я чув від Вінсента Віллема. То як ви думаєте, як це може працювати на PyMol
Мехді Неллен

1
Будь ласка, зверніться до документації щодо того, наскільки трубопровідним є pieterpeitshoeve.nl/rondleiding
Maarten,

@Maarteen, я думаю, зараз це можна зробити за допомогою HTML 5 тегів зображення та джерела
Tick20

6

Крім того, у мене є розділ галереї, який має непослідовні розміри зображень, тому, хоча ці зображення, очевидно, вважаються вмістом, я використовую фонові зображення та центрирую їх у дівах із заданим розміром. Це схоже на те, що Facebook робить у своїх альбомах ..


6

img - це тег HTML з причини, тому його слід використовувати. Для посилання або для ілюстрації речей люди, наприклад: у статтях.

Крім того, якщо зображення має сенс або повинен бути інтерактивними IMG краще , ніж CSS фон . Для всіх інших ситуацій, я думаю, можна використовувати css фон .

Хоча, це тема, яку потрібно обговорювати знову і знову.

Студентка з Парижу, Франція


5

Додайте лише невеликий додаток, ви повинні використовувати тег img, якщо ви хочете, щоб користувачі мали змогу "клацнути правою кнопкою миші" та "зберегти-образ" / "зберегти-картинку", тож якщо ви плануєте надати зображення як ресурс для інші.

Використання фонового зображення (наскільки я знаю у більшості браузерів) відключить можливість збереження зображення безпосередньо.


5

Невеликий ввід, у мене виникли проблеми з чуйними зображеннями, що сповільнюють візуалізацію на iphone до хвилини, навіть із невеликими зображеннями:

<!-- Was super slow -->
<div class="stuff">
    <img src=".." width="100%" />
</div>

Але при переході на використання фонових зображень проблема усунулася, це є життєздатним лише у випадку націлення на нові браузери.


Чи є у вас підтримка чи пояснення такої поведінки?
Тодд

Вибачте, я не маю поняття, чому це сповільнить сторінку до сканування .. можливо, повторний потік у браузері на iphone має дуже мало ресурсів.
winthers

4

IMGзавантажте спочатку, тому що srcзнаходиться у самому html-файлі, тоді як у випадку background-imageджерела згадується у таблиці стилів, тому зображення завантажується після завантаження таблиці стилів, затримуючи завантаження веб-сторінки.


Плюс деякі веб-переглядачі (наприклад, Firefox 35), здається, оновлять CSS background-imageчерез деякий час: якщо у вас відкрито кілька вкладок, коли через деякий час фон CSS деякий час буде порожнім.
Skippy le Grand Gourou

3

HTML призначений для вмісту, а CSS - для дизайну. Чи потрібне зображення і чи потрібно його підбирати читачам екрану? Якщо відповідь "так", тоді покладіть зображення в HTML. Якщо це виключно для стилізації, то ви можете використовувати властивість background-image у CSS для введення зображення. Як вже багато людей тут уже згадували, ви можете використовувати псевдоелемент на зображенні, якщо вам подобається.


3

Також зауважте, що більшість павуків пошукової системи не індексують фонові зображення CSS, тому фонові зображення будуть ігноровані, і ви не зможете отримати трафік від пошукових систем (жодна користь для SEO).

Якщо всі зображення, визначені тегами, індексуються (якщо виключено вручну) і можуть залучати трафік від пошукових систем, якщо їх атрибути та назви alt та назви файлів оптимізовані належним чином (wrt деяке ключове слово).


2

Ви можете використовувати теги IMG, якщо ви хочете, щоб зображення були плитними та масштабувались до різних розмірів екрана. Для мене ці образи здебільшого є частиною змісту. Для більшості елементів, які не входять до вмісту, я використовую CSS-спрайти, щоб мінімізувати розмір завантаження, якщо я дійсно не хочу анімувати піктограми тощо.


2

Я використовую зображення замість фонового зображення, коли хочу зробити їх на 100% розтяжними, що підтримується в більшості браузерів.


2

Якщо ви хочете додати зображення лише до спеціального вмісту на сторінці або лише для однієї сторінки, вам слід використовувати тег IMG, а якщо ви хочете розмістити зображення на кількох сторінках, тоді вам слід використовувати фонове зображення CSS.


2

Ще одне фонове зображення PRO: Фонове зображення для <ul>/<ol> списків.

Використовуйте фонові зображення, якщо вони є частиною загального дизайну і повторюються на кількох сторінках. Переважно у фоновій формі спрайту для оптимізації.

Використовуйте теги для всіх зображень, які не входять до загального дизайну і, швидше за все, розміщуються один раз, як конкретні зображення для статей, людей та важливих зображень, які заслуговують на додавання до зображень Google.

** Єдине повторне зображення, яке я вкладаю в <img>тег, - це логотип сайту / компанії. Оскільки люди, як правило, натискають на нього, щоб перейти на головну сторінку, таким чином ви загортаєте її <a>тегом.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.