Когда использовать IMG против CSS background-image?

820

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

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

  • 0
    Вам нужно изображение, чтобы занять место, или вы хотите написать поверх него?
  • 9
    В качестве обновления, поскольку в Google это занимает довольно высокое место, теперь возможно масштабирование в браузере и растяжение изображения для background-image, и оно довольно широко поддерживается (конечно, IE8 и ниже, исключение), рендеринг пунктов 4 и 7 в случаях это может позволить откат или игнорировать такой эффект для IE8 и ниже. caniuse.com/#search=background-image
Показать ещё 5 комментариев
Теги:
background-image
image

31 ответ

648
Лучший ответ

Правильное использование IMG

  • Используйте IMG, если вы намереваетесь иметь люди распечатайте свою страницу, и вы хотите, чтобы изображение было включено по умолчанию. < href= "https://stackoverflow.com/users/20153/jaytee" > JayTee
  • Используйте IMG (с текстом alt), когда изображение имеет важное семантическое значение, например значок предупреждения. Это гарантирует, что смысл изображения может быть передан во всех пользовательских агентах, включая считыватели экрана.

Прагматичное использование IMG

  • Используйте атрибут IMG plus alt, если изображение это часть содержимого, например логотип или диаграмма или персонаж (человек, не являющийся персональным персоналом). sanchothefat
  • Используйте IMG, если вы полагаетесь на масштабирование браузера, чтобы сделать изображение пропорциональным размеру текста.
  • Используйте IMG для нескольких оверлейных изображений в IE6.
  • Используйте IMG с z-index в порядке растянуть фоновое изображение, чтобы заполнить все его окно.
    Примечание: это больше не относится к размеру CSS3; см. ниже.
  • Использование IMG вместо background-image может значительно повысить производительность анимаций на фоне.

Когда использовать фоновое изображение CSS

  • Используйте фоновые изображения CSS, если image не является частью содержимого. < href= "https://stackoverflow.com/users/42147/sanchothefat" > sanchothefat
  • Используйте фоновые изображения CSS, когда делая замену изображения текстом, например. пункты/заголовки. < href= "https://stackoverflow.com/users/42147/sanchothefat" > sanchothefat
  • Используйте background-image, если вы намереваетесь иметь люди напечатайте свою страницу, и вы не хотите, чтобы изображение было включено по умолчанию. < href= "https://stackoverflow.com/users/20153/jaytee" > JayTee
  • Используйте background-image, если вам нужно улучшить время загрузки, так как с CSS спрайты.
  • Используйте background-image, если вам нужна только часть изображения, чтобы быть видимым, как с спрайтами CSS.
  • Используйте background-image с background-size:cover, чтобы растянуть фоновое изображение, чтобы заполнить все его окно.
  • 3
    Я все еще сомневаюсь в фоновых изображениях для замены текста. Я вижу людей, использующих фоновые изображения, а затем текст-отступ: -9999px для текста. Тем не менее, я знаю, что подобные текстовые отступы были плохими для SEO, и я полагаю, что это должно быть для некоторых поисковых систем. Но самое главное, если вы выключаете изображения, но оставляете css на изображении, оно исчезает, но текст все еще остается за кадром. Насколько мне известно, альтернативный текст на изображении предназначен для, если изображения не отображаются, поэтому теги img лучше.
  • 0
    Я согласен со Скоттом Ридом в вопросе замены текста. Ключ должен показывать изображение при печати. В случае замены текста это должно быть.
Показать ещё 15 комментариев
258

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

В другой раз использовать фоновые изображения CSS - это, например, при замене текста на изображение. пункты/заголовки.

  • 0
    Отличный случай! CON - использовать background-image при выполнении замены текста в изображении.
  • 0
    Да, никогда не бывает идеальным сделать замену изображения, но некоторые проекты просто не будут правильными, пока вы не сделаете это.
Показать ещё 9 комментариев
90

Я удивлен, что никто еще не упомянул об этом: переходы 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/> src.

