Медиазапросы и принт-версия вебстраницы #
Давайте поговорим о рецептах. Я поддерживаю один сайт с кулинарными рецептами. И на нём я в первый раз решал интересную и полезную задачу. И так. Представим, что ты пользователь, который ищет условный рецепт на ужин. Например “рецепт драников по-могилёвски”.
Пошаговый usercase для сайта рецептов #
- Вбить в гугл поисковый запрос.
- Найти или выбрать в выдаче сайт с подходящим, привлекательным рецептом.
- Распечатать его на принтере
В процессе обсуждения, усложнения или упрощения поведения пользователя мы можем прийти к тому, что страница с рецептом в браузере может очень существенно отличаться от желаемой странице распечатанной на листе А4.
- Различия могут быть в фоне страницы, розовенький на сайте и белый на листе. Хотя бы из-за экономии чернил принтера.
- Различия могут быть в яркости, толщине, высоте и типе шрифта. Знамениты шрифты с засечками и без.
- Различия могут быть в величине или вообще наличия красивых фотографий в распечатке. Привлекать внимание рецепт должен, но нужны ли пользователю фотографии сырой картошки или даже готовых драников на бумаге?
- Отступы, дата, автор, название сайта, категории рецептов - практический каждый блок и элемент сайта нуждается в проверке.
media print #
Надеюсь теперь убеждать в том, что принт-версия страницы важна, нужна и уникальна никого не надо.
Для добавления особенных стилей на сайт мы можем воспользоваться специальным правилом добавления:
@media print {
p {
font-family: Georgia, serif;
font-size: 1.6rem;
}
.title {
font-family: Georgia, serif;
font-size: 2.8rem;
}
img .print {
width: 400px;
}
img[class="hidden"], footer {
display: none;
}
}
Классом hidden мы можем пометить те секции, которые не нужны в распечатке. Мы можем просто через запятую указать все секции, которые нерелевантны для принтверсии.
Стили можно выложить отдельным css-файлом, правда это скорее The Old Ways:
<!--The Old Ways-->
<link rel="stylesheet" href="print.css" type="text/css" media="print"/>
Размеры, сантиметры и пойнты #
Возможно это тот пример, где применение сантиметров оправдано и разумно. Мы можем указать наши отступы именно в них, что бы принтер смог адекватно распечатать рецепт.
Это может выглядеть так:
body {
margin: 25mm 25mm 25mm 25mm;
}
Но на самом деле правильнее вот так:
@page {
margin: 2.5cm;
}
body {
margin: 0;
}
Можно встретить и такую запись:
@page {
size: 210mm 297mm;
margin: 27mm 16mm 27mm 16mm;
}
Или такую:
@page {
size: A4;
/* Формат бумаги в Европе А4,
DIN A4 standard, Europe
DIN = Deutsche Institut für Normung или устаревшее Deutsche Industrienorm */
margin: 0;
}
На секундочку стоит задуматься, если наши пиксели превратились в миллиметры и сантиметры, то правильно ли мы указали размер шрифтов? Если и указывать, то в пойнтах. Но вообще есть мнение, что мы не можем переписывать стандартные настройки пользователя. Решать вам:
@media print {
body {
font-size: 12pt;
font-family: Georgia, serif;
}
}
Background #
Стоит изменить background наших статей на тот, при котором мы не будем вынуждены работать на принтер и его чернила:
body {
background: white;
}
article {
background: transparent;
}
Цвет шрифта #
Проверьте, что текст статьи чёрный:
main {
color: #111;
}
Ссылки #
Достаточно глупо выглядит в тескте на бумаге “подробнее тут”. У нас есть возможность добавлять в анкоры ссылок саму ссылку:
a:link:after {
content: " (" attr(href) ") ";
}
Ссылки можно и нужно выделять. Общепринят синий цвет для ссылок, многие любят подчёркивание(я лично не люблю). Технически возможность добавить стили для ссылок может выглядеть так:
a:link {
font-weight: bold;
text-decoration: underline;
color: #06c;
}
Перенос на новую страницу #
Порой мы наверняка не знаем нужна часть информации пользователю или нет. Это могут быть фотографии к рецепту или комментарии. У нас есть параметр “page-break-before” и “page-break-after”, которые выносит контент на отдельную страницу. Пользователь при распечатке сам может укать печатать ему все страницы или только первую, вторую и седьмую. Есть параметр “page-break-inside”
#comments {
page-break-before: always;
}
:first |:left |:right #
Теоретически мы можем обратиться к титульной странице и к последующим. ч
@page :first {
/* .... */
}
Бесплатная реклама #
Порой распечатки передают дальше. И мы можем сделать себе небольшую маленькую рекламу. Например:
<div class="printMsg" id="printMsg">
<p>
Спасибо, что тебе интересен мой сайт andron13.de. Я буду рад увидеть тебя здесь снова!
</p>
</div>
#printMsg {
display: block;
/* добавьте красивые границы */
border: dashed 1px black;
}
Не забудьте только отключить этот блок в обычной версии.
#printMsg {
display: none;
}
Это основные мысли по поводу принт-версий страницы.