Содержание

background-image — CSS | MDN

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

Границы border элемента затем рисуются поверх них, и background-color рисуется под ними. То, как изображения отрисовываются относительно рамки и её границ, определяется CSS свойствами background-clip и background-origin.

Если указанное изображение не может быть нарисовано (например, когда файл, определённый указанным URI, не может быть загружен), браузеры обрабатывают его так, как если бы оно было значением none.

Обратите внимание: Даже, если изображение непрозрачно и цвет не будет показан при нормальных обстоятельствах, веб-разработчику следует всегда указывать атрибут background-color. Если изображение не может быть загружено —например, в случае отказа сетевого подключения — у элемента будет отображён цветной фон.
background-image: none; background-image: url(http://www.example.com/bck.png); background-image: inherit;

Значения

none
Это ключевое слово обозначает отсутствие изображений.
<image>
<image> (en-US) обозначает изображение для отображения. Их может быть несколько, разделённых запятыми, поскольку поддерживается несколько фонов (en-US).

Официальный синтаксис

<bg-image># (en-US)

где
<bg-image> = none | (en-US) <image> (en-US)

где
<image> = <url> (en-US) | (en-US) <image()> | (en-US) <image-set()> | (en-US) <element()> | (en-US) <paint()> | (en-US) <cross-fade()> | (en-US) <gradient>

где
<image()> = image( <image-tags>? (en-US) [ (en-US) <image-src>? (en-US) , <color>? (en-US) ] (en-US)! (en-US) )
<image-set()> = image-set( <image-set-option># (en-US) )
<element()> = element( <id-selector> )
<paint()> = paint( <ident> (en-US), <declaration-value>? (en-US) )
<cross-fade()> = cross-fade( <cf-mixing-image> , <cf-final-image>? (en-US) )
<gradient> = <linear-gradient()> | (en-US) <repeating-linear-gradient()> | (en-US) <radial-gradient()> | (en-US) <repeating-radial-gradient()> | (en-US) <conic-gradient()>

где
<image-tags> = ltr | (en-US) rtl
<image-src> = <url> (en-US) | (en-US) <string> (en-US)
<color> = <rgb()> | (en-US) <rgba()> | (en-US) <hsl()> | (en-US) <hsla()> | (en-US) <hex-color> | (en-US) <named-color> | (en-US) currentcolor | (en-US) <deprecated-system-color>
<image-set-option> = [ (en-US) <image> (en-US) | (en-US) <string> (en-US) ] (en-US) [ (en-US) <resolution> (en-US) || (en-US) type(<string> (en-US)) ] (en-US)
<id-selector> = <hash-token>
<cf-mixing-image> = <percentage>? (en-US) && (en-US) <image> (en-US)
<cf-final-image> = <image> (en-US) | (en-US) <color>
<linear-gradient()> = linear-gradient( [ (en-US) <angle> | (en-US) to <side-or-corner> ] (en-US)? (en-US) , <color-stop-list> )
<repeating-linear-gradient()> = repeating-linear-gradient( [ (en-US) <angle> | (en-US) to <side-or-corner> ] (en-US)? (en-US) , <color-stop-list> )
<radial-gradient()> = radial-gradient( [ (en-US) <ending-shape> || (en-US) <size> ] (en-US)? (en-US) [ (en-US) at <position> (en-US) ] (en-US)? (en-US) , <color-stop-list> )
<repeating-radial-gradient()> = repeating-radial-gradient( [ (en-US) <ending-shape> || (en-US) <size> ] (en-US)? (en-US) [ (en-US) at <position> (en-US) ] (en-US)? (en-US) , <color-stop-list> )
<conic-gradient()> = conic-gradient( [ (en-US) from <angle> ] (en-US)? (en-US) [ (en-US) at <position> (en-US) ] (en-US)? (en-US), <angular-color-stop-list> )

где
<rgb()> = rgb( <percentage>{ (en-US)3} (en-US) [ (en-US) / <alpha-value> ] (en-US)? (en-US) ) | (en-US) rgb( <number>{ (en-US)3} (en-US) [ (en-US) / <alpha-value> ] (en-US)? (en-US) ) | (en-US) rgb( <percentage># (en-US){ (en-US)3} (en-US) , <alpha-value>? (en-US) ) | (en-US) rgb( <number># (en-US){ (en-US)3} (en-US) , <alpha-value>? (en-US) )
<rgba()> = rgba( <percentage>{ (en-US)3} (en-US) [ (en-US) / <alpha-value> ] (en-US)? (en-US) ) | (en-US) rgba( <number>{ (en-US)3} (en-US) [ (en-US) / <alpha-value> ] (en-US)? (en-US) ) | (en-US) rgba( <percentage># (en-US){ (en-US)3} (en-US) , <alpha-value>? (en-US) ) | (en-US) rgba( <number># (en-US){ (en-US)3} (en-US) , <alpha-value>? (en-US) )
<hsl()> = hsl( <hue> <percentage> <percentage> [ (en-US) / <alpha-value> ] (en-US)? (en-US) ) | (en-US) hsl( <hue>, <percentage>, <percentage>, <alpha-value>? (en-US) )
<hsla()> = hsla( <hue> <percentage> <percentage> [ (en-US) / <alpha-value> ] (en-US)? (en-US) ) | (en-US) hsla( <hue>, <percentage>, <percentage>, <alpha-value>? (en-US) )
<side-or-corner> = [ (en-US) left | (en-US) right ] (en-US) || (en-US) [ (en-US) top | (en-US) bottom ] (en-US)
<color-stop-list> = [ (en-US) <linear-color-stop> [ (en-US), <linear-color-hint>] (en-US)? (en-US) ] (en-US)# (en-US) , <linear-color-stop>
<ending-shape> = circle | (en-US) ellipse
<size> = closest-side | (en-US) farthest-side | (en-US) closest-corner | (en-US) farthest-corner | (en-US) <length> | (en-US) <length-percentage>{ (en-US)2} (en-US)
<position> = [ (en-US) [ (en-US) left | (en-US) center | (en-US) right ] (en-US) || (en-US) [ (en-US) top | (en-US) center | (en-US) bottom ] (en-US) | (en-US) [ (en-US) left | (en-US) center | (en-US) right | (en-US) <length-percentage> ] (en-US) [ (en-US) top | (en-US) center | (en-US) bottom | (en-US) <length-percentage> ] (en-US)? (en-US) | (en-US) [ (en-US) [ (en-US) left | (en-US) right ] (en-US) <length-percentage> ] (en-US) && (en-US) [ (en-US) [ (en-US) top | (en-US) bottom ] (en-US) <length-percentage> ] (en-US) ] (en-US)
<angular-color-stop-list> = [ (en-US) <angular-color-stop> [ (en-US), <angular-color-hint>] (en-US)? (en-US) ] (en-US)# (en-US) , <angular-color-stop>

где
<alpha-value> = <number> | (en-US) <percentage>
<hue> = <number> | (en-US) <angle>
<linear-color-stop> = <color> <color-stop-length>? (en-US)
<linear-color-hint> = <length-percentage>
<length-percentage> = <length> | (en-US) <percentage>
<angular-color-stop> = <color> && (en-US) <color-stop-angle>? (en-US)
<angular-color-hint> = <angle-percentage>

где
<color-stop-length> = <length-percentage>{ (en-US)1,2} (en-US)
<color-stop-angle> = <angle-percentage>{ (en-US)1,2} (en-US)
<angle-percentage> = <angle> | (en-US) <percentage>

Несколько фонов и прозрачность

Обратите внимание, что изображение звезды частично прозрачно и наложено на изображение кошки.

HTML содержимое
<div>
    <p>
        This paragraph is full of cats<br />and stars.
    </p>
    <p>This paragraph is not.</p>
    <p>
        Here are more cats for you.<br />Look at them!
    </p>
    <p>And no more.</p>
</div>
CSS содержимое
pre, p {
    font-size: 1.5em;
    color: #FE7F88;
    background-color: transparent;
}

div {
  background-image: url("https://mdn.mozillademos.org/files/6457/mdn_logo_only_color.png");
}

p {
  background-image: none;
}

.catsandstars {
  background-image:  url("https://mdn.mozillademos.org/files/11991/startransparent.gif"),
                     url("https://mdn.mozillademos.org/files/7693/catfront.png");
  background-color: transparent;
}

BCD tables only load in the browser

background — CSS | MDN

Сокращённое CSS свойство background  устанавливает сразу все свойства стиля фона, такие как цвет, изображение, источник и размер, или метод повтора.

Исходный код этого интерактивного примера хранится в репозитории GitHub.  Если вы хотите внести свой вклад в проект интерактивных примеров, пожалуйста клонируйте https://github.com/mdn/interactive-examples и отправьте нам запрос на извлечение..

Свойство является сокращением, которое устанавливает следующие свойства в одном объявлении: background-clip, background-color, background-image

, background-origin, background-position, background-repeat, background-size, и background-attachment.

Как и во всех сокращённых свойствах, любые пропущенные вложенные значения будут установлены в свои изначальные значения.

[ (en-US) <bg-layer> , ] (en-US)* (en-US) <final-bg-layer>

где
<bg-layer> = <bg-image> || (en-US) <bg-position> [ (en-US) / <bg-size> ] (en-US)? (en-US) || (en-US) <repeat-style> || (en-US) <attachment> || (en-US) <box> || (en-US) <box>
<final-bg-layer> = <'background-color'> || (en-US) <bg-image> || (en-US) <bg-position> [ (en-US) / <bg-size> ] (en-US)? (en-US) || (en-US) <repeat-style> || (en-US) <attachment> || (en-US) <box> || (en-US) <box>

где
<bg-image> = none | (en-US) <image> (en-US)
<bg-position> = [ (en-US) [ (en-US) left | (en-US) center | (en-US) right | (en-US) top | (en-US) bottom | (en-US) <length-percentage> ] (en-US) | (en-US) [ (en-US) left | (en-US) center | (en-US) right | (en-US) <length-percentage> ] (en-US) [ (en-US) top | (en-US) center | (en-US) bottom | (en-US) <length-percentage> ] (en-US) | (en-US) [ (en-US) center | (en-US) [ (en-US) left | (en-US) right ] (en-US) <length-percentage>? (en-US) ] (en-US) && (en-US) [ (en-US) center | (en-US) [ (en-US) top | (en-US) bottom ] (en-US) <length-percentage>? (en-US) ] (en-US) ] (en-US)

<bg-size> = [ (en-US) <length-percentage> | (en-US) auto ] (en-US){ (en-US)1,2} (en-US) | (en-US) cover | (en-US) contain
<repeat-style> = repeat-x | (en-US) repeat-y | (en-US) [ (en-US) repeat | (en-US) space | (en-US) round | (en-US) no-repeat ] (en-US){ (en-US)1,2} (en-US)
<attachment> = scroll | (en-US) fixed | (en-US) local
<box> = border-box | (en-US) padding-box | (en-US) content-box

где
<image> = <url> (en-US) | (en-US) <image()> | (en-US) <image-set()> | (en-US) <element()> | (en-US) <paint()> | (en-US) <cross-fade()> | (en-US) <gradient>

<length-percentage> = <length> | (en-US) <percentage>

где
<image()> = image( <image-tags>? (en-US) [ (en-US) <image-src>? (en-US) , <color>? (en-US) ] (en-US)! (en-US) )
<image-set()> = image-set( <image-set-option># (en-US) )
<element()> = element( <id-selector> )
<paint()> = paint( <ident> (en-US), <declaration-value>? (en-US) )
<cross-fade()> = cross-fade( <cf-mixing-image> , <cf-final-image>? (en-US) )
<gradient> = <linear-gradient()> | (en-US) <repeating-linear-gradient()> | (en-US) <radial-gradient()> | (en-US) <repeating-radial-gradient()> | (en-US) <conic-gradient()>

где
<image-tags> = ltr | (en-US) rtl
<image-src> = <url> (en-US) | (en-US) <string> (en-US)
<color> = <rgb()> | (en-US) <rgba()> | (en-US) <hsl()> | (en-US) <hsla()> | (en-US) <hex-color> | (en-US) <named-color> | (en-US) currentcolor | (en-US) <deprecated-system-color>
<image-set-option> = [ (en-US) <image> (en-US) | (en-US) <string> (en-US) ] (en-US) [ (en-US) <resolution> (en-US) || (en-US) type(<string> (en-US)) ] (en-US)

<id-selector> = <hash-token>
<cf-mixing-image> = <percentage>? (en-US) && (en-US) <image> (en-US)
<cf-final-image> = <image> (en-US) | (en-US) <color>
<linear-gradient()> = linear-gradient( [ (en-US) <angle> | (en-US) to <side-or-corner> ] (en-US)? (en-US) , <color-stop-list> )
<repeating-linear-gradient()> = repeating-linear-gradient( [ (en-US) <angle> | (en-US) to <side-or-corner> ] (en-US)? (en-US) , <color-stop-list> )
<radial-gradient()> = radial-gradient( [ (en-US) <ending-shape> || (en-US) <size> ] (en-US)? (en-US) [ (en-US) at <position> (en-US) ] (en-US)? (en-US) , <color-stop-list> )
<repeating-radial-gradient()> = repeating-radial-gradient( [ (en-US) <ending-shape> || (en-US) <size> ] (en-US)? (en-US) [ (en-US) at <position> (en-US) ] (en-US)? (en-US) , <color-stop-list> )
<conic-gradient()> = conic-gradient( [ (en-US) from <angle> ] (en-US)? (en-US) [ (en-US) at <position> (en-US) ] (en-US)? (en-US), <angular-color-stop-list> )

где
<rgb()> = rgb( <percentage>{ (en-US)3} (en-US) [ (en-US) / <alpha-value> ] (en-US)? (en-US) ) | (en-US) rgb( <number>{ (en-US)3} (en-US) [ (en-US) / <alpha-value> ] (en-US)? (en-US) ) | (en-US) rgb( <percentage># (en-US){ (en-US)3} (en-US) , <alpha-value>? (en-US) ) | (en-US) rgb( <number># (en-US){ (en-US)3} (en-US) , <alpha-value>? (en-US) )

<rgba()> = rgba( <percentage>{ (en-US)3} (en-US) [ (en-US) / <alpha-value> ] (en-US)? (en-US) ) | (en-US) rgba( <number>{ (en-US)3} (en-US) [ (en-US) / <alpha-value> ] (en-US)? (en-US) ) | (en-US) rgba( <percentage># (en-US){ (en-US)3} (en-US) , <alpha-value>? (en-US) ) | (en-US) rgba( <number># (en-US){ (en-US)3} (en-US) , <alpha-value>? (en-US) )
<hsl()> = hsl( <hue> <percentage> <percentage> [ (en-US) / <alpha-value> ] (en-US)? (en-US) ) | (en-US) hsl( <hue>, <percentage>, <percentage>, <alpha-value>? (en-US) )
<hsla()> = hsla( <hue> <percentage> <percentage> [ (en-US) / <alpha-value> ] (en-US)? (en-US) ) | (en-US) hsla( <hue>, <percentage>, <percentage>, <alpha-value>? (en-US) )
<side-or-corner> = [ (en-US) left | (en-US) right ] (en-US) || (en-US) [ (en-US) top | (en-US) bottom ] (en-US)
<color-stop-list> = [ (en-US) <linear-color-stop> [ (en-US), <linear-color-hint>] (en-US)? (en-US) ] (en-US)# (en-US) , <linear-color-stop>
<ending-shape> = circle | (en-US) ellipse
<size> = closest-side | (en-US) farthest-side | (en-US) closest-corner | (en-US) farthest-corner | (en-US) <length> | (en-US) <length-percentage>{ (en-US)2} (en-US)
<position> = [ (en-US) [ (en-US) left | (en-US) center | (en-US) right ] (en-US) || (en-US) [ (en-US) top | (en-US) center | (en-US) bottom ] (en-US) | (en-US) [ (en-US) left | (en-US) center | (en-US) right | (en-US) <length-percentage> ] (en-US) [ (en-US) top | (en-US) center | (en-US) bottom | (en-US) <length-percentage> ] (en-US)? (en-US) | (en-US) [ (en-US) [ (en-US) left | (en-US) right ] (en-US) <length-percentage> ] (en-US) && (en-US) [ (en-US) [ (en-US) top | (en-US) bottom ] (en-US) <length-percentage> ] (en-US) ] (en-US)
<angular-color-stop-list> = [ (en-US) <angular-color-stop> [ (en-US), <angular-color-hint>] (en-US)? (en-US) ] (en-US)# (en-US) , <angular-color-stop>

где
<alpha-value> = <number> | (en-US) <percentage>
<hue> = <number> | (en-US) <angle>
<linear-color-stop> = <color> <color-stop-length>? (en-US)
<linear-color-hint> = <length-percentage>
<angular-color-stop> = <color> && (en-US) <color-stop-angle>? (en-US)
<angular-color-hint> = <angle-percentage>

где
<color-stop-length> = <length-percentage>{ (en-US)1,2} (en-US)
<color-stop-angle> = <angle-percentage>{ (en-US)1,2} (en-US)
<angle-percentage> = <angle> | (en-US) <percentage>

img или background-image? Что лучше?

В любом дизайне сайта используются картинки. Но мало кто задумывается над вопросом а когда именно при верстке макета стоит применять html тег img, а когда css свойство background-image? Есть ли между ними вообще различие? На самом деле есть и достаточно существенное. Об этом и пойдет речь в данной статье.

Главное различие img и background-image

Когда мы вспоминаем основное назначение html и css оно для нас становится очевидным, но почему-то пока над этим не задумываешься заметить его становится не так уж и просто.

Различие состоит в том, что картинки несущие смысловую нагрузку или же каким-либо образом относящиеся к содержанию страницы следует вставлять тегом img (картинки в тексте, баннеры, картинки слайдера, аватарки и тд). Все остальное (просто элементы оформления: различного рода разделители, маркеры, фоны и тд.) следует вставлять в дизайн используя background-image.

В чем преимущества данного подхода?

  • В первую очередь таким образом мы очищаем код страницы, что значительно улучшает его читабельность, упрощает понимание документа поисковым роботам, ускоряет загрузку страницы за счет все того же уменьшения документа, в общем крайне положительно сказывается на SEO оптимизации страницы.
  • Используя img для вывода картинок несущих на себе смысловую нагрузку мы даем возможность поисковикам прочитать альты этих картинок и лучше понять что они из себя представляют, есть возможность получения дополнительного трафика на сайт из сервисов поиска по картинкам, получаем лучшую уникализацию контента (поисковики любят текст разбавленный картинками, поскольку это обычно улучшает поведенческие факторы посетителей ресурса).
  • Различные рекламные сервисы, счетчики и CMS для вывода своего содержимого и аватарок посетителей используют картинки, что абсолютно нормально и логично, поскольку данные элементы по логике вещей относятся не к оформлению страницы, а к ее содержимому.

Нюансы из практики

  • При печати страницы сайта теги img печатаются, а background-ы нет.
  • Все, что желательно к индексации поисковиками выводим картинками, все что хотим скрыть- фонами.
  • Браузеры разработанные для людей с ограниченными возможностями читают альты картинок, потому если изображение несет важный смысл, оно обязательно должно быть оформлено html тегом.
  • Некоторые старые браузеры не поддерживают свойство background-size и для создания масштабируемого фона в них используется тег, а не свойство фона.
  • Img с анимацией меньше нагружает браузеры.
  • Для замены текста изображением лучше использовать background-image (к примеру, если нужно вывести заголовки красивыми картинками).
  • Используя свойство фона мы можем вывести на странице только часть изображения.
  • Вытекающая из предыдущего пункта фишка- background-image дает возможность использовать метод спрайтов (за счет того, что все иконки подгружаются с 1 картинки уменьшается количество обращений к серверу при загрузке страницы, что положительно сказывается на скорости) для ускорения загрузки сайта.
  • Картинку спрятанную в фон сайта сложнее выкачать. Хотя как по мне для защиты своих уникальных изображений лучше использовать свои подписи на них, это хоть заставит плагиатщиков повозиться с приведением ее в порядок или же использовать прочие способы защиты уникального контента от копирования.

Подводя итоги

Ничего сложного в размежевании методов вывода изображений нет. С практикой все становится на свои места и даже интуитивно понятно, главное помнить, что все связанное с оформлением сайта должно быть помещено в css, а все связанное с его структурой и смысловым наполнением в html.

Оценок: 19 (средняя 4.9 из 5)

  • 24439 просмотров

Понравилась статья? Расскажите о ней друзьям:

Курсы по CSS (в открытом доступе)

Уровень сложности:

Средний

Еще интересное

Графика в вебе, img, background-image, CSS-спрайты

Не забывайте важное правило: в вебе запрещено использовать в именах файлов и URL:
1) Пробелы (используем дефис вместо пробела)
2) Нижнее подчёркивание, так же используем дефис, так как в вебе принято нижним подчёркиванием указывать ссылки и нижнее подчёркивание ссылки (декоративным) сливается с нижним подчёркиванием (в имени файла), что создаёт трудности понять, находится ли перед нами пробел или нижнее подчеркивание.
3) Кириллицу (Русские буквы) а так же другие за исключением латиницы (Английские буквы). Связано с особенностью работы некоторых веб-серверов.
4) Спецсимволы запрещённые файловой системой.

Для генерации спрайтов подойдет любой онлайн сервис, который можно найти в гугле по запросу: «sprites generator online», вот дам пару ссылок для самых ленивых 🙂 Генераторы создают имена классам равные именам файлов, так что перед загрузкой переименуйте файлы в нужные названия.
Генератор позволяющий настраивать имена для CSS классов, очень удобно
Ещё один генератор, на этот раз только позволяет дописывать префиксы.

Раз мы дошли до префиксов, хотелось бы акцентировать внимание когда они используются. Бывает так, что над проектом работают несколько человек, или же проект на столько большой, что схожий материал встречается на разных страницах. Допустим у нас есть форма авторизации .form-auth , которая на одной странице должна быть с зеленым фоном, а на второй с желтым. При этом одну форму может разрабатывать один верстальщик, а вторую — второй. Чтобы стили не перебивали друг друга можно применить 2 подхода:
1) Подключать на одной странице один css файл, тогда как на второй — второй, и стили не пересекутся.
2) Указывать префикс, выглядит это так: .reg-form-auth , обычное ключевое слово разделённое любым спец.символом, в данном случае дефисом, и говорящее само за себя, что данная форма находится в разделе регистрации. Или же .inpost-form-auth — говорит, что разработчиком данной формы был inpost, мой личный никнейм (он же псевдоним). Префикс избавит нас от возможной проблемы, когда некоторые стили присутствуют на всех страницах и подключены в общем css файле (базовом), а так же, когда мы используем иные свойства на внутренних (не на главной) страницах. Или же когда над одной версткой могут работать несколько верстальщиков. Вторая причина когда мы подключаем сторонние библиотеки (код написанный другими программистами), допустим для слайдеров, галерей, и чтобы их библиотеки можно было бы без труда встроить в любой сайт, то они используют в обязательном порядке префиксы. Пример префикса «fa» для вставки на сайте особых иконок от font-awesome, удобная, кстати, вещь, я использую в своих сайтах 🙂 .

варианты стилизации — учебник CSS

Элемент <img> является стандартным тегом для добавления графических элементов на веб-страницу. Его используют для размещения фотографий, логотипов, графических элементов интерфейса и т. п. Для стилизации тега img можно пользоваться стандартными свойствами CSS, например, border, box-shadow, opacity, float и другими. Это позволяет определять вид и расположение изображения на веб-странице.

На практике, чаще всего к тегу img применяются следующие свойства:

  • border — вы можете создать рамку для изображения (или даже для целой галереи фотографий), при этом указав любую ширину и цвет границ. Как вы помните, можно даже стилизовать рамку индивидуально для каждой стороны.
  • padding — небольшие внутренние отступы между фотографией и рамкой помогут сымитировать эффект подложки. А с помощью свойства background-color можно изменить и сам цвет подложки.
  • box-shadow — используя это свойство в паре с предыдущими, можно добиться различных интересных эффектов, например, оформить портрет в стиле Polaroid:
    Эффект рамки Polaroid с помощью CSS (скриншот)

    А вот и код для данного эффекта (разверните, чтобы увидеть HTML и CSS):

    
          <div>
                <img src="URL-of-your-photo" />
          </div>
        
    
          .polaroid {
                position: relative;
          }
          .polaroid img {
                border: 25px solid #fafafa;
                border-top-width: 35px;
                border-bottom-width: 100px;
                -webkit-box-shadow: 3px 3px 6px 4px #888;
                -moz-box-shadow: 3px 3px 6px 4px #888;
                box-shadow: 3px 3px 6px 4px #888;
          }
        
  • float — применив это свойство ко всем миниатюрам фотографий и добавив еще несколько строк CSS-кода, можно легко создать многострочную галерею:
    Фотогалерея с помощью CSS (скриншот)

При стилизации тегов img практически всегда понадобится создавать классы для выборки, чтобы не затрагивать другие изображения на веб-странице (например, чтобы избежать добавления рамки к логотипу или иконкам интерфейса). Так, фотографиям галереи можно присвоить класс .gallery-photo либо подобный, и уже к нему применять стили, предназначенные для фотогалереи. Можно также пользоваться и другими типами селекторов — благо, CSS предоставляет широкий выбор возможностей.


Далее в учебнике: установка изображения в качестве фона с помощью background-image.

background-image — CSS: каскадные таблицы стилей

Свойство CSS background-image устанавливает одно или несколько фоновых изображений для элемента.

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

Затем поверх них рисуются границы элемента, а под ними рисуется background-color . То, как изображения рисуются относительно блока и его границ, определяется CSS-свойствами background-clip и background-origin .

Если указанное изображение не может быть нарисовано (например, когда файл, обозначенный указанным URI, не может быть загружен), браузеры обрабатывают его так же, как и значение none .

Примечание: Даже если изображения непрозрачны и цвет не будет отображаться в обычных условиях, веб-разработчики всегда должны указывать background-color . Если изображения не могут быть загружены, например, когда сеть не работает, цвет фона будет использоваться в качестве запасного.

Каждое фоновое изображение задается либо как ключевое слово none , либо как значение .

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

  фоновое изображение:
  линейный градиент (к низу, rgba (255,255,0,0,5), rgba (0,0,255,0,5)),
  url ('catfront.png');


фоновое изображение: наследовать;
фоновое изображение: начальное;
фоновое изображение: вернуться;
фоновое изображение: отключено;  

Значения

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

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

  # 

, где
= none |

, где
= | <изображение ()> | <набор изображений ()> | | <краска ()> | <плавное затухание ()> | <градиент>

где
= image (? [?, ?]!)
= image-set ( #)
= element ()
= paint (, ?)
<переходное затухание ()> = плавное затухание (, ?)
= | <повторяющийся линейный градиент ()> | <радиальный градиент ()> | <повторяющийся радиальный градиент ()> |

, где
= ltr | rtl
= | <строка>
<цвет> = | | | | <шестнадцатеричный цвет> | <имя-цвета> | текущий цвет | <устаревший-системный-цвет>
= [ | <строка>] [<разрешение> || type ()]
=
= <процент>? && <изображение>
= <изображение> |
= linear-gradient ([ | to ]?, )
= повторяющийся-линейный-градиент ([<угол> | до <стороны- или-угла>]?, <список-остановок-цветов>)
<радиальный-градиент ()> = радиальный-градиент ([ || ]? [at ]?, )
= повторяющийся-радиальный-градиент ([ || <размер >]? [at ]?, )
= conic-gradient ([from ]? [at ] ?, )

где
= rgb (<процент> {3} [/ ]?) | rgb (<число> {3} [/ <альфа-значение>]?) | rgb (<процент> # {3}, <альфа-значение>?) | rgb (<число> # {3}, <альфа-значение>?)
= rgba (<процент> {3} [/ <альфа-значение>]?) | rgba (<число> {3} [/ <альфа-значение>]?) | rgba (<процент> # {3}, <альфа-значение>?) | rgba (<число> # {3}, <альфа-значение>?)
= hsl (<оттенок> <процент> <процент> [/ <альфа-значение>]?) | hsl (<оттенок>, <процент>, <процент>, <альфа-значение>?)
= hsla (<оттенок> <процент> <процент> [/ <альфа-значение>]?) | hsla (<оттенок>, <процент>, <процент>, <альфа-значение>?)
<сторона-или-угол> = [слева | справа] || [наверх | внизу]
<список-остановок-цветов> = [<остановка-цветов> [, <подсказка-цветов>]? ] #,
= круг | эллипс
<размер> = ближайшая сторона | дальняя сторона | ближайший угол | дальний угол | <длина> | <длина- процент> {2}
<позиция> = [[слева | центр | справа] || [наверх | центр | внизу] | [слева | центр | право | <длина- процент>] [наверх | центр | внизу | <длина-процент>]? | [[слева | справа] <длина-процент>] && [[вверх | снизу] <длина-процент>]]
<угловой-список-остановок> = [<угловой-цвет-стоп> [, <угловой-цвет-подсказка>]? ] #, <угловой-цветной-стопор>

, где
<альфа-значение> = <число> | <процент>
<оттенок> = <число> | <угол>
= ?
<линейный-цвет-подсказка> = <длина-процент>
<длина-процент> = <длина> | <процент>
<угловая-цвет-остановка> = <цвет> && <цвет-остановка-угол>?
=

, где
= {1,2}
= {1,2}
<угол-процент> = <угол> | <процент>

Наслоение фоновых изображений

Обратите внимание, что изображение звезды частично прозрачно и накладывается на изображение кошки.

HTML
  

Этот абзац полон кошек
и звезд.

Этого абзаца нет.

Вот вам еще кошек.
Посмотрите на них!

И не более того.

CSS
  п {
  размер шрифта: 1.5em;
  цвет: # FE7F88;
  фоновое изображение: нет;
  цвет фона: прозрачный;
}

div {
  фоновая картинка:
      url ("mdn_logo_only_color.png ");
}

.catsandstars {
  фоновая картинка:
      url ("startransparent.gif"),
      url ("catfront.png");
  цвет фона: прозрачный;
}
  
Результат

таблиц BCD загружаются только в браузере

HTML img vs CSS background-image

Итак, вы смотрите на дизайн-композицию с изображением в ней и пытаетесь выбрать между использованием HTML & lt; img & gt; или фоновое изображение CSS.

Сначала вы можете подумать: «Это вообще имеет значение?»

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

Но вы здесь, поэтому вы хотите принять обоснованное решение .

Вот пошаговый процесс выбора между ними.

Шаг 1. Специальные возможности

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

Например, & lt; img & gt; Теги могут добавлять замещающий текст и атрибут заголовка, которые могут быть выбраны программами чтения с экрана. Это важно не только для конечных пользователей, но и для индексации в результатах поиска Google.Вот выдержка из официального центрального блога Google для веб-мастеров об умном использовании альтернативных атрибутов:

Поскольку робот Googlebot не видит изображения напрямую, мы обычно концентрируемся на информации, представленной в атрибуте alt. Не стесняйтесь дополнять атрибут «alt» словом «title» и другими атрибутами, если они представляют ценность для ваших пользователей!

Хотите доступности и лучшего SEO? Используйте & lt; img & gt; тег.

Остальные соображения относятся к изображениям как чистому визуальному дизайну-улучшениям .

Шаг 2. Фоновое изображение CSS и производительность

Если вы ссылаетесь на один и тот же URL-адрес изображения, технически запрос будет таким же, поэтому время, необходимое для загрузки, должно быть одинаковым. Однако проблема производительности действительно сводится к тому, когда делается запрос.

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

с & lt; img & gt; , запросы выполняются по мере анализа HTML, поэтому любой контент, предшествующий тегу в документе, будет информацией, которую пользователи могут начать читать.

Кроме того, встроенные изображения ( & lt; img & gt; или & lt; picture & gt; ) могут использовать такие инструменты, как заливка изображений и отложенная загрузка, для еще большего повышения производительности.

Шаг 3. Возможности CSS для обработки фонового изображения

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

Фоновые изображения могут использоваться вместе с background-color , background-repeat , background-attachment , background-position и background-blend-mode . Это открывает множество возможностей, если возникнет необходимость в манипуляциях.

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

Заключение

HTML & lt; img & gt; Теги следует использовать для обеспечения доступности и SEO.В противном случае подумайте о скорости, производительности и манипуляциях, когда изображение является чисто визуальным улучшением дизайна.

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

Избегайте отображения информационных изображений на фоне CSS

Если ваше изображение содержит важную информацию для конечного пользователя, тогда он должен быть предоставлен в HTML тег с надлежащим вместо текст. Спецификация CSS гласит:

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

Не могу избежать использования изображений CSS или добавить замещающий текст для «неважные» фотографии окружающей среды и т. д.?

Спецификация CSS делает это «ДОЛЖНЫ», а не «ДОЛЖЕН», потому что бывают случаи, когда существующий код затрудняет преобразование его в изображение HTML без редизайна интерфейса.В других случаях автор может захотеть чтобы предоставить альтернативный текст для окружающего изображения, который является , а не «важно» для понимания содержания, но из вежливости пользователям программ чтения с экрана, которые предпочитают знать, что изображено на картинке. Вот подробная статья об эмбиенте. изображения vs чистое украшение vs информационные образы.

При предоставлении альтернативного текста для изображения CSS есть количество рассмотрений

Если

в теге есть какое-либо содержимое, тогда role = "img" а также ария-этикетка может скрыть внутреннее содержимое из-за доступных расчет имени , или вспомогательные технологии могут просто игнорировать ария-этикетка .

Поэтому не помещайте фоновое изображение CSS внутри

который содержит любой контент. Лучше использовать пустой и ария-этикетка с участием role = "img"

Сделайте это:


<диапазон role = "img" aria-label = "[поместите альтернативный текст здесь]>
[все остальное мое содержание]

Не делайте этого:


[все остальное моего содержания]

Что делать, если у автора должно быть изображение CSS в div, содержит контент

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

, которое завершает другой контент, затем хакерский запасной вариант — сделать это.

<диапазон role = "img" aria-label = "[поместите альтернативный текст здесь]>
[все остальное мое содержание]

Это взлом, потому что семантически альтернативный текст не включен элемент, который на самом деле имеет изображение. Однако с экрана читатель видит

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

Резюме

  • Старайтесь не использовать CSS для важных информационных изображений
  • Для окружающих изображений, которые являются CSS, любезно предоставить альтернативный текст. При этом поместите изображение в собственное пустой с aria-label и role = "img. Это также верно, в ситуации где CSS должен использоваться для информационного содержания.
  • Если
    с изображением CSS ОБЯЗАТЕЛЬНО ДОЛЖЕН содержать другой контент, а затем предоставить пустой с aria-label и role = "img" сразу после
    , имеющего изображение.

Не стесняйтесь комментировать в Twitter @davidmacd

Информация об авторе:

Дэвид Макдональд — ветеран WCAG, соредактор использования WAI ARIA в HTML5 и член рабочей группы по доступности HTML5. Мнение мое собственное.


отложенных загрузок изображений — полное руководство

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

Согласно последним данным HTTP-архива, средний размер страницы на настольных компьютерах составляет 1511 КБ. Изображения составляют почти 650 КБ этого размера, примерно 45% от общего размера страницы. Теперь, поскольку мы не можем отказаться от изображений, нам нужно сделать так, чтобы наши веб-страницы загружались с ними быстрее.

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

Получите это руководство в виде электронной книги. Прямо в ваш почтовый ящик!

Содержание

Что такое отложенная загрузка изображений?

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

Вот небольшой видеоролик, который поможет вам лучше понять:

Слово «ленивый» в английском языке часто приписывают как можно дольше избегать работы.

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

Технику отложенной загрузки можно применить практически ко всем ресурсам на странице. Например, в одностраничном приложении, если файл JS понадобится позже, лучше не загружать его изначально. Если изображение не требуется заранее, загрузите его позже, когда его действительно нужно будет просмотреть.

Зачем вообще нужна отложенная загрузка изображений?

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

Он имеет два основных преимущества.

1. Повышение производительности

Это наиболее важный шаг для вас как администратора веб-сайта — повышение производительности и времени загрузки.

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

2. Снижение затрат

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

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

Какие изображения можно загружать лениво?

Основная идея отложенной загрузки проста — отложить загрузку всего, что сейчас не нужно. Для изображений это обычно означает, что любое изображение, которое не видно пользователю, может быть загружено лениво.

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

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

Ленивая загрузка важна не только для хорошей производительности, но и для удобства пользователей.

Способы отложенной загрузки изображений

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

Общая концепция отложенной загрузки изображений в теге

Ленивая загрузка изображений может быть разбита на два этапа:

Шаг первый — предотвратить загрузку изображений заранее.Для изображений, загруженных с использованием тега , браузер использует атрибут src тега для запуска загрузки изображения. Независимо от того, является ли это 1-м или 1000-м изображением в вашем HTML и находится вне экрана, если браузер получит атрибут src , он вызовет загрузку изображения.

Таким образом, чтобы отложить загрузку таких изображений, поместите URL-адрес изображения в атрибут, отличный от src . Допустим, мы указываем URL изображения в атрибуте data-src тега изображения.Теперь, когда src пуст, браузер не запускает загрузку изображения

    

Теперь, когда мы остановили предварительную загрузку, нам нужно указать браузеру, когда загружать изображение.

Для этого мы проверяем, что как только изображение (то есть его заполнитель) попадает в область просмотра, мы запускаем загрузку.

Чтобы проверить, когда изображение попадает в область просмотра, есть два способа:

Инициировать загрузку изображения с использованием событий Javascript

В этом методе мы используем прослушиватели событий на scroll , resize, и Ориентация Изменить событий в браузер.Событие прокрутки — очевидное событие для проверки, когда пользователь прокручивает страницу. События resize и directionChange одинаково важны для отложенной загрузки. Событие изменения размера происходит при изменении размера окна браузера. Событие ориентацииChange запускается, когда устройство поворачивается из ландшафтного в портретный режим или наоборот. В таких случаях количество изображений, которые становятся видимыми на экране, изменится. Следовательно, нам нужно активировать загрузку этих изображений.

Когда происходит какое-либо из этих событий, мы находим все изображения на странице, которые должны быть загружены лениво и еще не загружены.По этим изображениям мы проверяем, какие из них сейчас находятся во вьюпорте. Это делается с помощью смещения верхнего края изображения, верхнего края прокрутки текущего документа и высоты окна. Если он вошел в область просмотра, мы выбираем URL-адрес из атрибута data-src и помещаем его в атрибут src . Это вызывает загрузку изображения. Мы также удаляем класс lazy , который определяет изображения, которые нужно отложить для загрузки для событий, которые запускаются позже. Как только все изображения загружены, мы удаляем прослушиватели событий.

Когда мы прокручиваем, событие прокрутки срабатывает несколько раз быстро. Таким образом, для повышения производительности мы добавляем небольшой тайм-аут, который ограничивает выполнение функции отложенной загрузки.

Вот рабочий пример такого подхода.

Если вы заметили, первые 3 изображения в примере загружаются заранее. URL-адрес присутствует непосредственно в атрибуте src вместо атрибута data-src . Это важно для хорошего взаимодействия с пользователем. Поскольку эти изображения находятся вверху страницы, их следует сделать видимыми как можно скорее.Мы не должны ждать, пока событие или выполнение JS загрузят их.

Использование Intersection Observer API для запуска загрузки изображений

Intersection Observer API — относительно новый API в браузерах. Это позволяет очень просто определить, когда элемент входит в область просмотра, и предпринять действия, когда это произойдет. В предыдущем методе нам нужно было привязать события, учитывать производительность и реализовать способ вычисления, был ли элемент в области просмотра или нет. API-интерфейс Intersection Observer делает это действительно простым, помогает избежать математических вычислений и обеспечивает отличную производительность.

Пример использования Intersection Observer API для ленивой загрузки изображений:

Мы прикрепляем наблюдателя ко всем изображениям для ленивой загрузки. Как только API обнаруживает, что элемент вошел в область просмотра, используя свойство isIntersecting , мы выбираем URL-адрес из атрибута data-src и перемещаем его в атрибут src , чтобы браузер запускал загрузку изображения. Как только это будет сделано, мы удаляем ленивый класс из изображения, а также удаляем наблюдателя из этого изображения.

Если вы сравните время, затраченное на загрузку изображения в обоих методах, прослушивателях событий и Intersection Observer, вы обнаружите, что при использовании Intersection Observer API загрузка изображения запускается намного быстрее, и все же сайт не выглядит вялым при прокрутке. В методе, включающем прослушиватели событий, нам пришлось добавить тайм-аут, чтобы сделать его работоспособным, что оказывает незначительное влияние на взаимодействие с пользователем, поскольку загрузка изображения запускается с небольшой задержкой.

Однако поддержка Intersection Observer API доступна не во всех браузерах.Следовательно, нам нужно вернуться к методу прослушивателя событий в браузерах, где API-интерфейс Intersection Observer не поддерживается. Мы учли это в приведенном выше примере.

Собственная отложенная загрузка

В своем последнем обновлении Google добавила поддержку собственной отложенной загрузки в последней версии браузера Chrome — Chrome 76. Все браузеры на основе Chromium, то есть Chrome, Edge, Safari и Firefox. Вы можете найти более подробную информацию о поддержке браузером нативной отложенной загрузки на caniuse.com.

Теперь, когда в игру вступает поддержка со стороны браузера, разработчикам нужно только добавить атрибут «загрузка» при встраивании изображений, чтобы реализовать отложенную загрузку на своих веб-сайтах.

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

Итак, код теперь будет выглядеть так —

  ... 
  

Атрибут загрузки поддерживает следующие значения:

  • lazy — Откладывание загрузки ресурсов до достижения определенное расстояние от области просмотра.
  • eager — загрузка ресурсов сразу после загрузки страницы, независимо от того, где они размещены на странице, выше или ниже сгиба страницы.
  • auto Это значение запускает отложенную загрузку по умолчанию.По сути, это то же самое, что не включать атрибут загрузки.

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

Как описано далее в этом блоге, чтобы предотвратить перекомпоновку окружающего контента при загрузке лениво загруженного изображения, обязательно добавьте атрибуты height и width к элементу или укажите их значения напрямую. во встроенном стиле:

  … 
…  

Получите это руководство в виде электронной книги. Прямо в ваш почтовый ящик!

Ленивая загрузка фоновых изображений CSS

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

С фоновыми изображениями CSS все не так просто.Чтобы загрузить фоновые изображения CSS, браузеру необходимо построить дерево DOM (объектная модель документа), а также дерево CSSOM (объектная модель CSS), чтобы решить, применяется ли стиль CSS к узлу DOM в текущем документе.

Если правило CSS, определяющее фоновое изображение, не применяется к элементу в документе, браузер не загружает фоновое изображение. Если правило CSS применимо к элементу в текущем документе, браузер загружает изображение.

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

Вот рабочий пример ленивой загрузки фонового изображения CSS.

Следует отметить, что код Javascript для отложенной загрузки остался прежним. Мы используем метод API Intersection Observer с откатом к слушателям событий. Уловка заключается в CSS.

Элемент с идентификатором bg-image имеет фоновое изображение , указанное в CSS.Однако, когда к этому элементу добавляется класс lazy , в CSS мы переопределяем свойство background-image и устанавливаем его значение none.

Поскольку правило, объединяющее # bg-image с .lazy класс имеет более высокий приоритет в CSS, чем просто # bg-image , браузер изначально применяет свойство background-image: none к элементу . Когда мы прокручиваем вниз, Intersection Observer (или прослушиватели событий) обнаруживает, что изображение находится в области просмотра, и удаляет класс lazy .Это изменяет применимый CSS и применяет фактическое свойство background-image к элементу, запускающему загрузку фонового изображения.

Лучшее взаимодействие с пользователем с отложенной загрузкой изображений

Ленивая загрузка дает большое преимущество в производительности. Для компании электронной коммерции, которая загружает сотни изображений продуктов на страницу, отложенная загрузка может обеспечить значительное сокращение времени начальной загрузки страницы при одновременном снижении потребления полосы пропускания.

Однако многие компании не выбирают ленивую загрузку, потому что они считают, что это противоречит обеспечению хорошего пользовательского опыта, цитируя такие причины, как «начальный заполнитель уродлив», «время загрузки медленное» и т. Д.

Как мы можем решить такие проблемы, связанные с пользовательским интерфейсом, с отложенной загрузкой изображений?

1. Использование правильных заполнителей изображения

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

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

Взгляните на некоторые примеры лучших заполнителей для наших изображений:

a) Заполнитель доминирующего цвета

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

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

Пример изображения, взятого из Manu.ninja

Это может показаться сложным для достижения, но очень простой способ добиться этого — сначала уменьшить изображение до 1×1 пикселя, а затем масштабировать его до размера заполнителя — очень грубое приближение, но простой способ без суеты получить единственный доминирующий цвет.

Используя ImageKit, заполнитель доминирующего цвета можно получить с помощью последовательного преобразования в ImageKit, как показано здесь:

Пример URL-адреса изображения заполнителя доминирующего цвета с использованием ImageKit исходное изображение  заполнитель доминирующего цвета

Размер изображения заполнителя составляет всего 661 байт по сравнению с исходным изображением, которое 12700 байт, что делает его 19x меньше . И это обеспечивает более приятный переход от заполнителя к фактическому изображению.

Вот видео, демонстрирующее, как этот эффект работает для пользователя:

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

b) Заполнитель изображения низкого качества (LQIP)

Мы можем расширить вышеприведенную идею использования заполнителя доминирующего цвета.

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

Эту технику использовали Facebook и Medium.com для изображений на своих веб-сайтах и ​​в приложениях.

Пример URL-адреса изображения LQIP с использованием ImageKit

  
исходное изображение


заполнитель доминирующего цвета  

LQIP имеет размер 1300 байт, что почти в 10 раз меньше исходного изображения и является значительным улучшением визуального восприятия по сравнению с любым другим методом заполнителя.

Вот видео, демонстрирующее, как этот эффект работает для пользователя:

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

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

2.Добавление некоторого времени буфера для загрузки изображения

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

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

Хотя использование Intersection Observers для загрузки изображения или использование заполнителей изображений низкого качества обеспечивает лучшую производительность загрузки и удобство для пользователя, есть еще один простой трюк, который вы можете использовать, чтобы гарантировать, что изображения всегда загружаются полностью, когда они входят в область просмотра — введение запас до точки срабатывания для изображений.

Решение
Вместо загрузки изображения, когда они точно входят в область просмотра, загружайте изображения, когда они, скажем, на расстоянии 500 пикселей от входа в область просмотра.Это обеспечивает дополнительное время между триггером загрузки и фактическим входом в окно просмотра для загрузки изображений.

С помощью Intersection Observer API вы можете использовать параметр root вместе с параметром rootMargin (работает как стандартное правило полей CSS), чтобы увеличить эффективную ограничивающую рамку, которая считается находящей «пересечение».

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

В этом примере для загрузки изображений используется порог в 500 пикселей.

Как видно из видео ниже (отслеживайте сетевые запросы, которые четко отображаются внизу), при прокрутке, когда отображается третье изображение, загружается 5-е изображение. Когда в поле зрения появляется 4-е изображение, загружается 6-е изображение. Таким образом мы даем достаточно времени для полной загрузки изображений, и в большинстве случаев пользователь вообще не увидит заполнитель.

Если вы еще не заметили, во всех наших примерах третье изображение (image3.jpg) всегда загружается впереди, даже если он находится за пределами области просмотра. Это также было сделано по тому же принципу — загружать немного заранее, а не загружать точно на пороге для лучшего взаимодействия с пользователем.

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

3. Предотвращение смещения контента при отложенной загрузке

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

Проблема
Когда изображение отсутствует, браузер не знает размеров содержимого, которое должно отображаться во вложенном контейнере. И если мы не укажем его с помощью CSS, охватывающий контейнер не будет иметь размеров, то есть 0 x 0 пикселей. Итак, когда изображение загружается, браузер изменяет размер охватывающего контейнера, чтобы он соответствовал изображению.
Это внезапное изменение макета заставляет другие элементы перемещаться, и это называется смещением содержимого. Как показано в этой статье и видео о перемещении контента из журнала Smashing Magazine, это довольно неприятный опыт для пользователя, поскольку контент внезапно перемещается при загрузке изображения.

Решение
Этого можно избежать, указав высоту и / или ширину для вашего включающего контейнера, чтобы браузер мог раскрасить контейнер изображения с известной высотой и шириной.Позже, когда изображение загружается, поскольку размер контейнера уже указан и изображение идеально вписывается в него, остальное содержимое вокруг контейнера остается на месте.

4. Не ленитесь загружать все изображения

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

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

a) Любое изображение, которое присутствует в области просмотра или в начале веб-страницы, должно загружаться с ленивой загрузкой , а не . Это относится к любому изображению заголовка, маркетинговому баннеру, логотипам и т. Д., Поскольку пользователь должен увидеть их, как только страница загрузится.

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

b) Любое изображение, которое немного выходит за пределы области просмотра, не должно загружаться лениво. Это основано на том, что обсуждалось ранее — загрузите немного заранее. Итак, скажем, любое изображение размером 500 пикселей или одиночная прокрутка снизу области просмотра также может быть загружена впереди.

