Неиспользуемые изображения CSS загружаются браузером или игнорируются?
Eg. в правилах CSS, которые не соответствуют никаким элементам.
.nothingHasThisClass{background:url(hugefile.png);}
Или это зависит от браузера?
Неиспользуемые изображения CSS загружаются браузером или игнорируются?
Eg. в правилах CSS, которые не соответствуют никаким элементам.
.nothingHasThisClass{background:url(hugefile.png);}
Или это зависит от браузера?
Это зависит от браузера, так как он решил реализовать спецификацию, однако в кратком тесте здесь:
Нет, они не загружаются, по крайней мере, в Firefox, IE8 и Chrome.
Простой способ проверить это:
<!DOCTYPE html>
<html>
<head>
<style type="text/css">
.nonexistent {
background: url('index.php?foo');
}
</style>
</head>
<body>
<?php if(isset($_GET['foo'])) {
file_put_contents('test.txt', $_SERVER['HTTP_USER_AGENT']);
} ?>
</body>
</html>
Если test.txt
заполняется агентом пользователя браузера, тогда изображение загружается. Это было не в любом из моих тестов.
Быстрый тест доказал это.
<!DOCTYPE html>
<html>
<head>
<title></title>
<style type="text/css"><!--
.hasnothing{background-image:url(http://25.media.tumblr.com/tumblr_ky7aakqvH01qatluqo1_400.jpg);}
.hassomething{background-image:url(http://27.media.tumblr.com/tumblr_kxytwr7YzH1qajh4xo1_500.png);}
--></style>
</head><body>
<div class="hassomething"></div>
</body></html>
Загружено 2-е изображение, tumblr_kxytwr7YzH1qajh4xo1_500.png
, но не другое. Это было доказано в Chrome (средства разработчика) и Firefox (Firebug).
Firefox и Chrome (Ubuntu 9.10) не загружают изображения для классов/идентификаторов, которые не применяются в DOM.
Возможно, это зависит как от платформы, так и от браузера.
Почти все браузеры выполняют ленивую загрузку. Если изображение не требуется, оно не загружается. Используйте firebug (дополнение в Firefox/Chrome), чтобы увидеть время загрузки ресурсов.
Иногда это зависит только от того, что означает "неиспользуемый". Различные браузеры определяют его по-разному. Например, в Firefox стили, применяемые к тегу <noscript>
, считаются "неиспользуемыми" и, следовательно, любые изображения не будут загружаться.
Chrome 26 (возможно, все из них, не уверены), делает загружает изображения CSS, если они применяются к элементу <noscript>
, даже если JS включен. (Мне не сразу понятно, почему, возможно, это ошибка?).
В не загружаются изображения CSS, применяемые к элементам в элементе <noscript>
. (это, конечно, ожидаемое поведение, конечно).
CSS
noscript { background-image: url('always.png') 0 0 repeat; }
noscript p ( background-image: url('nojsonly.png') 0 0 repeat; }
HTML:
<noscript>The CSS background image of this NOSCRIPT-element will always be downloaded in Chrome. Will not be downloaded in Firefox</noscript>
<noscript><p>The CSS background image of this P-element won't be downloaded in Chrome or other browsers, unless JS is disabled</p></noscript>
В этом случае, если пользователь имеет JS-совместимость, и always.png и otherbg.png загружаются в Chrome. Если у пользователя нет JS, то в Chrome загружается только nojsonly.png.
Я использую эту методику для измерения уровней трафика от пользователей, не поддерживающих JS, так как Google Analytics не позволяет нам здесь. Я предпочитаю использовать фоновый CSS-образ, а не обычный тег <img...>
, потому что я работаю по теории (непроверенной), что боты с меньшей вероятностью захватывают изображение CSS, чем изображение <img...>
, оставляя более точные подсчеты для человек посетители.
Интересно, однако, Chrome (по крайней мере) загрузит unused.png в следующем примере:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>test</title>
<style type="text/css">
.unused {
background: url(unused.png) no-repeat;
}
.used {
background: url(used.png);
}
</style>
</head>
<body>
<div class="unused used">
hello world
</div>
</body>
</html>