Дополнительная информация о переходах на MDN.

  • 3
    Это не веская причина. У вас может быть div с двумя наложенными изображениями и следующий css: #some_div { transition: opacity 0.5s; } , #some_div:hover #top_img { opacity: 0; }
  • 3
    Если вы прочтете эту связанную статью MDN (или спецификации w3c), вы обнаружите, что background-image НЕ является одним из свойств, которые можно анимировать, и любой браузер, который делает это (chrome), не соответствует веб-стандартам. Тем не менее, я думаю, что так и должно быть, и это приятный легкий эффект, поэтому я разочарован тем, что он не является частью стандарта.
48

Браузеры не всегда настроены для печати фоновых изображений по умолчанию; если вы намереваетесь, чтобы люди печатали вашу страницу:)

  • 8
    Звучит так: PRO - используйте IMG, если вы хотите, чтобы изображение печаталось по умолчанию. CON - Используйте background-image, если вы не хотите, чтобы изображение печаталось по умолчанию. Хороший!
  • 6
    Я думаю, что идея состоит в том, чтобы иметь отдельные стили CSS только для печати, которые скрывают изображения или изменяют их на что-то более подходящее.
45

В ответах рассматривается только дизайн. Я перечисляю его в аспектах SEO.

Когда использовать <img />

  • Когда ваше изображение должно быть индексировано поисковой системой
  • Если он имеет отношение к контенту, который он не разрабатывает.
  • Если ваше изображение не слишком маленькое (а не знаковые изображения).
  • Изображения, в которых вы можете добавить атрибут alt и title.
  • Изображения с веб-страницы, которую вы хотите распечатать, используя носитель печати css

Когда использовать CSS background-image

  • Изображения, используемые для проектирования.
  • Нет связи с контентом.
  • Маленькие изображения, которые мы можем играть с CSS3.
  • Повторение изображений (в значке автора блога значок даты будет повторяться для каждой статьи и т.д.).

Как я буду использовать их по этим причинам. Это хорошая практика поисковой оптимизации изображений.

40

Если у вас есть 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
    Fire Fox. Щелкните правой кнопкой мыши. Msgstr "Посмотреть фоновое изображение". Не так сложно
Показать ещё 2 комментария
38

Примерно так же, как ответ sanchothefat, но с другого аспекта. Я всегда спрашиваю себя: если я полностью удалю таблицы стилей с сайта, оставшиеся элементы будут принадлежать только содержимому? Если это так, я хорошо выполнил свою работу.

37

В некоторых ответах здесь описан более сложный сценарий. Это мертвая простая ситуация.

Просто ответьте на этот вопрос каждый раз, когда вы хотите разместить изображение:

Является ли эта часть содержимого или частью дизайна?

Если вы не можете ответить на это, вы, вероятно, не знаете, что делаете или что хотите!

Кроме того, НЕ рассматривайте этот метод, потому что вы хотите быть "дружественным к принтеру" или нет. Также НЕ скрывайте контент с точки зрения SEO с помощью CSS. Если вы обнаружите, что управляете своим контентом в файлах CSS, вы стреляли в ногу. Это всего лишь тривиальное решение о том, что является содержанием или нет. Следует игнорировать любой другой аспект.

  • 0
    Мне нравится этот ответ. Это очень ясно. Остальные проблемы, такие как печать или SEO, должны рассматриваться индивидуально в каждом сценарии.
23

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

  • Тег img хорош, если вам нужно изменить размер изображения. Например. если исходное изображение составляет 100 пикселей на 100 пикселей, и вы хотите, чтобы оно составляло 80 пикселей на 80 пикселей, вы можете установить ширину и высоту CSS тега img. Я не знаю, как это сделать, используя background-image. EDIT: теперь это можно сделать и с фоновым изображением, используя background-size атрибут CSS3.

  • Использование background-image полезно, когда вам нужно динамически переключаться между спрайтами. Например. если у вас есть изображение кнопки, и вы хотите, чтобы отдельное изображение отображалось при наведении курсора на элемент, вы можете использовать фоновое изображение, содержащее как нормальные, так и наводящие спрайты, и динамически менять положение фона.

  • 2
    Это действительно хороший ответ, особенно точка изменения размера. Люди будут утверждать, что вы можете использовать background-size, но если вы пытаетесь поддерживать старые браузеры, это не обязательно лучший путь.
  • 1
    Вот как это делается в CSS background-size: 80px 80px;