c) Если страница не слишком длинная, это может быть всего одна или две прокрутки, или если за пределами области просмотра меньше 5 изображений, то отложенной загрузки можно вообще избежать.

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

Javascript-зависимость отложенной загрузки

Вся идея отложенной загрузки зависит от доступности возможностей выполнения Javascript в браузере пользователя. Хотя нативная отложенная загрузка обещает удалить эту зависимость, при том, что поддержка браузером все еще близка к 70%, если вы хотите обеспечить одинаковый опыт во всех браузерах, вам все равно придется использовать библиотеки JS.

Хотя у большинства ваших пользователей в браузере было бы разрешено выполнение Javascript, поскольку в наши дни это важно практически для всех веб-сайтов, вы можете запланировать для пользователей, которые не разрешают выполнение javascript, или используют браузер, не поддерживающий javascript. вообще.

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

Эта ветка на Stack Overflow отлично справляется с этими проблемами, и ее рекомендуется прочитать всем, кто хочет обратиться к этой группе пользователей.

Популярные библиотеки Javascript для отложенной загрузки на вашем веб-сайте

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

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

yall.js (еще один ленивый загрузчик)

  • Использует Intersection Observer и возвращается к отложенной загрузке на основе событий.
  • Поддерживает все основные типы элементов HTML, но не фоновые изображения.
  • Также работает с IE11 +.

lazysizes

  • Очень популярный и обширный функционал.
  • Также поддерживает атрибут srcset и размеры адаптивных изображений.
  • Высокая производительность даже без наблюдателя перекрестков.

jQuery Lazy

  • Простая библиотека отложенной загрузки на основе jquery.

WeltPixel Lazy Loading Enhanced

  • Расширение Magento 2 для отложенной загрузки изображений.

Magento Lazy Image Loader

  • Расширение Magento 1.x для отложенной загрузки изображений.

Shopify Плагин Lazy Image

  • Расширение Shopify для отложенной загрузки изображений.
  • Хотя платно.

WordPress A3 Lazy Load

  • Плагин отложенной загрузки изображений для WordPress.

Как проверить, работает ли ленивая загрузка?

После того, как вы внедрили отложенную загрузку, вы захотите проверить, соответствует ли поведение изображений на вашем веб-сайте заданному. Самый простой способ — открыть инструменты разработчика в браузере Chrome.

Перейдите на вкладку «Сеть»> «Изображения».

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

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

Другой способ — запустить отчет аудита Google Chrome Lighthouse на своей странице после того, как вы внедрили изменения, и поищите предложения в разделе «Неэкранные изображения».

Заключение

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

Итак, чего вы ждете? Начните с отложенной загрузки изображений прямо сейчас!

