Статья написана в далеком 2011 году одним товарищем по имени Jonathan Snook.
Статейка мне понравилась и пришлась в пору - мне как раз нужно было ознакомиться с вопросом масштабируемого размера шрифта и возможности единообразного задания его размера для всего документа.
Материальчик понравился и я решил, что я лучше не смогу его написать, чем как просто перевести. Вопрос хорошо освещен - кратко и по делу, с необходимыми примерами.
Думаю, в следующих своих верстках я буду применять именно тот подход, который описан здесь. Ниже - мой вольный перевод.
Размер шрифта в rem
Определение единиц измерения текста всегда было темой горячих споров, даже в наши дни. К сожалению, на сегодняшний день все еще существуют многочисленные “за” и “против” для каждого из методов определения универсальной единицы измерения шрифта. Вопрос заключается в том, чтобы выбрать наиболее приемлемую из всех приемлемых.
Наиболее популярны два метода определения размера шрифта:
- размер шрифта в пикселях
1
px
- размер шрифта в
1
em
Давайте сделаем краткий обзор обоих методов, прежде чем я представлю еще один - волшебный третий способ.
Размер шрифта в 1
px
1 | px |
С самого первого дня, когда зародился Интернет, мы (веб-мастера) использовали пиксели для задания размеров текста. Это надежный и понятный способ.
К сожалению, пользователи Internet Explorer - даже IE9 - не имеют возможности изменять размер текста, используя для этого встроенную функцию браузера.
Для веб-мастеров, которые озабочены такой возможностью, это большая проблема. Последние свежие версии браузера IE имеют встроенную функцию масштабирования, которая увеличивает размер ВСЕГО на странице - эта возможность присутствует во всех остальных браузерах, поддерживающих веб-стандарты. Это несколько сглаживает недостатки браузеров и данного метода, в частности.
Исходя из своего личного опыта, могу сказать, что использование пикселей предоставляет для меня надежную структуру будущего сайта. Пользователи браузеров имеют достаточно средств, чтобы подстроить сайт под свои предпочтения. Но я отвлекся от темы. Что еще у нас есть в наличии?
Размер шрифта в 1
em
1 | em |
Невозможность изменения размеров текста в браузере IE постоянно вызывало чувство разочарования у веб-разработчиков. Чтобы обойти эту проблему, можно использовать единицы измерения
.1
em
Впервые об этом способе написал в далеком 2004-м году Richard Rutter в своей статье How to size text using ems.
Этот способ основан на задании основного размера шрифта для
в процентах. В этом случае 1
body
равен 1
1em
, вместо 1
10px
по-умолчанию.1
16px
Теперь, чтобы установить размер шрифта для элемента страницы в единицах, эквивалентных
, нужно установить его в 1
14px
:1
1.4em
Проблема с размерами шрифта в
заключается в том, что такая система достаточно сложна при применении ее на практике. В примере, приведенном выше, размер шрифта элемента 1
em
равен не 14px, а 20px.1
li
Если добавить еще один вложенный уровень, то размер шрифта будет 27px! Происходит это вследствие наследования свойств в CSS-таблицах.
Чтобы избежать такого эффекта, нужно явно прописать для каждого дочернего элемента размер шрифта в 1em:
Проблема наследования при системе задания размеров шрифта в em достаточно неудобна. Что же можно еще предложить для решения проблемы?
Размер шрифта в 1
rem
1 | rem |
Стандарт CSS3 вводит в обиход несколько новых единиц измерения, одной из которых является
, что является сокращением от “root em”. Давайте немного разберемся, что из себя представляет эта единица измерения.1
rem
Единица измерения
является относительной к размеру шрифта элемента родителя, что приводит к эффекту наследования. Единица измерения 1
em
является относительной к основному корневому элементу, то есть к html.1
rem
Это означает, что можно установить размер шрифта только один раз, для элемента html. Для всех остальных элементов, которые являются потомками этого элемента, достаточно установить размер шрифта в процентах (
) относительно корневого элемента:1
rem
В примере, показанном выше, базовый размер шрифта установлен в процентах
, что очень похоже, как мы поступали с единицами 1
62,5%
. Другими словами, единица измерения 1
em
лишена недостатков 1
rem
с ее каскадностью и наследованием правил.1
em
Но как насчет скудной поддержки этой единицы измерения в браузерах?
Вы будете сильно удивлены, но поддержка
в браузерах достойная: Safari 5, Chrome, Firefox 3.6+ и даже Internet Explorer 9. Хорошая новость заключается в том, что в IE9 поддерживается изменение размера текста, установленного в единицах измерения 1
rem
. Увы, бедная Opera (вплоть до версии 11.10, по крайней мере), не имеет поддержки единиц измерения 1
rem
.1
rem
Как же нам поступить с браузерами, которые не поддерживают единицы измерения
? Для них мы можем выполнить откат 1
rem
в виде пикселей 1
fallback
. То есть, мы одновременно будем задавать размер шрифта в 1
px
и в 1
px
:1
rem
И пожалуйста, теперь мы имеем прочную и предсказуемую структуру во всех браузерах.
Декабрь 13 2011 - Opera 11.60 теперь поддерживает единицы измерения
.1
rem
Конец статьи и перевода. В дополнение я могу сказать, что на сайте CSS Tricks также есть интересный материал по поводу
.1
rem
В частности, на нем приведены удобные
‘ы для SASS, с помощью которых можно быстро задать размер шрифта в 1
mixin
(с 1
rem
в 1
fallback
):1
px
Пример использования этого SASS-mixin’а:
… что при компиляции в CSS будет выглядеть следующим образом:
И еще несколько разновидностей SASS-mixin’ов, которые могут пригодиться. Подмешивания используются для задания размера шрифта и интерлиньяжа (высоты строки):
А здесь представлен “полный”
, с помощью которого можно одновременно задать кегль и 1
mixin
. Удобная штучка - можно задать только размер шрифта и получить на выходе интерлиньяж и кегль в пикселях (и 1
line-height
‘ах):1
rem
P.S.
Постепенно изучаю вопрос создания тем под WordPress. Скачал версию 3.7.1, установил под локальный сервер XAMPP и открыл файл
стандартной темы “Twenty Twelve”. И в заголовке этого файла сразу же наткнулся на следующие интересные строки:1
style.css
То есть, что нам сообщают разработчики WordPress в этих строках? Что данный файл стилевых правил использует для построения дизайна сайта два значения в качестве переменных:
… в единицах измерения
с откатом 1
rem
в пиксели 1
fallback
. И далее приводятся примеры того, как применяются обе эти переменные для построения стилевых правил и как производится вычисление нужных величин, являющихся производными от этих переменных.1
px
В самом конце две ссылки по тематике
для любознательных, первой из которых является вольный перевод, который вы читаете! Значит, я на правильном пути.1
rem