Показать ещё 2 комментария
15

Foreground = img.

Фон = фон CSS.

  • 4
    Конечно, но как насчет маленького индикатора со стрелкой вниз рядом с кнопкой «меню» или других подобных элементов. Как вы классифицируете это - передний план или фон?
  • 0
    @dudewad Я бы сказал, передний план, потому что они (визуально) находятся в «верхнем» слое страницы, наложены на другие элементы.
13

Используйте фоновые изображения только при необходимости, например. контейнеры с изображением, что плитки.

Один из основных PROS с помощью ИЗОБРАЖЕНИЙ заключается в том, что он лучше для SEO.

  • 3
    Возможно, потому что вы можете использовать атрибут alt.
  • 4
    Разве это не зависит от того, ХОТИТЕ ли вы SEO для этого конкретного изображения? Я не понимаю, почему вы выбрали SEO для изображения, которое является частью стиля страницы, а не для содержимого (например, значок электронной почты на странице контактов). Так что на самом деле, я бы лучше перевернул ваше заявление. Используйте ИЗОБРАЖЕНИЯ только при необходимости (связанные с контентом, печатью и / или SEO).
12

Используя фоновое изображение, вам необходимо точно указать размеры. Это может быть серьезной проблемой, если вы на самом деле не знаете их заранее или не можете определить их.

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

В заключение, это довольно ситуативно.

9

Пара других сценариев, в которых следует использовать background-image:

  • Если вы хотите, чтобы изображение менялось, когда мышь наводилась на него.
  • Если вы хотите добавить закругленные углы к изображению. Если вы используете img, изображение течет из закругленных углов.
  • 0
    Вы можете сделать: img { border-radius: 10px; }
  • 0
    @RafcioKowalsky вы правы. Не могу вспомнить точные условия, в которых не работал border-radius .
9

Используйте фоновое изображение CSS в случае нескольких скинов или версий дизайна. Javascript можно использовать для динамического изменения класса элемента, который заставит его отображать другое изображение. С тегом IMG это может быть более сложным.

  • 0
    Вы также можете динамически изменять атрибут src тега изображения, так же просто, как и изменение класса.
  • 3
    @sanchothefat, правда, однако, в этом случае источник изображения должен быть сохранен в JS вместо CSS. IMO файл CSS будет более подходящим для сохранения имени файла.
8

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

  • 1
    А как насчет встроенных стилей? Этот вопрос действительно не должен решаться этой идеей.
  • 0
    может быть, мне следует сформулировать это следующим образом: вы бы предпочли работать с элементом DOM или атрибутом элемента?
Показать ещё 2 комментария
7

Еще одно преимущество использования <IMG> тег связан с SEO - то есть вы можете предоставить дополнительную информацию об изображении в атрибуте ALT тега изображения, в то время как нет способа предоставить такую ​​информацию при указании изображения через CSS, и в этом случае может быть проиндексировано только имя файла изображения поисковыми системами. Атрибут ALT определенно дает <IMG> плюс преимущество SEO в CSS. Именно поэтому IMO вы должны указать изображения, которые хотите хорошо оценивать в результатах поиска изображений (например, поиск изображений Google) с помощью <IMG> тег.

  • 0
    Значения ALT background-images могут быть определены в карте сайта. google.com/schemas/sitemap-image/1.1
6

Есть еще одна причина! Если у вас есть отзывчивый дизайн и вы хотите разделить использование изображений с низким, средним и высоким разрешением для устройств через медиа-запросы, вы также должны использовать фон.

  • 1
    Мартен, Терсхелинг - не труба, я слышал от Винсента Виллемса. Так как вы думаете, это может работать на PyMol
  • 1
    Пожалуйста, обратитесь к документации, чтобы узнать, насколько это пипетно. Pieterpeitshoeve.nl/rondleiding