Вы оптимизируете изображения своего веб-сайта? Нет? Начните работу с CDN изображений и инструментом оптимизации ImageKit бесплатно прямо сейчас!

Разница между тегом HTML img и фоновым изображением CSS

В этом блоге я покажу вам разницу между тегом HTML img и фоновым изображением CSS, чтобы вам было проще решить, что и когда использовать.

1. СОДЕРЖАНИЕ:

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

2. ДОСТУПНОСТЬ:

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

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

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

3. ПРОИЗВОДИТЕЛЬНОСТЬ:

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

4. ПЕЧАТЬ:

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

ВЫВОД:

HTML-теги должны использоваться, когда они являются важной частью контента.Решение о выборе между ними зависит от вопроса, помогает ли изображение людям лучше понять содержание.

СПАСИБО

HTML / теги таблиц / фоновое изображение — индекс тега

: применяется ко всем ячейкам подряд : применено к одной ячейке

Атрибут background элементов TABLE, TR и TD (TH) определяет фоновое изображение таблицы.

 
  
: применяется ко всей таблице
Атрибут Значение Пояснение
background = «» URL URL-адрес изображения для отображения

Атрибут расширения. (Нестандартный атрибут)

Используйте CSS вместо этого атрибута. Подробную информацию о CSS см. В «Связанном документе».

Пример

Фоновое изображение

Фоновое изображение стола
 
   
Строка1 - Столбец1 Строка1 - Столбец2 Строка1 - Столбец3
Строка2 - Столбец1 Строка2 - Столбец2 Строка2 - Столбец3
Строка3 - Столбец1 Строка3 - Столбец2 Row3 - Col3
Выход
Ряд 1 — Столбец Ряд 1 — Столбец 2 Ряд 1 — Столбец 3
Ряд 2 — Столб 1 Ряд 2 — Столбец 2 Ряд 2 — Столбец 3
Ряды 3 — Столбцы 1 Ряд 3 — Столбец 2 Ряд 3 — Столб 3
Фоновое изображение строки
 
  
Строка1 - Столбец1 Строка1 - Столбец2 Строка1 - Колонка3
Строка2 - Столбец1 Строка2 - Столбец2 Строка2 - Столбец3
Строка3 - Столбец1 Строка3 - Столбец2 Row3 - Col3
Выход
Ряд1 — Столбец Ряд 1 — Столбец 2 Ряд 1 — Столбец 3
Ряд 2 — Столб 1 Ряд 2 — Столбец 2 Ряд 2 — Столбец 3
Ряды 3 — Столбцы 1 Ряд 3 — Столбец 2 Ряд 3 — Столб 3
Фоновое изображение ячеек
 
   
Строка1 - Столбец1 Row1 - Col2 Строка1 - Колонка3
Строка2 - Столбец1 Row2 - Col2 Строка2 - Столбец3
Строка3 - Столбец1 Row3 - Col2 Row3 - Col3
Выход
Ряд1 — Столбец Ряд1 — Столбец 2 Ряд 1 — Столбец 3
Ряд 2 — Столб 1 Ряд 2 — Столбец 2 Ряд 2 — Столбец 3
Ряды 3 — Столбцы 1 Ряд 3 — Столбец 2 Ряд 3 — Столб 3
Табличные теги
Связанный документ

Как добавить фоновые изображения к карточкам

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

В этой статье
Настройка изображений
    1
    Мы собираемся начать с таблицы данных, так как именно здесь мы собираемся разместить наши изображения. Если вы загрузили свои данные, вам нужно будет добавить новый столбец для изображений.
    2
    Здесь мы вставим наши изображения в этот столбец в соответствующей строке.Вы можете использовать разные изображения для каждой строки или оставить изображение одинаковым. Узнайте больше о загрузке изображений в Flourish здесь.
    3
    После того, как вы загрузили свое изображение, вам нужно убедиться, что вы включили свой столбец / правильно выбрали столбец в привязке столбца. Вы можете изменить это на панели справа.
Настройка фоновых изображений
    1
    Шаблон карточек предлагает два основных способа показа изображений:
    • Наложение изображения
    • Стандартное изображение, появляющееся над или под текстом

    Эти настройки можно изменить в раскрывающемся меню «Карты» в настройках и изменив параметр Макет карты .В нашем примере мы использовали наложение изображения.

    2
    Чтобы изменить цвет наложения изображения, вы захотите использовать Цвета Настройка . Вы можете узнать больше об этом в нашей справочной документации о изменение цвета ваших карт.
    3
    Вы также можете настроить внешний вид вашего изображения, используя Изображение . Это позволит вам изменить непрозрачность, размер изображения, режим наложения и многое другое.Щелкните Расширенные настройки стиля изображения, чтобы увидеть дополнительные параметры.
Использование HTML для загрузки фонового изображения

С помощью функции «Настроить HTML карты» с помощью шаблона «Карты» вы можете загружать изображения с помощью HTML и CSS.

    1
    Выполните те же шаги, что и раньше, со вставкой нового столбца и добавлением изображений.
    2
    В разделе «Настройки карточек» прокрутите панель вниз и установите для параметра «Настроить HTML-код карты» значение «Вкл.
Автор записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *