В каждом учебном руководстве по разработке адаптивных веб-сайтов рекомендуется использовать display:none
свойство CSS, чтобы скрыть содержимое от загрузки в мобильных браузерах, чтобы веб-сайт загружался быстрее. Это правда? Не display:none
загружает изображения или все еще загружает контент в мобильном браузере? Есть ли способ предотвратить загрузку ненужного контента в мобильных браузерах?
css
responsive-design
противный
источник
источник
Ответы:
Браузеры становятся умнее. Сегодня ваш браузер (в зависимости от версии) может пропустить загрузку изображения, если он может определить, что это бесполезно.
Изображение имеет
display:none
стиль, но его размер может быть прочитан сценарием. Chrome v68.0 не загружает изображения, если родитель скрыт.Вы можете проверить это там: http://jsfiddle.net/tnk3j08s/
Вы также можете проверить это, посмотрев на вкладку «сеть» инструментов разработчика вашего браузера.
Обратите внимание, что если браузер установлен на небольшом компьютере с процессором, отсутствие необходимости рендеринга изображения (и разметки страницы) ускорит всю операцию рендеринга, но я сомневаюсь, что сегодня это действительно имеет смысл.
Если вы хотите запретить загрузку изображения, вы можете просто не добавлять элемент IMG в документ (или установить
src
атрибут IMG на"data:"
или"about:blank"
).источник
Если вы сделаете изображение фоновым изображением div в CSS, когда для этого div установлено значение «display: none», изображение не будет загружаться. Когда CSS отключен, он все равно не будет загружаться, потому что, ну, CSS отключен.
источник
<div hidden style="display:none;width:0;height:0;visibility:hidden;background:url('test.jpg')"></div>
, Результаты: Firefox 29 и Opera 12 не загружаются. IE 11 и Chrome 34 загружаются.background-image
чтобыnone
в случаи , когда вы не хотите изображения для загрузки. Не нашли лучшей альтернативы для этого варианта использования, который не использует JS.display: none;
. Тестирование сети с окном ниже этой ширины: Chrome 35, IE11 и Edge не загружали изображенияОтвет не так прост, как просто да или нет. Проверьте результаты теста, который я недавно сделал:
Так что после дальнейшего изучения я нашел это , которое объясняет, как каждый браузер обрабатывает загрузку ресурсов img на основе отображения css: нет;
Выдержка из поста в блоге:
источник
HTML5
<picture>
тег поможет вам найти правильный источник изображения в зависимости от ширины экрана.По-видимому, поведение браузеров не сильно изменилось за последние 5 лет, и многие все равно будут загружать скрытые изображения, даже если для них установлено
display: none
свойство.Несмотря на то, что существует обходной путь для медиа-запросов , он может быть полезен только тогда, когда в CSS задано изображение в качестве фона.
В то время как я думал, что есть только решение проблемы JS ( ленивая загрузка , заполнение изображения и т. Д.) , Оказалось , что есть хорошее решение для чистого HTML, которое поставляется из коробки с HTML5.
И это
<picture>
тег.Вот как MDN описывает это:
И вот как это использовать:
Логика позади
Браузер загрузит источник
img
тега, только если не применяется ни одно из правил мультимедиа. Когда<picture>
элемент не поддерживается браузером, он снова возвращается к отображениюimg
тега.Обычно вы помещаете наименьшее изображение в качестве источника
<img>
и, следовательно, не загружаете тяжелые изображения для больших экранов. И наоборот, если применяется правило мультимедиа, источник<img>
не будет загружен, вместо этого он загрузит содержимое URL соответствующего<source>
тега.Единственный подводный камень в том, что если элемент не поддерживается браузером, он загрузит только маленькое изображение. С другой стороны, в 2017 году мы должны думать и кодировать в мобильном подходе.
И до того, как кто-то слишком взволнован, вот текущая поддержка браузера для
<picture>
:Настольные браузеры
Мобильные браузеры
Подробнее о поддержке браузера вы можете узнать на странице «Могу ли я использовать» .
Хорошо, что предложение html5please - использовать его с запасным вариантом. . И я лично намерен принять их совет.
Подробнее о теге вы можете найти в спецификации W3C . Там есть отказ от ответственности, который я считаю важным упомянуть:
Так что это говорит о том, что это только помогает вам улучшить производительность при загрузке изображения, предоставляя некоторый контекст для него.
И вы все еще можете использовать некоторую магию CSS, чтобы скрыть изображение на небольших устройствах:
Таким образом, браузер не будет отображать фактическое изображение и будет загружать только
1x1
пиксельное изображение (которое можно кэшировать, если вы используете его более одного раза). Имейте в виду, однако, что если<picture>
тег не поддерживается браузером, даже на экранах descktop фактическое изображение не будет отображаться (поэтому вам определенно понадобится резервная копия с полифилом).источник
Да, он будет отображаться быстрее, чуть-чуть, только потому, что ему не нужно отображать изображение, и он на один элемент меньше для сортировки на экране.
Если вы не хотите, чтобы он загружался, оставьте DIV пустым, чтобы в него можно было загружать html, содержащий
<img>
тег.Попробуйте использовать firebug или wireshark, как я упоминал ранее, и вы увидите, что файлы передаются, даже если они
display:none
есть.Opera - единственный браузер, который не будет загружать изображение, если для дисплея установлено значение none.Теперь Opera переместилась в webkit и будет отображать все изображения, даже если их отображение не установлено.Вот тестовая страница, которая докажет это:
http://www.quirksmode.org/css/displayimg.html
источник
** 2019 Ответ **
В нормальной ситуации
display:none
не мешает загрузке изображенияНо если элемент предка имеет,
display:none
то изображения потомка не будут загруженыДругие ситуации, которые мешают загрузке изображения:
1- целевой элемент не существует
2- Два одинаковых класса загружают разные изображения
Вы можете посмотреть сами здесь: https://codepen.io/juanmamenendez15/pen/dLQPmX
источник
Причудливый режим: изображения и отображение: нет
источник
Будет загружено фоновое изображение элемента div если для него установлено значение div: «display: none».
В любом случае, если у того же элемента div есть родительский элемент, а для этого родительского элемента установлено значение «display: none», фоновое изображение дочернего элемента не будет загружаться. . :)
Пример использования начальной загрузки:
источник
использование
<img src="" srcset="">
http://www.webdesignerdepot.com/2015/08/the-state-of-responsive-images/
https://caniuse.com/#feat=srcset
источник
Если вы сделаете изображение фоновым изображением div в CSS, когда для этого div установлено значение «display: none», изображение не будет загружаться.
Просто расширяю решение Брента.
Вы можете сделать следующее для чистого CSS-решения, оно также заставляет блок img фактически вести себя как блок img в настройке адаптивного дизайна (для этого и нужен прозрачный png), что особенно полезно, если ваш дизайн использует динамически-динамический изменение размера изображений.
Изображение будет загружено только в том случае, если медиа-запрос, связанный с visible-lg-block, запущен, и display: none изменяется на display: block. Прозрачный png используется, чтобы позволить браузеру установить соответствующие соотношения высоты: ширины для вашего блока <img> (и, следовательно, background-image) в плавном дизайне (высота: авто; ширина: 100%).
Таким образом, вы получите что-то вроде следующего, для 3 разных видов:
И только начальные изображения размера окна просмотра медиа загружаются во время начальной загрузки, а затем, в зависимости от вашего окна просмотра, изображения будут загружаться динамически.
И нет JavaScript!
источник
Чтобы предотвратить выбор ресурсов, используйте
<template>
элемент веб-компонентов .источник
Привет, ребята, я боролся с той же проблемой, как не загружать изображение на мобильный телефон.
Но я нашел хорошее решение. Сначала создайте тег img, а затем загрузите пустой svg в атрибут src. Теперь вы можете установить свой URL для изображения в виде встроенного стиля с содержимым: url ('ссылка на ваше изображение') ;. Теперь оберните ваш тег img в упаковку по вашему выбору.
Установите упаковщик так, чтобы он не отображал точку останова, в которую вы не хотите загружать изображение. Встроенный css тега img теперь игнорируется, поскольку стиль элемента, обернутого в оболочку с отображением none, будет игнорироваться, поэтому изображение не загружается, пока вы не достигнете точки останова, где оболочка имеет блок отображения.
Вот и все, очень простой способ не загружать img на мобильную точку останова :)
Проверьте этот код, для рабочего примера: http://codepen.io/fennefoss/pen/jmXjvo
источник
content
-property для изменения показанного изображения, то есть. Можете ли вы дать некоторые характеристики совместимости по этому вопросу?Нет. Изображение будет загружено как обычно и будет по-прежнему использовать полосу пропускания пользователя, если вы планируете экономить полосу пропускания пользователя мобильного телефона. Что вы можете сделать, это использовать медиазапрос и отфильтровать устройства, на которые вы хотите, чтобы ваше изображение загружалось. image должно быть установлено как фоновое изображение div и т. д., а НЕ как тег, так как тег image будет загружать изображение независимо от размера экрана и медиазапроса.
источник
Другой возможностью является использование
<noscript>
тега и размещение изображения внутри<noscript>
тега. Затем используйте javascript, чтобы удалитьnoscript
тег, как вам нужно изображение. Таким образом, вы можете загружать изображения по требованию, используя прогрессивное улучшение.Используйте это заполнение, которое я написал, чтобы прочитать содержимое
<noscript>
тегов в IE8https://github.com/jameswestgate/noscript-textcontent
источник
Используйте @media query CSS, в основном мы просто выпускаем проект, в котором у нас было огромное изображение дерева на рабочем столе сбоку, но не отображаемое на экранах таблиц / мобильных устройств. Так что предотвратить загрузку изображения довольно просто
Вот небольшой фрагмент:
Вы можете использовать тот же CSS, чтобы показывать и скрывать с помощью display / visibility / opacity, но изображение все еще загружалось, это был самый отказоустойчивый код, который мы придумали.
источник
мы говорим о том, что изображения не загружаются на мобильный, верно? так что, если вы только что сделали @media (min-width: 400px) {background-image: thing.jpg}
не будет ли он тогда искать изображение на определенной ширине экрана?
источник
Хитрость в использовании дисплея: никто с изображениями не должен назначать им идентификатор. Это было не так много кода, необходимого для его работы. Вот пример использования медиазапросов и 3 таблиц стилей. Один для телефона, один для планшета и один для рабочего стола. У меня 3 изображения, изображение телефона, планшета и рабочего стола. На экране телефона отображается только изображение телефона, на планшете отображается только изображение планшета, на рабочем столе компьютера отображается изображение рабочего стола. Вот пример кода, чтобы заставить его работать:
Исходный код:
Телефон CSS, который не нуждается в медиа-запросе. Это телефон img #, который заставляет его работать:
Планшетный css:
И рабочий стол css:
Удачи и дайте мне знать, как это работает для вас.
источник
display: none
изображение. Это: предотвращает ли загрузка изображения «display: none»?