6

В отношении анимации изображений с использованием CSS TranslateX/Y (правильный способ анимации html). Если вы выполняете хронологию хронологии хронологических изображений CSS, которые анимируются против анимированных тегов IMG, вы увидите, что время рисования значительно короче для фоновых изображений CSS.

6

Кроме того, у меня есть раздел галереи, который имеет несогласованные размеры изображений, поэтому, несмотря на то, что эти изображения, очевидно, считаются содержимым, я использую фоновые изображения и центрирую их в div с заданным размером. Это похоже на то, что делает facebook в своих альбомах.

6

Как насчет размера изображения? Если я использую тег img, браузер масштабирует изображение. Если я использую фон css, браузер просто вырезает кусок из большего изображения.

5

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

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

Но при переключении на использование фоновых изображений проблема исчезла, это возможно только при ориентации на новые браузеры.

  • 0
    Есть ли у вас поддержка или объяснение этого поведения?
  • 0
    Извините, я понятия не имею, почему это приведет к замедлению страницы до ползания ... возможно, повторный поток в браузере на iphone имеет очень мало ресурсов.
5

img является тегом html по какой-либо причине, поэтому его следует использовать. Для ссылок или для иллюстрации вещей люди, например: в статьях.

Также, если изображение имеет значение или должно быть доступно для клика, img лучше, чем css background. Для любой другой ситуации, я думаю, можно использовать css background.

Хотя, это предмет, который нужно обсуждать снова и снова.

Веб-студент из Парижа, Франция

4

Чтобы добавить только небольшой, вы должны использовать тег img, если хотите, чтобы пользователи имели возможность "щелкнуть правой кнопкой мыши" и "сохранить изображение" / "сохранить изображение", поэтому, если вы намерены предоставить изображение как ресурс для других.

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

3

HTML предназначен для контента, а CSS - для дизайна. Требуется ли изображение и нужно ли его считывать с экрана? Если да, то поставьте изображение в HTML. Если это чисто для стилизации, то вы можете использовать свойство background-image в CSS для инъекции изображения. Как уже упоминалось много людей, вы можете использовать псевдоэлемент на изображении, если хотите.

2

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

Если все изображения, определенные с помощью тегов, индексируются (если только они не исключены вручную) и могут привносить трафик из поисковых систем, если их атрибуты title/alt и имена файлов оптимизированы правильно (w.r.t какое-то ключевое слово).

2

Если вы хотите добавить изображение только для специального контента на странице или только для одной страницы, вы должны использовать тег IMG, и если вы хотите разместить изображение на более чем одной странице, вы должны использовать фоновое изображение CSS.

2

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

2

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

1

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

  • 0
    Кроме того, некоторые браузеры (например, Firefox 35), по-видимому, через некоторое время обновляют background-image CSS: если у вас открыто несколько вкладок, когда вы возвращаетесь на свою вкладку через некоторое время, фон CSS на некоторое время остается пустым.
1

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

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

Используйте теги для всех изображений, которые не являются частью общего дизайна, и, скорее всего, размещены один раз, например, специальные изображения для статей, людей и важных изображений, которые заслуживают добавления в изображения Google.

** Единственное повторное изображение, которое я заключу в теге <img>, является логотипом сайта/компании. Поскольку люди обычно нажимают на нее, чтобы перейти на домашнюю страницу, вы можете обернуть ее тегом <a>.

0

Просто бросьте гаечный ключ в свои работы - я считаю, что вы никогда не должны использовать тег img. HTML предназначен для контента, а не для визуального стиля. все изображения на вашей странице должны поступать из CSS, оставляя ваш HTML-код чистым. (даже если это займет немного больше времени для сборки)

  • 24
    Я согласен с вами в отношении изображений, которые служат украшением страницы, но, безусловно, некоторые изображения являются содержимым: фотографии в новостной статье или диаграммы в академической статье и т. Д. Они являются частью содержимого и, вероятно, требуют тега IMG.
  • 8
    изображение стоит тысячи слов ....
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню