Версия для печати: alternate stylesheet, media print
- «Качает» ли браузер CSS-файлы, помеченные как alternate stylesheet
- «Качает» ли при отображении на экране браузер CSS-файлы media=print
- «Качает» ли браузер <img>, которым через CSS прописан display:none
- И то же самое, если display:none прописан не для <img>, а для <div>, в котором находится этот <img>.
Первые два вопроса заинтересовали (последние два не менее интересны, просто я знал ответ), сделал пару тестов. Многовато налепил, но лучше перебдеть, чем наоборот; думал, может какой баг интересный всплывёт. С другой стороны, перебирать все возможные варианты нет времени, если кто обнаружит другое поведение браузеров при других условиях — велкам.
Методика 1. Останавливаем Apache, удаляем error.log, запускаем Apache. Создаём test.html, содержащий:
<link rel="stylesheet" href="1.css"
type="text/css" />
<link rel="stylesheet" href="2.css"
type="text/css" title="common" />
<link rel="stylesheet" href="3.css"
type="text/css" title="alternate2" />
<link rel="alternate stylesheet" href="4.css"
type="text/css" />
<link rel="alternate stylesheet" href="5.css"
type="text/css" title="alternate" />
<link rel="alternate stylesheet" href="6.css"
type="text/css" title="alternate2" />
Смотрим error.log:
- Opera 6.04: 1, 2, 3.
- Opera 7.21, 7.50, 7.53, 7.60p1: 1, 2, 3, 5, 6.
- Mozilla 1.8a5, Firefox 0.9.3: 1, 2, 3, 5, 6.
- IE4+: 1, 2, 3, 4, 5, 6.
Таким образом, если не обращать внимания на мелочи и не искать для эксперимента другие браузеры, то на первый вопрос можно ответить утвердительно.
Методика 2. То же, только test.html теперь содержит:
<style type="text/css">
@import url("1.css") print;
@media print { @import url("2.css"); }
@media print { @import url("3.css") print; }
</style>
<style type="text/css" media="all">
@import url("4.css") print;
@media print { @import url("5.css"); }
@media print { @import url("6.css") print; }
</style>
<style type="text/css" media="print">
@import url("7.css");
@import url("8.css") print;
@media print { @import url("9.css"); }
@media print { @import url("10.css") print; }
</style>
<link rel="stylesheet" href="11.css"
type="text/css" media="print" />
Смотрим error.log:
- O604+, M18a5/FF093: 1, 4, 7, 8, 11.
- IE4+: 2, 5, 7, 9, 11.
IE5+ пытается грузить (1,3,4,6,8,10) и в error.log появляются записи «Filename is not valid: c:/apache/htdocs/url("n.css") print».
Это относилось к режиму «Загрузили страницу на экран, печатать не пытались».
Методика 3. То же, что и в методике 2, только теперь вызываем «Print Preview». Посмотрел в Opera 7.54, FF 0.9.3, IE6 и в остальных смотреть не стал, т.к. дополнительно ничего не подгружалось.
Таким образом, и на второй вопрос говорим «Да, качает».
Ответ на последние два вопроса: Mozilla/IE — да, Opera/Safari — нет.
Личное мнение.
В принципе, логика загрузки печатных CSS понятна. Есть пользователи, которые могут загрузить документ, уйти в offline, а уже потом начать печатать. Логика загрузки альтернативных таблиц стилей может быть понятна по этой же причине. Конечно, можно было бы сначала грузить лишь основные таблицы, а подгрузку альтернативных осуществлять по мере необходимости, но, во-первых, в наше время это «экономия на спичках» (mod_gzip + header:cache), а во-вторых, если всё-таки хочется изменить эту логику, то это легко осуществить при помощи JS (отнимая у некоторых возможность пользоваться браузерными переключателями стилей). Опять же, альтернативные стили часто воспринимаются лишь как дополнительное украшательство, хотя они могут быть достаточно критичны (пример не приведу ;]).
Я в недоумении от загрузки внешних источников данных при указании display:none. Некоторые мои запросы было бы гораздо легче осуществить в той же Mozilla, если бы она не грузила такие картинки. Ведь есть прекрасное свойство visibility, зачем скрывать (просто скрывать) ещё и по display? Ну, да ладно, логика у каждого своя.
Categories: CSS | comments: (4)
Комментарии
1. Kildor 26th October 2004 - 09:44
То, что опера не грузит рисунки/ифреймы/флеш, к которым применено display:none; — факт. на этом построены блоки баннеров, реализованные через пользовательские css оперы.
2. Mendokusee 26th October 2004 - 10:59
Огромное спасибо! =)
Сослался со своего отчёта.
Mash:
Вам спасибо. :)
3. Mix 26th October 2004 - 13:40
>>@media print { @import url(«2.css»); }
>>@media print { @import url(«3.css») print; }
Между прочим в спецификации CSS2, говорится:
>>Агенты пользователей с поддержкой CSS2 должны игнорировать все правила '@import',
>>которые находятся внутри блока, либо не предшествует ни одному набору правил.
>>…
>>В следующем примере второе правило '@import' недопустимо,
>>т.к. оно находится в пределах блока '@media'.
>>
>>@import «subs.css»;
>>@media print {
>> @import «print-main.css»;
>> BODY { font-size: 10pt }
>>}
>>H1 {color: blue }
А невалидный CSS, браузеры не обязаны правильно понимать,
что судя по вашему тесту они и делают :)
Mash:
См. «думал, может какой баг интересный всплывёт». Просто когда уже были готовы результаты теста, я, чтобы не запутаться в «перецифровке», решил выложить в таком виде. К тому же, если следовать приведённой цитате из спецификации, видно, что IE не игнорирует некоторые правила, хотя обязан. Чем не интересный факт? ;)
Главное выяснили, что всё загружается сразу, остальное — другой вопрос.
4. madmause 4th April 2005 - 14:48
Люди помогите пожалуйсто….
Вот такой вопрос:
Веб страничка залазит справа за экран. И получаеться что при печати , то что за экраном обрезаеться.
Как зделать так что бы то что осталось оно распечатало на другом листе?
Заранее благодарен.