1 rem в пикселях: px, em, rem и другие
1 Rem в пикселях — Вэб-шпаргалка для интернет предпринимателей!
В этом очерке я постараюсь не только рассказать о различных единицах измерения, но и построить общую картину – что и когда выбирать.
Пиксели: px
Пиксель px – это самая базовая, абсолютная и окончательная единица измерения.
Количество пикселей задаётся в настройках разрешения экрана, один px – это как раз один такой пиксель на экране. Все значения браузер в итоге пересчитает в пиксели.
Пиксели могут быть дробными, например размер можно задать в 16.5px . Это совершенно нормально, браузер сам использует дробные пиксели для внутренних вычислений. К примеру, есть элемент шириной в 100px , его нужно разделить на три части – волей-неволей появляются 33.333. px . При окончательном отображении дробные пиксели, конечно же, округляются и становятся целыми.
Для мобильных устройств, у которых много пикселей на экране, но сам экран маленький, чтобы обеспечить читаемость, браузер автоматически применяет масштабирование.
- Главное достоинство пикселя – чёткость и понятность
- Другие единицы измерения – в некотором смысле «мощнее», они являются относительными и позволяют устанавливать соотношения между различными размерами
Существуют также «производные» от пикселя единицы измерения: mm , cm , pt и pc , но они давно отправились на свалку истории.
Вот, если интересно, их значения:
- 1mm (мм) = 3.8px
- 1cm (см) = 38px
- 1pt (типографский пункт) = 4/3 px
- 1pc (типографская пика) = 16px
Так как браузер пересчитывает эти значения в пиксели, то смысла в их употреблении нет.
В реальной жизни сантиметр – это эталон длины, одна сотая метра. А пиксель может быть разным, в зависимости от экрана.
Но в формулах выше под пикселем понимается «сферический пиксель в вакууме», точка на «стандартизованном экране», характеристики которого описаны в спецификации.
Поэтому ни о каком соответствии cm реальному сантиметру здесь нет и речи. Это полностью синтетическая и производная единица измерения, которая не нужна.
Относительно шрифта: em
1em – текущий размер шрифта.
Можно брать любые пропорции от текущего шрифта: 2em , 0.5em и т.п.
Размеры в em – относительные, они определяются по текущему контексту.
Например, давайте сравним px с em на таком примере:
24 пикселей – и в Африке 24 пикселей, поэтому размер шрифта в
А вот аналогичный пример с em вместо px :
Так как значение в em высчитывается относительно текущего шрифта, то вложенная строка в 1.5 раза больше, чем первая.
Выходит, размеры, заданные в em , будут уменьшаться или увеличиваться вместе со шрифтом. С учётом того, что размер шрифта обычно определяется в родителе, и может быть изменён ровно в одном месте, это бывает очень удобно.
Что такое «размер шрифта»? Это вовсе не «размер самой большой буквы в нём», как можно было бы подумать.
Размер шрифта – это некоторая «условная единица», которая встроена в шрифт.
Она обычно чуть больше, чем расстояние от верха самой большой буквы до низа самой маленькой. То есть, предполагается, что в эту высоту помещается любая буква или их сочетание. Но при этом «хвосты» букв, таких как р , g могут заходить за это значение, то есть вылезать снизу. Поэтому обычно высоту строки делают чуть больше, чем размер шрифта.
В спецификации указаны также единицы ex и ch, которые означают размер символа «x» и размер символа «0» .
Эти размеры присутствуют в шрифте всегда, даже если по коду этих символов в шрифте находятся другие значения, а не именно буква «x» и ноль «0» . В этом случае они носят более условный характер.
Эти единицы используются чрезвычайно редко, так как «размер шрифта» em обычно вполне подходит.
Проценты %
Проценты % , как и em – относительные единицы.
Когда мы говорим «процент», то возникает вопрос – «Процент от чего?»
Как правило, процент будет от значения свойства родителя с тем же названием, но не всегда.
Это очень важная особенность процентов, про которую, увы, часто забывают.
Отличный источник информации по этой теме – стандарт, Visual formatting model details.
Вот пример с % , он выглядит в точности так же, как с em :
В примере выше процент берётся от размера шрифта родителя.
А вот примеры-исключения, в которых % берётся не так:
margin-left При установке свойства margin-left в % , процент берётся от ширины родительского блока, а вовсе не от его margin-left . line-height При установке свойства line-height в % , процент берётся от текущего
Единица rem: смесь px и em
Итак, мы рассмотрели:
- px – абсолютные, чёткие, понятные, не зависящие ни от чего.
- em – относительно размера шрифта.
- % – относительно такого же свойства родителя (а может и не родителя, а может и не такого же – см. примеры выше).
Может быть, пора уже остановиться, может этого достаточно?
Э-э, нет! Не все вещи делаются удобно.
Вернёмся к теме шрифтов. Бывают задачи, когда мы хотим сделать на странице большие кнопки «Шрифт больше» и «Шрифт меньше». При нажатии на них будет срабатывать JavaScript, который будет увеличивать или уменьшать шрифт.
Вообще-то это можно сделать без JavaScript, в браузере обычно есть горячие клавиши для масштабирования вроде Ctrl + + , но они работают слишком тупо – берут и увеличивают всю страницу, вместе с изображениями и другими элементами, которые масштабировать как раз не надо. А если надо увеличить только шрифт, потому что посетитель хочет комфортнее читать?
Какую единицу использовать для задания шрифтов? Наверно не px , ведь значения в px абсолютны, если менять, то во всех стилевых правилах. Вполне возможна ситуация, когда мы в одном правиле размер поменяли, а другое забыли.
Следующие кандидаты – em и % .
Разницы между ними здесь нет, так как при задании font-size в процентах, эти проценты берутся от font-size родителя, то есть ведут себя так же, как и em .
Вроде бы, использовать можно, однако есть проблема.
Попробуем использовать этот подход для
.
Многие люди путаются при работе с этими тремя единицами в CSS. Главной причиной этого является отсутствие понимания различий имеющихся между ними.
Для начала нужно усвоить базовое понимание этих единиц:
- Px (пиксель) – это единица измерения величины объектов относительно размера экрана.
- Em – это единица, основанная на размере шрифта родительского элемента (в пикселях).
- Rem – это единица,основанная на размере шрифта корневого элемента html (в пикселях).
Мы можем использовать эти единицы в различных свойствах CSS, таких как font-size , padding , margin , position .
Пиксели представляют собой неделимые объекты прямоугольной или круглой формы, размеры которых зависят от диагонали экрана устройства. Пиксель– это фиксированная единица, которая применяется к отдельным элементам там, где она определяется.
Эта строка кода CSS устанавливает размер шрифта в 10px и отступы размером в 10px со всех сторон.
Единицы измерения em зависят от размера шрифта родительского элемента. Это не фиксированные единицы, поскольку они зависят от базового размера. Когда изменяется размер родительского элемента, меняется и значение em .
Данный код CSS устанавливает размер шрифта в 10px, и отступы толщиной в 100px с каждой стороны, поскольку размер берётся из свойства font-size . В нем каждое значение принимается за 1em, то есть (10px = 1em, поэтому 10em = 10px * 10 = 100px).
Единица измерения rem зависит от размера шрифта, заданного в браузере по умолчанию, или размера шрифта, при именного к элементу html. Если базовый размер меняется, то значение rem также изменяется. Вы можете изменить размер шрифта, используемый по умолчанию, в настройках браузера.
Допустим, размер шрифта, используемый по умолчанию в браузере – 14px.
Этот код установит размер шрифта в 10px и отступы в 140px с каждой стороны. При этом базовым будет размер шрифта по умолчанию, заданный в браузере, который берётся за 1rem. То есть: 14px = 1rem, поэтому 10rem = 14px * 10 = 140px.
Путаница между em и rem
Вопрос, который возникает при использовании этих единиц измерения: «Какие же единицы применять?» Особенно это касается em и rem . Какие элементы установить зависимыми от базового размера,а для каких применять динамические единицы измерения?
- Задача: задать размер элемента относительно размера шрифта, используемого по умолчанию на сайте, там, где не нужно менять размеры. В этом случае “rem” предпочтительнее.
- Чтобы использовать динамические единицы измерения там, где при уменьшении размера шрифта уменьшаются отступы или поля, применяйте “em”.
Вложенные элементы
Для вложенных элементов используется только одна единица измерения – em . Если размеры шрифта или отступов дочернего элемента должны быть наполовину меньше, чем у родительского, тогда используйте em .
Этот код установит размер шрифта родительского элемента в 10px, а шрифт дочернего элемента в 5px.Так как его размер зависит от значения font-size родительского элемента, которое принимается за 1em. То есть:10px = 1em, поэтому 0.5em = 10px / 2 = 5px.
Комбинированный пример
Предположим, что размер шрифта, используемый по умолчанию в браузере,составляет 14px. Как это отразится на всех трёх единицах измерения?
- Размер шрифта = 10px.
- Внутренние поля с каждой стороны (10px = 1em, поэтому 10em * 10px) = 100px.
- Отступы с каждой стороны (14px = 1rem, поэтому 10rem * 14px) = 140px.
- Размер шрифта (0.5em = 10px / 2) = 5px.
- Внутренние поля с каждой стороны (5px = 1em, поэтому 10em * 5px) = 50px.
- Отступы с каждой стороны (14px = 1rem, поэтому 10rem * 14px) = 140px.
Ключевым для стилей дочернего элемента является свойство font-size, поскольку оно наследуетсяот родительского элемента.Для него размер шрифта задан в 10px, а в дочернем элементе он установлен в 0.5em. То есть, делится на два (как размер шрифта дочернего элемента).
Поля зависят от размера шрифта текущего элемента. За 1em принимается размер в 5px, (размер шрифта дочернего элемента).
Только отступы постоянны в обоих случаях. Они напрямую наследуются от корневого элемента html. Базовый размер шрифта в 14px неизменен, поэтому поля будут иметь размер 140px в обоих случаях.
Заключение
Чтобы преодолеть эту путаницу в единицах измерения, нужно знать, какие элементы зависят от настроек браузера, а какие основаны на размере экрана пользовательского устройства.
Данная публикация представляет собой перевод статьи « Use of px, em, rem units in css, which one I have to use and when? » , подготовленной дружной командой проекта Интернет-технологии.ру
Дата публикации: 2017-01-30
От автора: споры ведутся уже давно – какие единицы измерения использовать в CSS? Мы, как и многие другие, сначала перешли на REM и потом вернулись к любимым пикселям. Мы просто потеряли тот след, почему мы перешли на REM единицы. Проблема связана не только с размером шрифта, но и с доступностью.
пиксели – это каменный век, не используйте их;
используйте REM для размеров шрифтов и отступов;
используйте EM для медиа запросов.
Практический курс по верстке адаптивного сайта с нуля!
Изучите курс и узнайте, как верстать современные сайты на HTML5 и CSS3
Пиксели
За все эти годы мы привыкли к пикселям (px). Все знают, что такое пиксель (хотя размер пикселя не всегда одинаковый, но это тема другой статьи). Всем удобно работать с пикселями, их легко переводить. Дизайнеры работают в пикселях, очень удобно брать размеры прямо из Photoshop и переносить их в верстку.
Так что же не так с пикселями?
Доступность
Я большой сторонник доступности в интернете.
Если вы указываете все шрифты, элементы и отступы в пикселях, вы не уважаете конечного пользователя.
В большинстве браузеров пользователь может сменить размер шрифта по умолчанию (обычно это 16px). Если пользователь указал размер шрифта по умолчанию 20px, все шрифты должны увеличиться пропорционально.
Однако если на сайте четко прописан размер шрифта в пикселях, то заголовок размером 30px всегда будет 30px. От дизайнера/разработчика это может звучать круто, но вы не обычный пользователь. Хватит делать сайты для себя.
Если задать размер шрифта в пикселях, это не убьет всю доступность. Пользователь может изменять масштаб с помощью CTRL+/- (на OSX вместо CTRL клавиша CMD). Но можно ведь сделать все лучше.
Единицы измерения REM
Если вы хоть как-то знакомы с миром веб-дизайна, вы точно слышали про единицы измерения REM. Если все же не знаете, REM – это способ указать размер шрифта на основе размера шрифта корневого HTML элемента. С их помощью также можно быстро изменить размеры во всем проекте, поменяв размер шрифта корневого элемента (например, под определенный медиа запрос/размер экрана).
«REM единицы представляют собой размер шрифта корневого элемента (например, размер шрифта тега ). Если использовать эти единицы измерения для указания размера шрифта корневого элемента, вы получите изначальное значение.»
Как перевести REM в PX
Стандартный пример: размер шрифта html задан в 10px, параграф задан в 1,6rem. 1,6rem*10px = 16px.
Самый распространенный сценарий, который я видел, это установка корневого размера шрифта в 10px с помощью REM. Это позволяет легко и быстро переводить одни значения в другие, просто поделив на 10.
Тем не менее, если задать базовый размер шрифта в пикселях, мы получим ту же проблему, что и в примере выше. Доступность.
У REM единиц есть свои способы применения, однако я готов поспорить, что большинство людей используют REM только потому, что они круче пикселей. Я почти не видел реальных проектов, где специально бы изменяли корневой размер шрифта под определенный размер экрана, и это нормально. Если ваш сайт не нагружен множеством шрифтов, вы вряд ли захотите масштабировать все и сразу.
Так как же нам не ломать доступность?
Задайте размер шрифта корневого HTML элемента в процентах. Проценты будут связаны с размером шрифта в браузере по умолчанию. Обычно ставят размер шрифта на 62,5%. 62,5% от 16px (стандартный размер шрифта по умолчанию) составляют 10px. То есть 1,6rem = 16px. Если пользователь поменяет размер шрифта по умолчанию, например, на 20px, то 1,6rem будут равны 20px. Если пользователь хочет шрифты еще больше, пусть ставит. Счастливый дизайнер, счастливый разработчик. Со всеми числами легко работать.
Идеальный вариант – оставить размер шрифта HTML на 100%, но тогда вычисления станут немного сложнее. Например, 16px будут равны 1rem, а 20px станут 1,25rem, 24px превратятся в 1,5rem и т.д.
Sass/SCSS в помощь
Вычислять все эти числа в голове довольно затруднительно и долго. К счастью, вам не следует беспокоиться, если вы используете один из CSS препроцессоров Sass/SCSS, LESS. Все цифры можно вычислять с помощью функций.
А что по поводу EM единиц измерения?
EM единицы работают почти так же, как REM, пока дело не касается вложенности. Мне никогда не нравились EM, особенно когда нужно задавать размер шрифта. Например, возьмем div с размером шрифта 2em, добавим параграф со шрифтом 2em. Размер параграфа теперь 2em относительно div. Я быстро сбиваюсь в вычислениях, где какой размер. Код быстро становится неудобным. Именно эту проблему решает REM – размер всегда привязывается к корневому элементу.
Что по поводу медиа запросов?
Итак, мы установили, что значения в пикселях переписывают значения браузера по умолчанию, поэтому лучший выход – перевести все пиксели в REM, верно? Не совсем.
В этой статье описываются ключевые различия в использовании пикселей, EM и REM в медиа запросах (https://zellwk.com/blog/media-query-units/). Прочитайте ее и возвращайтесь.
В итоге, и пиксели и REM в медиа запросах проигрывают, когда необходимо изменить масштаб в некоторых браузерах. EM в таких случаях становится наилучшим вариантом. REM здесь проигрывают намного больше, чем пиксели, поэтому мы не будем их рассматривать.
Все становится немного сложнее. У EM и пикселей есть свои минусы с медиа запросами, когда дело касается различий значений с плавающей точкой. Если вы используете min и max медиа запросы в одном блоке кода, то вам придется попотеть, когда пользователь начнет менять масштаб браузера или размер шрифта по умолчанию.
Пара примеров:
Мы используем шесть цифр после точки, так как отдельные браузеры не видят разницы межу 2-5 цифрами после точки.
Пример 1: масштаб в браузере установлен в 100%, ширина окна 640px
Практический курс по верстке адаптивного сайта с нуля!
Изучите курс и узнайте, как верстать современные сайты на HTML5 и CSS3
Рекомендуем к прочтению
Использование rem, em и px в измерениях изображения
Я ищу какое-то объяснение относительно использования этих единиц измерения в измерениях изображения, но не могу его найти. Я читал в некоторых местах, чтобы забыть о пикселях и использовать только rem/em,, но я не знаю, применяется ли это также для изображений размеров (width/height).
Например, какой из них я должен использовать в этом случае ниже?
<img src="https://i.imgur.com/NReN4xE.png" />5rem<br>
<img src="https://i.imgur.com/NReN4xE.png" />5em<br>
<img src="https://i.imgur.com/NReN4xE.png" />100px<br>
html
css Поделиться Источник Luiz 24 мая 2019 в 20:20
4 ответа
- REM / Em Путаница
Сегодня я поиграл с использованием em’s/rem’s на новом сайте, и у меня есть несколько вещей, которые я хотел бы обсудить/спросить Здесь. В течение многих лет я был полностью пиксельным человеком с несколькими процентами, добавленными при необходимости. Я все время читаю, что ЭМ и Рем-это the way,…
- Почему Bootstrap 4 выбирает rem и em вместо px?
Я хотел бы знать, почему Boostrap выбирает rem и em вместо px для новой версии Boostrap 4 . Мы можем посмотреть здесь Некоторые примеры переменных: $font-size-h2: 2.5rem !default; $font-size-h3: 2rem !default; $font-size-h4: 1.75rem !default; $mark-padding: .2em !default; Это хорошая практика…
2
Многие свойства CSS принимают значения «length», такие как ширина, поле, отступ, размер шрифта и т. д. Длина-это число, за которым следует единица длины, например 10px, 2em и т. д.
** (px)
**The абсолютные единицы длины фиксированы, и длина, выраженная в любой из них, будет выглядеть именно как этот размер.
Единицы абсолютной длины не рекомендуется использовать на экране, так как размеры экрана сильно различаются. Однако их можно использовать, если известен выходной носитель, например, для макета печати.
Relative length
единицы измерения задают длину относительно другого свойства длины. Относительные единицы длины лучше масштабируются между различными средами рендеринга. em
относительно размера шрифта элемента rem
относительно размера шрифта корневого элемента
Используйте REMs для размеров и интервалов. Используйте EMs для media запросов.
Таким образом, как пиксели , так и REMs для media запросов терпят неудачу в различных браузерах при использовании масштабирования браузера, и EMs
-лучший вариант, который у нас есть.
Поделиться sabeen kanwal 24 мая 2019 в 20:34
1
px
отображает значение пикселяrem
использует корневой элемент (html
), используя егоfont-size
в качестве базы (16px по умолчанию), чтобы вычислить его размер, так что в основном ваше значениеrem
изimg
умножается наfont-size
наhtml
em
использует первый родитель сfont-size
для вычисления размера, который он должен визуализировать (вычисляется так же , какrem
выше — родитель вычисляет значениеpx
, умноженное на вашem
)., если этот родитель используетem
в своемfont-size
, ребенок будет использовать вычисленный/вычисленныйfont-size
родителя.
Объяснение может быть трудным для понимания (особенно em
), посмотрите здесь: https://jsfiddle.net/6ydf931w/
По большей части я стараюсь избегать использования em
почти для всего, потому что это может привести к неожиданным результатам, если вы постоянно не знаете, где он используется.
Обычно я ограничиваю rem
текстом в том случае, если он должен быть изменен глобально.
px
очень предсказуемо, если это работает для вас, нет никакого вреда в его использовании.
Поделиться NickZA 24 мая 2019 в 20:47
1
Лучше использовать rem вместо пикселей, если вы хотите адаптивный веб-сайт. Это связано с тем, что пиксель-это абсолютная единица измерения, а rem-единица измерения относительно размера шрифта вашего корня.
Представьте, что у вас есть все ваши элементы в пикселях и вы хотите масштабировать все, когда ваше окно меньше. Если бы у вас были пиксели, вам пришлось бы менять все одно за другим. Однако с помощью rem вы можете изменить размер шрифта вашего корня, и все масштабируется сразу.
Попробуйте изменить размер шрифта в приведенном ниже примере и убедитесь в этом сами:
html{
font-size: 30px;
}
.pixel1{
width: 30px;
height: 30px;
background-color: red;
margin-bottom: 10px;
}
.pixel2{
width: 40px;
height: 40px;
background-color: red;
margin-bottom: 10px;
}
.rem1{
width: 1rem;
height: 1rem;
background-color: blue;
margin-bottom: 10px;
}
.rem2{
width: 1.4rem;
height: 1.4rem;
background-color: blue;
}
<div></div>
<div></div>
<div></div>
<div></div>
Поделиться Vasilis Georgoudis 24 мая 2019 в 20:52
- Зачем использовать rem вместо px, если это все равно одно и то же?
Хорошо, во-первых, да, я прочитал много-много статей ( Должен ли я использовать единицы измерения px или rem в моем CSS? ) и форумов об этом. Я знаю, что 1px — это не физический пиксель , а скорее пиксель CSS, и rem в основном совпадает с em , но он относится к корневому элементу (следовательно, r…
- Следует ли использовать em/rem или px при расширении фундамента?
Я создаю новое веб-приложение с foundation 5.x и заметил, что все, похоже, основано на rem. Раньше я изменял отступы/поля с помощью px,но мне кажется, что создание темы с фундаментом может быть проще при использовании последовательного rem-измерения. Может ли кто-нибудь подтвердить (по опыту), что…
1
И em , и rem -это гибкие, масштабируемые единицы измерения, которые переводятся браузером в пиксельные значения в зависимости от настроек размера шрифта в вашем дизайне. Если вы используете значение 1em or 1rem,
, оно может быть переведено в браузере как что-либо из 16px to 160px
или любого другого значения.
значения px используются браузером как есть, поэтому 1px
всегда будет отображаться точно как 1px
.
Перевод единиц rem в значение пикселя определяется размером шрифта элемента html.
Перевод единиц измерения em в значения пикселей определяется размером шрифта элемента, на котором они используются. Используйте em units
для размера, который должен масштабироваться в зависимости от размера шрифта элемента, отличного от root.Use rem
единиц, для размера, который не нуждается в em
единицах, и который должен масштабироваться в зависимости от размера шрифта браузера settings.Use rem единиц на media queries
Поделиться Mubeen Khan 24 мая 2019 в 21:20
Похожие вопросы:
Должен ли я использовать единицы измерения px или rem в моем CSS?
Я разрабатываю новый веб-сайт и хочу, чтобы он был совместим с как можно большим количеством браузеров и настроек браузера. Я пытаюсь решить, какую единицу измерения я должен использовать для…
Как преобразовать em/rem в px?
У меня есть следующий скрипт, который преобразует px в em: perl -p -i -e ‘s/(\d+)px/($1\/16).em/ge’ stylesheet.css Однако, когда я настраиваю его, чтобы преобразовать em в px, он не работает хорошо:…
rem, px, mediaqueries для браузеров >=IE9
У меня есть проект, где IE9 -это браузер с минимальной совместимостью. Это означает, что я могу использовать rem -блок. По моему опыту работы с большими проектами, в которых участвует много…
REM / Em Путаница
Сегодня я поиграл с использованием em’s/rem’s на новом сайте, и у меня есть несколько вещей, которые я хотел бы обсудить/спросить Здесь. В течение многих лет я был полностью пиксельным человеком с…
Почему Bootstrap 4 выбирает rem и em вместо px?
Я хотел бы знать, почему Boostrap выбирает rem и em вместо px для новой версии Boostrap 4 . Мы можем посмотреть здесь Некоторые примеры переменных: $font-size-h2: 2.5rem !default; $font-size-h3:…
Зачем использовать rem вместо px, если это все равно одно и то же?
Хорошо, во-первых, да, я прочитал много-много статей ( Должен ли я использовать единицы измерения px или rem в моем CSS? ) и форумов об этом. Я знаю, что 1px — это не физический пиксель , а скорее…
Следует ли использовать em/rem или px при расширении фундамента?
Я создаю новое веб-приложение с foundation 5.x и заметил, что все, похоже, основано на rem. Раньше я изменял отступы/поля с помощью px,но мне кажется, что создание темы с фундаментом может быть…
Тест скорости между единицами измерения размера: rem, em и px
Есть ли какие-либо доказательства того, что конкретная единица калибровки занимает больше времени для обработки? Например, если бы вы использовали rem для определения размера всего вашего сайта,…
Преобразуются ли rem и em в px браузером во время рендеринга?
Когда мы используем em/rem, разве мы не даем браузеру дополнительную работу с точки зрения изменения значений em/rem на px во время рендеринга, что может быть не очень хорошей практикой, поскольку…
Когда выбрать REM вместо PX?
Когда я должен использовать rem поверх px? Я вижу много статей, в которых говорится, что я должен использовать REM, чтобы уважать предпочтения пользователя, но примеры всегда говорят о размере…
Адаптивные размеры шрифтов при помощи rem
С самого зарождения интернета люди начали дискутировать на тему того, как лучше всего определять шрифты. Кроме традиционных кандидатов вроде px, em и %, есть еще единица измерения rem, которая представляет собой довольно новую альтернативу, совмещающую в себе лучшие свойства своих предшественников.
Прошлые стандарты: размер шрифта при помощи em или %Примерно до 2008 года считалось, что необходимо использовать гибкие размеры шрифтов. И для достижения этой гибкости, использовались единицы изменения em или %, которые являются относительными значениями к стандарту браузера, которым зачастую являлся размер равный 16 пикселям.
Такой подход устраивал многих пользователей, так как большинство браузеров на то время не имели возможность масштабировать страницы, а IE6 и вовсе не умел масштабировать шрифты, указанные в px. По крайней мере, если при этом не трогали системные настройки.
Проблема заключалась в том, что при указании размеров в em или %, они должны были быть относительными чему-либо. Процентный показатель относителен по своей сути, и зачастую он был относителен размерам своего родительского элемента. Единица изменения em не сильно отличалась:
* в параметре модели блока margin-bottom em относится к размеру шрифта самого элемента. Изменения в размере шрифта вели к изменениям в поле (margin), что могло привести к абсолютно нежелательному эффекту.
* с другой стороны, определение размера шрифта при помощи em всегда было относительно размеру шрифта его родительского элемента. Применение размера 0.875em вело к всё большему уменьшению с каждым вложенным элементом. Чем больше вложенных элементов у вас было, тем меньше становился шрифт.
Нам это напомнило историю про Алису в стране чудес. То все было большим, то все было маленьким, невозможно было подобрать идеальный вариант.
Временная эмансипация PXВ феврале 2009 года немецкий разработчик Jens Grochtdreis опубликовал статью под названием «Die leidige Sache mit der Schriftskalierung», которую можно было назвать «Раздражающие факты о масштабировании шрифтов», если бы ее публиковали на русском языке. Grochtdreis рекомендовал читателям использовать Px. На тот момент современные браузеры уже умели масштабировать страницы, а необходимости брать в учет IE6 уже не было.
Годом позже, немецкий разработчик Gerrit van Aaken поддержал Grochtdreis в своей статье «Warum ich Pixel fur CSS-Schriftgrade verwende» или «Почему мы используем PX для указания размеров шрифта в CSS». Не менее интересным, чем сама статья, было начавшееся обсуждение в комментариях. И в этом обсуждении, в комментарии под номером 22, человек упомянул о единице изменения REM, о которой тогда практически никто не знал.
Спустя некоторое время, в 2011 году термин rem начал набирать обороты, медленно, но уверенно. И это не удивительно, так как rem совмещает в себе плюс и px и em. Он не менее гибок, чем его предшественники, но имеет и исправления недостатков с точки зрения наследования, так как rem всегда относится к корневому элементу – к ‘html’, а не к ‘body’.
Чтобы получить значение rem, мы делим предпочитаемый размер в пикселях на базовое значение равное 16. Вот так будет выглядеть корректное указание размера шрифта в CSS:
html { font-size: 100%; } /* Браузерное умолчание, т.е. 16px */
h2 { font-size: 1.75rem; } /* 28/16 = 1.75 */
h3 { font-size: 1.375rem; } /* 22/16 = 1.375 */
p { font-size: 0.875rem; } /* 14/16 = 0.875 */
Таким образом, мы можем быстро создавать каскадные таблицы с размерами шрифтов. Если случится ситуация, когда вам надо сделать, чтобы шрифты были больше или меньше, вам нужно будет просто изменить базовое значение. Соотношение между текстами абзацев и заголовков будет всегда сохраняться.
Откат для старых браузеров: PXЕсли вам кажется, что все звучит слишком хорошо чтобы быть правдой, то вы правы. Всегда есть какие-то минусы, и в данном случае это старые браузеры. Сервис http://caniuse.com/rem покажет вам, чего следует ожидать. И если честно, можно ожидать довольно многого:
Недостатки данного метода связаны, как обычно, с названиями браузеров, и на этот раз дело касается IE версиями моложе 9, а также Opera Mini. Именно эти друзья делают необходимым реализовать запасной вариант в PX. Учитывая вышеприведенный пример, все должно выглядеть следующим образом:
html { font-size: 100%; }
h2 {
font-size: 28px;
font-size: 1.75rem;
}
h3 {
font-size: 22px;
font-size: 1.375rem;
}
p {
font-size: 14px;
font-size: 0.875rem;
}
Современные браузеры будут считывать и переписывать px-значение теми, что указаны в rem, а старые браузеры будут придерживаться инструкции в px, и игнорировать вторую строку. Примерно таким мы и видели этот процесс…
px, em или rem? — WebBeaver.ru
Когда я создавал библиотеку mappy-breakpoints, чуть больше года назад, я использовал rem-ы. Затем, после разговора с Sam Richard, я переключился на em, потому что узнал, что особой разницы между ними нет. Нахрена переключился тогда?
Кроме em и rem, популярным методом является указание медиа-запросов в старых добрых пикселях. Я задался вопросом, можно ли использовать пиксели в медиа-запросах пока разработчики браузеров не решили проблему с масштабированием.
И на этой неделе я решил поставить точку в этом вопросе.
Чтение этой статьи подразумевает то, что вы знакомы с em и rem. Если нет — валите на хрен вам сначала сюда.
Основной эксперимент
Я создал три div-а, один для пикселей, один для em-ов и один для rem-ов и окрасил их в разные цвета, чтобы легко различать их.
.pixel { background: red; }
.em { background: green; }
.rem { background: blue; }
Затем создал медиа-запрос с min-width для всех трёх блоков, использовав соответствующие единицы. И, чтобы сразу увидеть разницу, сделал их полупрозрачными. Вот как выглядит код для пикселей:
.pixel {
background: red;
@media (min-width: 400px) {
opacity: 0.5
}
}
Следующий шаг — выяснить, как это сделать для em и rem.
В этом эксперименте я хотел выяснить, будет ли разница, если условия идеальны. Другими словами, ничего из следующего списка не произошло:
- Font-size для html изменён.
- Пользователь масштабировал страницу/
- Пользователь изменил размер шрифта браузера.
Так как условия идеальны, я смело могу заявить, что 16px == 1em == 1rem. Значит 400px == 25em == 25rem.
.pixel {
background: red;
@media (min-width: 400px) {
opacity: 0.5
}
}
.em {
background: green;
// 400 ÷ 16 = 25
@media (min-width: 25em) {
opacity: 0.5
}
}
.rem {
background: blue;
// 400 ÷ 16 = 25
@media (min-width: 25rem) {
opacity: 0.5
}
}
Если все медиа-запросы верны, мы должны увидеть, как они подействуют на 400px.
Так оно и есть (проверял на всех браузерах).
Так как всё работает правильно, то мы можем быть уверены, что на данном этапе нет разницы между пикселями, em и rem.
После того, как всё прошло удачно, попробуем провести эксперимент в не совсем идеальных условиях. Итак, ещё раз перечислим сценарии:
- Font-size для html изменён.
- Пользователь масштабировал страницу/
- Пользователь изменил размер шрифта браузера.
Давайте рассмотрим их по-одному.
1. Размер шрифта html изменён
Первый сценарий — обычное дело.Ведь почти все сайты меняют размер шрифта в CSS:
html {
// изменение размера шрифта по-умолчанию
font-size: 200%
}
Итак, я изменил размер шрифта на 200%, а это значит, что 1em и 1rem теперь равен 32px. А если это изменение влияет на em и rem, значит медиа-запросы должны срабатывать на 800px.
Это правильное поведение. Em и rem не должны зависеть от изменений размера шрифта html, потому что они основаны на внутреннем размере шрифта браузера.
К сожалению, в Safari что-то пошло не так. Rem-запрос включается только на 800px.
Так как это происходило только в Safari, мне стало интересно: происходит ли тоже самое на мобильной версии браузера. Оказывается, да.
Что ж, первый сценарий показал, что мы не должны использовать rem. Тем не менее, давайте и дальше использовать rem, чтобы посмотреть на результаты в других экспериментах.
2. Пользователь масштабировал страницу
Следующий сценарий тоже довольно распространён. Если текст на сайте маленький, пользователь может увеличить его, используя zoom браузера.
Примечание: изначально идея указания размера в em была придумана из-за того, что старые браузеры не могли обновить значение в пикселях, когда пользователь масштабировал страницу. Поэтому, узнав разницу в поведении медиа-запросов с разными единицами, мы узнаем, можно ли указывать их значение в пикселях.
Результаты экспериментов в Chrome, Firefox и IE показал такие же результаты. Медиа-запросы в пикселях срабатывают в то же время, что и запросы в em и rem.
И, как вы уже догадались, Safari не может в zoom.
К сожалению, это значит, что мы не можем использовать пиксели в медиа-запросах. Safari не поддерживает их должным образом (или вы решили забить на Safari?).
Переходим к последнему эксперименту, может там что-то интересное произойдёт?
3. Пользователь изменил размер шрифта браузера по-умолчанию
Многие разработчики надеются, что пользователь ничего не менял, потому что хрен поймешь, где там что меняется.
Это было бы круто, ведь нам не нужно было бы проделывать третий эксперимент!
К сожалению, мы не можем гарантировать этого и наш долг, как разработчиков, сделать, чтобы всё было нормально.
В этом эксперименте я увеличил размер шрифта браузера по-умолчанию. Если хотите сделать тоже самое — вот путь настроек:
- Chrome: настройки > показать дополнительные настройки > вид страницы.
- Firefox: настройки > содержимое > шрифты и цвета.
- IE: страница > размер шрифта. В IE11 что-то не нашёл такого.
Единственный браузер, в котором я не нашёл данную функцию, оказался ВНЕЗАПНО Safari. Я только сделал, чтобы наименьший размер шрифта был больше 16px (настройки > дополнительные настройки > доступность (?)).
Это оказался единственным экспериментов, где результаты у всех браузеров были одинаковыми.
Как вы видите, медиа-запросы в пикселях срабатывают раньше, чем в em и rem.
Это не баг. Всё правильно, ведь пиксели — абсолютные единицы. Медиа-запрос срабатывает на 400px и не важно, что пользователь изменил размер шрифта по-умолчанию.
А вот em и rem основаны на размере шрифта браузера. Следовательно, они меняются, когда пользователь меняет размер шрифта браузера.
Что ж… Жаль, что приходится вас расстраивать, любители пикселей, но пиксель не подходит для задания медиа-запросов.
Завершающий эксперимент
Как вы увидели в экспериментах выше, только em нормально работает во всех браузерах. Нет никакой разницы между em и rem, не считая бага в Safari.
Пиксели показали хорошие результаты в двух из трёх экспериментов (опять же, за исключением Safari). К сожалению, третий эксперимент они провалили, а это значит, что вы не можете их использовать, если хотите чтобы у пользователей, изменивших стандартный размер шрифта в браузере, всё отображалось нормально.
Таким образом, мой совет — используйте em-ы в медиазапросах.
Если вы используете какую-либо библиотеку, медиа-запросы которой основаны не на em-ах — скиньте разработчику ссылку на эту статью, чтобы он знал о последствиях. Или не стесняйтесь и переходите на em-основанные библиотеки вроде Mappy-breakpoints, Breakpoint-sass или sass-mq.
Почему не стоит использовать только px в css
Дебатов было много, так какие единицы измерения нужно использовать в CSS?
Много разработчиков были готовы закопать REM и вернуться к любимым пикселям. Мы забыли, почему приняли решение использовать REM в первую очередь. Проблема не только вращаются вокруг размера шрифта — это еще и доступность.
- Пиксели игнорируем и не используем.
- Используйте REM для размеров и расстояния.
- Используйте EM для медиа запросов.
Пиксели
Пиксели (px) это то, к чему мы все привыкли за эти годы. Каждый знает, что такое пиксель (хотя размер пикселя не всегда то же самое). Все удобно с помощью пикселей. Они легко переводимы. Дизайнеры, как правило, работают в пикселях, так легко взять размеры напрямую из Photoshop прямо в проект.
Так что с пикселями?
Доступность
Я большой сторонник доступности в вебе. Я бы взял доступность над «довольно» в любой день.
Если вы устанавливаете все ваши размеры шрифта, размеров элементов и пространство в пикселях, вы не воспринимаете конечному пользователю с уважением.
В большинстве браузеров, пользователь может установить по умолчанию свой размер шрифта, чтобы быть разного размера по умолчанию (обычно 16px). Если пользователь устанавливает их по умолчанию в 20px, все размеры шрифта должны масштабировать соответственно.
Тем не менее, если сайт явно устанавливает размеры шрифта в пикселях, заголовок устанавливается в 30px всегда будет 30px. Это может звучать отлично от дизайнера или разработчика — но вы не пользователи, прекратите делать сайты для себя.
К счастью, установка размера шрифта в пикселях полностью не разрушит доступности. Пользователь может увеличивать и уменьшать масштаб с помощью Ctrl и +/- . Однако, мы можем сделать лучше.
REM
Если вы каким-либо образом знакомы с миром веб-дизайна, вы несомненно слышали о REM. Если нет, REM являются одним из способов установки размера шрифта на основе размера шрифта корневого элемента HTML. Кроме того, они позволяют быстро масштабировать проект целиком за счет изменения размера корневого шрифта (например, при медиа запросах / размере экрана).
REM показывает размер шрифта корневого элемента (например, размер шрифта для элементов тега
<html>
). При использовании на размер шрифта на этой корневой элемент, он представляет свое первоначальное значение.
Как рассчитать PX от REM
Основной и наиболее распространенный пример: HTML размер шрифта установлен в 10px, параграф установлен в 1.6rem — 1.6rem * 10px = 16px.
Установка корневого шрифта размер 10px является наиболее распространенным сценарием, для людей использующих REM. Это позволяет быстро выполнить преобразование между значениями пикселей до значений REM просто путем деления числа на 10.
Тем не менее, установка базового размера шрифта в пикселях по-прежнему имеет те же проблемы, что и пример пикселей выше. Доступность переопределяется.
В то время как в использовании REM есть своя польза, я готов поспорить, что большинство людей используют REM, так как они круче, чем пиксели. Я редко вижу проект, в котором кто-то на самом деле изменяет корневой HTML размер шрифта в зависимости от размера экрана, и это справедливо. Если вы не получили очень типографски тяжелый дизайн, вы вряд ли хотите масштабировать все сразу.
Так как же мы можем не ломать наши доступности?
Установите корневой HTML размер шрифта в процентах. Это процент браузера по умолчанию размера шрифта пользователя. Типичный способ установить HTML размер шрифта до 62,5%. Это потому, что 62,5% 16px (по умолчанию размер шрифта) является 10px. Что бы еще сделать 1.6rem = 16px. Это теперь означает, что если размер шрифта в браузере пользователя по умолчанию меняется на, например, 20 пикселей, 1.6rem будет теперь равна 20px. Так что если пользователь хочет больше шрифтов, пусть. Счастливый дизайнер. Счастливый Разработчик. Все цифры по-прежнему легко работают.
Идеальный сценарий должен был бы оставить HTML размер шрифта как 100%, но это делает математику немного сложнее. Например, 16px теперь 1rem, 20px является 1.25rem, 24px является 1.5rem и т.д.
Спасение с помощью Sass/SCSS
Работать над всеми этими цифры в вашей голове будет уходить довольно много времени. К счастью, если вы используете Sass/SCSS, Less, или любой другой CSS препроцессор, вы не должны беспокоиться. Вы можете использовать функции для расчета этих вещей.
Что насчет EM?
EM первоначально выполняется аналогичным образом как REM, пока он не доходит к вложенности. Например, возьмите DIV с размером шрифта 2em, а затем добавить параграф с размером шрифта 2em. Размер шрифта этого параграфа теперь 2em относительно DIV. Можно быстро потерять след математических расчетов и какой размер есть что, и он быстро становится неуправляемым. Это то, что REM решает — размер всегда относится к корню.
Что насчет медиа-запросы?
Итак, мы установили, что, используя пиксельные значения переопределяются настройки браузера по умолчанию, так что просто конвертировании всех размеров пикселя в REM это лучшее решение, верно? Не совсем.
В этом блоге освещаются некоторые из ключевых различий между использованием пикселей, EM и REM в медиа-запросах https://zellwk.com/blog/media-query-units/.
Таким образом, px и rem для медиа запросов терпят неудачу в различных браузерах при использовании масштабирования браузера и EM являются лучшим вариантом который мы имеем. REM не намного больше, чем пикселей на данный момент, так что мы будем их полностью сбрасывать со счетов.
Это действительно становится немного сложнее. Как EM и пиксели имеют свои недостатки, с медиа-запросами, когда дело доходит до разницы десятичной точки этой группы. Если вы будете использовать оба минимальную и максимальную ширину носителя в одном блоке кода, вы собираетесь пережить тяжелое время, как только пользователь начнет менять в своем браузере размер шрифта по умолчанию.
Вот некоторые примеры:
Мы используем 6 знаков после запятой, поскольку некоторые браузеры не показывают никакой разницы между 2-5.d.p.
Пример 1: в браузере установлен режим масштабирования 100%, ширина браузера устанавливается на 640pх
min-width: 64em = Hit
max-width: 63.99em = Miss
max-width: 63.999999em = Hit
min-width: 640px = Hit
max-width: 639px = Miss
max-width: 639.999999px = Miss
Пример 1б: в браузере установлен режим масштабирования 100%, ширина браузера устанавливается на 639pх
min-width: 64em = Miss
max-width: 63.99em = Hit
max-width: 63.999999em = Hit
min-width: 640px = Miss
max-width: 639px = Hit
max-width: 639.999999px = Hit
Поэтому мы не можем использовать 6dp для EM, так как она попадает как медиа-запросы.
Пример 2: в браузере установлен режим масштабирования 110%, ширина браузера устанавливается на 704pх (потому что 640px * 110% = 704px)
min-width: 64em = Miss
max-width: 63.99em = Miss
max-width: 63.999999em = Hit
min-width: 640px = Miss
max-width: 639px = Miss
max-width: 639.999999px = Hit
Пример 2б: в браузере установлен режим масштабирования 110%, ширина браузера устанавливается на 705pх
min-width: 64em = Hit
max-width: 63.99em = Miss
max-width: 63.999999em = Miss
min-width: 640px = Hit
max-width: 639px = Miss
max-width: 639.999999px = Miss
Таким образом, мы не можем использовать 2dp для EM. Так что все мы остались на этом этапе является 6dp пикселей. Это работает с зумом браузера. Однако…
Пример 3: в браузере установлен режим масштабирования 100%, размер шрифта браузера 20px, ширина браузера устанавливается на 800pх (потому что 640 * 125% = 800)
min-width: 64em = Hit
max-width: 63.99em = Miss
max-width: 63.999999em = Hit
Так опять же, 6dp EM все еще вне. И мы не можем использовать пиксели длямедиа запросов, потому что они по-прежнему попадают в 640px/639px, потому что они игнорируют EM/REM.
Каково же решение?
К сожалению, нет ответа. Пока браузеры не разберутся с вопросами округления, мы немного застряли.
Самый простой приемлемый вариант, это то, что бы мы никогда не создадим min-width и max-width перекрытия в одном блоке. Пример:
body {
@media screen and (max-width: 63.99em) {
background: blue;
}
@media screen and (min-width: 64em) {
background: blue;
}
}
Проблема выше в том, что есть определенные сценарии, где оба медиа-запросов не попадают, или оба игнорируются. Поэтому безопасная ставка будет писаться что-то вроде:
body {
background: blue;
@media screen and (min-width: 64em) {
background: blue;
}
}
Почему нет реального решения? Я не верю, мало кого волнует. Любая статистика говорит, что люди не меняют в своем браузере по умолчанию размер шрифта, безусловно, перекос. Опции в Chrome, чтобы изменить размер шрифта по умолчанию теперь очень хорошо спрятана в дополнительных опциях браузера.
Подводные камни
Есть некоторые подводные камни этого подхода:
- Если вы привыкли писать как min-width и max-width медиа запросов в том же блоке кода, это займет больше времени.
- Увеличивается сложность, как вам придется переопределить CSS одну или другую сторону, а не сообщая браузеру использовать опцию A или B.
- Увеличивается размер файла из-за этих переопределений. Не намного, но это стоит рассматривать.
В зависимости от проекта, кто его разработчики, а также различные другие факторы, такие как бюджеты проектов (мы должны быть здесь реалистами), использование пикселей может быть проще и быстрее. Также может быть проще и быстрее игнорировать доступность.
Помните, для кого вы создаете веб-сайты.
Размеры шрифтов CSS. Пиксели vs Em vs Rem vs Проценты vs Viewport единицы
В этой статье вы узнаете про выставление размера шрифта в пикселях, em, rem, процентах и viewport единицах.
Эта статья перевод — CSS Font Sizing: Pixels vs Em vs Rem vs Percent vs Viewport Units
Очень много обсуждений велось по поводу пикселей, em
, процентов, rem
и какое свойство шрифтов когда использовать. Не смотря на более сотни статей в сети, эта тема может быть довольно запутанной, учитывая то, как использование этих свойств шрифтов разнится в зависимости от нужд наших проектов. Для примера, некоторые советуют не использовать фиксированные пиксели на базовом уровне (html и body элементы), так как пользователь не будет иметь возможности сбросить размер шрифтов под свои параметры. Но для людей типа меня, которые зависимы от bootstrap, это не совсем благоразумно. Мы заканчиваем с фиксированными основными значениями в пикселях и начинаем создавать свойства шрифтов для всего проекта, отталкиваясь от основных пиксельных значений.
Эта статья объясняет разницу между свойствами шрифтов и как лучше их использовать. Естественно нет конкретного пути того, как это делать и большая часть того какой шрифт использовать и насколько будет определяющим этот момент, основываясь на понимании единиц размерности шрифтов и тип проекта — всё это определяющие моменты, от которых зависит выборка в вариативности инструментов.
ПикселиПеред наступлением эпохи адаптивного дизайна, пиксели широко использовались как единица размерности шрифтов для всего от типографики до ширины, отступов и высоты. Тем не менее, пиксели это единицы с фиксированным размером и они не меняются, основываясь на размере viewport или масштабности. Если вы хотите сделать адаптивный сайт, используя пиксели, то это может стать довольно сложным занятием, так как вам придется отслеживать все значения основанные на пикселях в CSS, включая значения в медиа запросах. Так какое же свойство шрифта мы можем использовать, чтобы делать минимальные изменения в нашем CSS, но оставаться масштабируемыми? И тут нам на помощь приходят em, rem, проценты и единицы viewport.
EmEm
— гибкая масштабируемая единица, которая конвертируется браузером в пиксели. Если стандартный размер шрифта в Chrome равен 16px, то 1 em
= 16px
. Главное заблуждение по поводу em в том, что оно зависит от размера шрифта родительского элемента. Следуя спецификации W3, em относителен размеру шрифта элемента на котором их используют. Em
широко используются для типографии, такой как заголовки, текста, параграфы и с элементами ассоциированными с ней, такими как внешние отступы и внутренние. Если вы выставите базовый размер шрифта для для html
и body
элементов в пикселях и свойства ваших типографических элементов будут определяться в с помощью em, для адаптивного дизайна все что вам нужно будет сделать это изменить стандартный размер шрифта на базовом уровне, например.
@media (max-width: 400px) {
html, body { font-size: 15px; }
}
и все em
значения будут автоматически пересчитаны.
Тем не менее, у em есть большое предостережение! Наследование!
Для примера, <div>
с размером шрифта в 16px
содержит <p>
размером шрифта в 2em
, что пересчитывается как 32px
для <p>
. Теперь добавьте <div>
в <p>
с размером шрифта в 0.5em
, как результат у дива будет размер 16px
, как у половины от 32px
, а не 8px
. И тут нам на помощь приходят rem.
rem
относителен размеру шрифта корневого элемента(html
элемент). Если размер шрифта html
элемента равен 16px
, то 1rem
= 16px
. Rem
будет ВСЕГДА относителен корневому элементу, не полагаясь на вложенные элементы. Тем не менее, использование исключительно rem без em может вызвать своеобразные проблемы в плане типографики, так как она может стать слишком большой или маленькой, что приведет к проблемам в масштабируемости.
Значения в процента всегда относительны от другого значения, будь это родительское значение элемента или другое свойство элемента. Проценты широко используются в адаптивном дизайне. Отличный тому пример Bootstrap. Двенадцати колоночный макет бутстрапа имеет значения ширины выставленные в процентах, таким образом они всегда гибкие и подстраиваются относительно родительского элемента.
Проценты широко используются для выставления ширины и высоты контейнеров, дивов и для адаптивной графики.
Единицы viewportШирина и высота viewport свойств относительна ширине/высоте заданного размера viewport.
Подробно про viewport единицы вы можете почитать в этой статье.
1vw
= 1% ширины viewport
1vh
= 1% высоты viewport
Viewport в данному случае означает размер окна браузера. Если вы хотите выставить размер элемента, основываясь на ширине viewport, а не на родительском/корневом элементе, то viewport единицы это то, что вам нужно. vw
/vh
единицы отлично работают с типографикой и широко используются там же.
С тех пор как я часто начал использовать Bootstrap, мой стандартный размер базового шрифта стал в пикселях. Я использую проценты, чтобы выставить ширину и высоту для изображений, контейнеров и дивов, а em и rem для типографики и элементов относящихся к типографике, таким как margin
и padding
и т. п. Сейчас я играюсь с единицами viewport для адаптивной типографики и нахожу это очень крутым. Экспериментируйте с этими свойствами как можно больше и вы вскоре найдете стиль подогнанный именно для вас.
Конвертер PX в REM (мгновенный и двунаправленный)
Таблицы преобразования PX ↔︎ REM
Пиксели | REM |
---|---|
1 px | 0,06 rem |
2 px | rem|
3 px | 0,19 rem |
4 px | 0,3 rem |
5 px | 0.3 rem |
6 px | 0,4 rem |
8 px | 0,5 rem |
10 px | 0,6 rem |
12 px | 0,8 rem |
14 px | 0,9 rem |
15 px | 0,9 rem |
16 px | 1 rem |
18 пикселей | 1.1 rem |
20 px | 1,3 rem |
24 px | 1,5 rem |
25 px | 1,6 rem |
28 px | 1,8 rem |
32 px | 2 rem |
36 px | 2 rem |
40 px | 3 rem |
44 px | 3 rem |
48 px | 3 rem |
50 px | 3 rem |
56 px | 4 rem |
64 px | 4 rem |
72 p x | 5 rem |
75 px | 5 rem |
80 px | 5 rem |
90 px | 6 rem |
100 пикселей | 6 rem |
REM | пикселей |
---|---|
0.01 rem | 0,16 px |
0,03 rem | 0,5 px |
0,05 rem | 0,8 px |
0,08 rem | 1,3 px |
0,1 rem | 1,6 px |
0,15 rem | 2 px |
0,2 rem | 3 px |
0.5 rem | 8 px |
1 rem | 16 px |
2 rem | 32 px |
3 rem | 48 px |
4 rem | 64 px |
5 rem | 80 px |
6 rem | 96 px |
8 rem | 128 px |
10 rem | 160 px |
15 rem | 240 px |
20 rem | 320 px |
30 rem | 480 пикселей |
40 rem | 640 пикселей 900 15 |
50 rem | 800 px |
60 rem | 960 px |
80 rem | 1280 px |
100 rem | 1600 px |
Преобразовать пиксели в REM
Этот калькулятор преобразует пиксели в единицы REM CSS.Преобразование основано на размере шрифта по умолчанию
в 16 пикселей, но его можно изменить.
С помощью модуля CSS rem
вы можете определить размер относительно font-size
корневого тега HTML.
Преобразование, конечно, работает в обоих направлениях, просто измените противоположное значение.
Пример
Итак, если мы возьмем размер по умолчанию в качестве примера, то 1px
представляет 0.0625rem
и, в другом направлении, 1rem
представляет 16px
.
EM против REM: различия
В одном документе длина единицы REM везде одинакова, она может различаться в разных документах.
EM с другой стороны может различаться для каждого элемента, потому что он относится к собственному font-size
элемента (за исключением самого font-size
, в нем EM относительно родительского).
REM — это более новый модуль, старые браузеры его не поддерживают.
Преобразованиепикселей в rem, если размер шрифта root равен 16px — Standardista
Если у вас
: root { размер шрифта: 16 пикселей; }
вы можете использовать следующую таблицу для преобразования из ПИКСЕЛЕЙ в REMS
10 пикселей | 0,625 брем |
11 пикселей | 0,6875рем |
12 пикселей | 0.75рем |
13 пикселей | 0,8125рем |
14 пикселей | 0,875рем |
15 пикселей | 0,9375рем |
16 пикселей | 1рем |
17 пикселей | 1.0625rem |
18 пикселей | 1,125 бэр |
19 пикселей | 1,1875рем |
20 пикселей | 1,25рем |
21 пикс. | 1.3125rem |
22 пикс. | 1,375 бэр |
23 пикс. | 1.4375rem |
24 пикс. | 1,5 бэр |
25 пикселей | 1.5625rem |
26 пикселей | 1.625rem |
27 пикселей | 1,6875 бэр |
28 пикселей | 1,75 бэр |
29 пикселей | 1,8125рем |
30 пикселей | 1.875рем |
31 пикс. | 1.9375rem |
32 пикс. | 2рем |
33 пикс. | 2.0625rem |
34 пикс. | 2,125 бэр |
35 пикселей | 2,1875рем |
36 пикселей | 2,25 бэр |
37 пикселей | 2.3125rem |
38 пикселей | 2.375rem |
39 пикселей | 2.4375рем |
40 пикселей | 2,5 бэр |
41 пикс. | 2.5625rem |
42 пикс. | 2,625 бэр |
43 пикс. | 2,6875 бэр |
44 пикс. | 2,75 бэр |
45 пикселей | 2,8125рем |
46 пикселей | 2,875рем |
47 пикселей | 2,9375рем |
48 пикселей | 3рем |
49 пикселей | 3.0625rem |
50 пикселей | 3,125 бэр |
51 пикс. | 3,1875рем |
52 пикс. | 3,25 бэр |
53 пикс. | 3.3125rem |
54 пикс. | 3.375rem |
55 пикселей | 3,4375рем |
56 пикселей | 3,5 бэр |
57 пикселей | 3.5625rem |
58 пикселей | 3.625рем |
59 пикселей | 3,6875 бэр |
60 пикселей | 3,75 бэр |
61 пикс. | 3.8125rem |
62 пикс. | 3,875рем |
63 пикс. | 3,9375рем |
64 пикс. | 4рем |
Опубликовано
Эстель Вейл
Меня зовут Эстель Вейл. Я открытый веб-евангелист и инженер сообщества.Я веб-разработчик-консультант, пишу технические книги с О’Рейли, провожу семинары по веб-интерфейсу и рассказываю о веб-разработке, производительности и других забавных вещах по всему миру. Если у вас есть какие-либо рекомендации по темам, которые я хотел бы затронуть, дайте мне знать через @estellevw. Просмотреть все сообщения Эстель Вейл
ПреобразовательREM в PX
Конвертер REM в PX — это бесплатный онлайн-инструмент, который вы можете использовать для простого преобразования rem (root em) в px (пиксель).Имейте в виду, что 1rem равен корневому размеру шрифта , другими словами, размеру шрифта в элементе.
Как использовать конвертер REM в PX
- Шаг 1: Введите ваш основной ( корень ) размер шрифта.
- Шаг 2: Введите значение rem ( root em ), которое вы хотите преобразовать в пиксели ( пикселей, ).
- Шаг 3: Нажмите клавишу ввода или нажмите кнопку преобразования, чтобы получить эквивалент пикселей .
Видеоурок: преобразование rem в px
Таблица преобразования
REM в PX
EM | PX |
---|---|
0,0625 брем | 1 пикс. |
0,125 бэр | 2 пикс. |
0.25рем | 4 пикс. |
0,5 бэр | 8 пикселей |
1рем | 16 пикселей |
2rem | 32 пикс. |
4рем | 64px |
12,5 бэр | 200 пикселей |
15.625рем | 250 пикселей |
18.75em | 300 пикселей |
20рем | 320 пикселей |
25rem | 400 пикселей |
30рем | 480 пикселей |
35,5 бэр | 568px |
37.5рем | 600 пикселей |
48рем | 768px |
50рем | 800 пикселей |
64рем | 1024px |
75рем | 1200 пикселей |
Как преобразовать REM в PX
Так что, учитывая, что значение rem является относительным по отношению к размеру корневого шрифта.Это означает, что если вы назначите размер шрифта 16px для в своем css, например: html {font-size: 16px}
Это означает, что 1rem = 16 пикселей.
Формула REM в PX:
px = rem * размер корневого шрифта
: пиксели = значения Rem
Если вы установили последнюю версию фреймворка Genesis, вы заметите этот стиль.css теперь включает значения размера шрифта как в rem, так и в пикселях.
То же самое и с новой темой Twenty Twelve по умолчанию для WordPress.
Новое значение единицы измерения размера шрифта — rem с резервным пикселем для поддержки всех браузеров.
Пример:
{размер шрифта: 16 пикселей; размер шрифта: 1 бэр; }
Размер установлен таким образом, что 1 rem = 16 пикселей.
Следовательно, $ rembase составляет 16
html {
размер шрифта: 100%; / * Браузер по умолчанию 16 пикселей * /
}
Вот таблица, которая включена в Бытие 1.9 таблица стилей
12/16 = 0,75 бэр
14/16 = 0,875 бэр
16/16 = 1 бэр
18/16 = 1,125 бэр
20/16 = 1,25 бэр
24/16 = 1,5 бэр
30/16 = 1,875 бэр
36 / 16 = 2,25 бэр
48/16 = 3 бэр
Изменение значения REM (базовое)
Базовое значение единицы rem можно изменить следующим образом:
html {font-size: 62,5%; / * 10px браузер по умолчанию * /
}
В данном случае значение 1 rem = 10 pix
Не рекомендуется изменять значение базы rem вашей темы, если вы не знаете, что делаете.Это изменит значения всех размеров шрифта с использованием значений rem по всему сайту.
Изменение размера шрифта в различных темах
Вам нужно выяснить, какой размер шрифта используется в теме относительно корня html. Не все темы будут использовать 100% размер шрифта, то есть 1 rem не всегда будет равен 16 пикселям.
При изменении размера шрифта для пикселей вам также потребуется изменить размер rem.
Twenty Twelve Theme Rem База
Последняя тема по умолчанию Twenty Twelve использует перебазировку 14
Вот несколько примеров из таблицы стилей 2012 года
/ * Twenty Twelve Theme Rem Values
-------------------------------------------------- ------------
В этой таблице стилей используются значения rem с резервным пикселем.Рем
значения (и высоты строк) рассчитываются с использованием двух переменных:
$ rembase: 14;
$ line-height: 24;
---------- Примеры
* Используйте значение пикселя с запасным вариантом rem для font-size, padding, margins и т. Д.
отступ: 5px 0;
заполнение: 0.357142857rem 0; (5 / $ перекомпоновка)
* Установите размер шрифта, а затем установите высоту строки в зависимости от размера шрифта
размер шрифта: 16 пикселей
размер шрифта: 1.142857143rem; (16 / $ перекомпоновка)
высота строки: 1,5; ($ линия-высота / 16)
---------- Вертикальный интервал
Вертикальный интервал между большинством элементов должен составлять 24 или 48 пикселей.
для поддержания вертикального ритма:
.my-new-div {
маржа: 24px 0;
маржа: 1.714285714rem 0; (24 / $ перебазировка)
}
Рем лучше пикселей?
Я думаю, что причина, по которой разработчики тем сейчас начинают использовать rem, заключается в масштабировании для мобильных устройств. Вдобавок ко всему, вы получаете дополнительную поддержку браузера при использовании обоих шрифтов.
Очевидно, что не все темы используют одну и ту же базу rem.
Как насчет вас?
Вы используете rem или пиксели?
Подробнее о размере шрифта
единиц CSS для font-size: px | em | rem | Диксита Ганатра
Фото Александра Эндрюса на Unsplash Когда я начал копаться в CSS, я нашел различные единицы для размера шрифта
.Было немного непонятно, какой из них использовать, когда, где и почему. Потратив некоторое время, я нашел три модуля, которые решил использовать в своих проектах — px
, em
и rem
.
Пиксели — это самый простой способ измерения. Но есть загвоздка. Допустим, мы использовали пиксели по всему нашему веб-сайту, а также управляли медиа-запросами. Что, если пользователь изменит размер шрифта по умолчанию браузера (или устройства)? Размер шрифта вашего заголовка (скажем, 20 пикселей) останется 20 пикселей. Следовательно, настройки шрифта пользователя не будут отражены.Что не очень удобно для пользователей. Таким образом, пиксели могут хорошо справляться с интервалом и макетом, но не подходят для размера шрифта. На помощь приходят em s и rem s.
em
равно вычисленному размеру шрифта родительского элемента. Например, если есть элемент div , определенный с размером шрифта
: 16px
, то для этого div и для его дочерних элементов
1em = 16px
.
Если размер шрифта не определен явно, этот элемент унаследует его от родительского элемента.Таким образом между предками происходит наследование до корневого элемента. Размер шрифта по умолчанию для корневого элемента предоставляется браузером.
Вот пример для em.
Здесь вы можете видеть, что мы дали font-size: 20px от
до .parent
и font-size: 1.5em от
до .child
. Вычисленные размеры шрифта для .child
( #outerChild
и #innerChild
) различаются. #outerChild
использует размер шрифта из своего родительского .Родитель
. Итак, вычисленный размер шрифта #outerChild
будет 1,5 * 20 пикселей = 30 пикселей. А #innerChild
использует размер шрифта из своего родительского #outerChild
(для которого уже вычислен размер шрифта 30 пикселей). Следовательно, вычисленный размер шрифта вложенного .child
будет 1,5 * 30 пикселей = 45 пикселей.
Если вы хотите использовать em
для ваших юнитов, вы должны быть осторожны с вашим макетом. При использовании em
в вашем проекте рекомендуется не определять размер шрифта явно, кроме корневого элемента.
em
отлично работает с макетом, таким как меню боковой панели, где вы хотите, чтобы элементы подменю постепенно имели меньший размер шрифта. Вот пример этого.
Вы также можете использовать em
с медиа-запросами. Вот отличная статья, которая мне очень помогла.
rem
значения относятся к корневому элементу html
, а не к родительскому элементу. То есть, если размер шрифта корневого элемента составляет 16 пикселей, то 1 rem = 16 пикселей для всех элементов. Если размер шрифта не определен явно в корневом элементе, то 1rem будет равен размеру шрифта по умолчанию, предоставленному браузером (обычно 16 пикселей).
Что касается интервала и размера шрифта, я предпочитаю использовать rem
. Поскольку rem
использует размер шрифта корневого элемента вместо размера шрифта его родительского элемента.
Предположим, font-size: 10px
установлено для корневого элемента, что делает 1rem = 10px повсюду на нашей веб-странице. Поскольку 1px = 0.1rem, вычисления просты. Но установка размера корневого шрифта в пикселях будет иметь ту же проблему, что я упоминал в разделе пикселей .
Решение этой проблемы - процентов .Обычно размер шрифта браузера по умолчанию составляет 16 пикселей. Установка font-size: 100%
сделает 1rem = 16px. Но это немного затруднит расчеты. Лучше установить размер шрифта : 62,5%
. Потому что 62,5% от 16 пикселей составляет 10 пикселей. Таким образом, 1rem = 10px.
Вот пример кода в SCSS:
Вы можете увидеть результаты, изменив размер шрифта в браузере, а также попробуйте увеличить или уменьшить масштаб.
em s и rem s решили проблемы, с которыми я столкнулся при использовании пикселей.Я использую rem
в интервале (поля, отступы и т. Д.) И размере шрифта. И я использую em
для макетов, таких как меню. Если вы знаете другие варианты использования em и rem, дайте мне знать в твиттере.
Rem vs Em vs Px | Когда использовать эти единицы
Ваш контент - основа вашего входящего маркетинга. Не упустите суть, и вы можете увеличить показатель отказов. Хотя тип и количество контента являются ключевыми, важно также знать, как разместить и организовать свой контент на веб-сайте.
В этой маркетинговой гонке типографика - это презентация вашей работы. Помимо вашего стиля письма тип шрифта, размер, цвет, полужирный, курсив, все имеет значение для вашего конечного пользователя. Это наука о инновациях, которую часто называют искусством, - удерживать глаза прикованными к странице.
Введение в rem, em и px
Если вы знакомы с веб-дизайном, вы, несомненно, слышали об этих терминах. Лучшая практика типографики в Интернете - использовать относительные единицы: rem , em и px .
Большинство популярных фреймворков обновляют дизайн с помощью единиц rem или em. У нас есть популярный фреймворк Twitter Bootstrap 3, который раньше работал с пикселями, но с Bootstrap 4 теперь на рынке , даже он обновил свою типографику с помощью rem / em.
В этой статье мы обсудим, что такое rem, em и px, и как их использовать.
Что такое Рем?
Расшифровывается как «Root em». Это относительная единица CSS, переводимая браузером в пиксели (px).Когда rem используется для font-size в корневом элементе, он представляет его начальное значение. Если мы установим font-size: 16px корневого элемента, тогда размер шрифта абзаца будет 1rem. Это означает, что
1рем = 16 пикселей
Если мы изменим размер шрифта корневого элемента с 16 пикселей на 20 пикселей, то 1rem будет равен 20 пикселей.
html {
размер шрифта: 16 пикселей; / * это означает, что 16 пикселей равно 1 бэр * /
}
Размер шрифта абзаца здесь 1rem.Если мы хотим установить размер шрифта как 18 пикселей для абзаца, то мы можем рассчитать размер шрифта как:
html {
размер шрифта: 16 пикселей
}
п{
размер шрифта: 1 бэр;
}
Точно так же мы можем вычислить пиксели из rem.
Предположим, мы установили размер шрифта: 16 пикселей корневого элемента HTML, тогда мы посчитаем его как:
html {
размер шрифта: 16 пикселей
}
п{
размер шрифта: 1 бэр;
}
Если теперь вы хотите установить font-size: 22px в rem элемента, то мы можем вычислить размер шрифта как,
22px / 16px = 1.375rem / * т.е. равно 22px. * /
Когда использовать Rem?
Поскольку содержимое должно адаптироваться к размеру устройства, важно, чтобы ваш шрифт также корректировался.
Если мы хотим, чтобы размер шрифта зависел от устройства, мы должны изменить корневой элемент.
Создавать адаптивный веб-дизайн - это всегда хорошо.
html {
размер шрифта: 16 пикселей;
@media only screen и (max-width: 991px) {
размер шрифта: 14 пикселей;
}
}
Тогда размер шрифта автоматически подстраивается под размер экрана.
Вот пример:
Тест
Это заголовок h2
Это абзац
Это очень распространенный пример rem.
Теперь мы также можем установить размер шрифта для большего экрана.
html {
размер шрифта: 16 пикселей; / * т.е. 1 бэр * /
}
.test-col h2 {
размер шрифта: 2rem; / * т.е. 32 пикселя * /
}
.test-col p {
размер шрифта: 1 бэр; / * т.е. 16 пикселей * /
}
Если мы хотим изменить размер шрифта
&
на мобильном устройстве и планшете, мы изменим размер шрифта корневого элемента.
@media only screen and (min-width: 768px) and (max-width: 991px)
{
html {
размер шрифта: 14 пикселей; / * i.е. 1 бэр для экрана планшета * /
}
}
теперь размер шрифта &
работает так же на планшете
.test-col h2 {
размер шрифта: 2rem; / * т.е. 28 пикселей * /
}
.test-col p {
размер шрифта: 1 бэр; / * т.е. 14 пикселей * /
}
@media only screen and (max-width: 767px) {
html {
размер шрифта: 13 пикселей; / * т.е. 1 бэр для экрана мобильного * /
}
}
теперь размер шрифта &
работает так же на мобильных устройствах
.test-col h2 {
размер шрифта: 2rem; / * т.е. 26 пикселей * /
}
.test-col p {
размер шрифта: 1 бэр; / * i.е. 13 пикселей * /
}
Что такое Эм?
Em - относительно гибкая и масштабируемая типографская единица. Он равен размеру шрифта, указанному для родительского элемента. Ваш браузер переводит em в пиксели. Это может оказаться непростой задачей.
Точное значение определяется размером шрифта родительского элемента. Это усложняется, когда мы начинаем глубоко вкладывать элементы. В таком случае мы должны умножить все доступные значения, чтобы определить фактическое значение дочернего элемента.
Допустим, у нас есть элемент
и абзац
.
, если мы установим font-size: 16px родительского
div {
размер шрифта: 16 пикселей;
}
Тогда у нас есть font-size
как 2em. Это означает, что размер шрифта элемента
зависит от его родительского элемента. h2 {
размер шрифта: 2em; / * размер шрифта родительского элемента по умолчанию - 16 пикселей * /
}
п {
font-size: 1em / * размер шрифта по умолчанию родительского элемента составляет 16 пикселей * /
}
Если мы хотим установить размер шрифта
равным 30 пикселей в em, то мы можем вычислить размер шрифта в em следующим образом:
30 пикселей / 16 пикселей = 1.875em . Каковы виды использования Em?
Основная проблема заключается в том, что em зависит от размера шрифта его родительского элемента. Если мы хотим изменить размер шрифта элемента, мы должны изменить размер шрифта его родительского элемента.
Используя em, мы можем создавать компоненты на странице, которые автоматически реагируют на изменение размера шрифта.
Скажем, если мы хотим изменить размер шрифта
на мобильном устройстве или планшете,
div {
размер шрифта: 16 пикселей;
@media only screen и (max-width: 767px) {
размер шрифта: 14 пикселей;
}
h2 {
размер шрифта: 1em;
@media only screen и (max-width: 767px) {
размер шрифта: 1em; / * i.е. 14 пикселей * /
}
}
}
Что такое пиксель?
Пиксель - это единица абсолютного фиксированного размера в CSS. Хотя размер пикселя не всегда одинаков, размер шрифта, поля и отступы в пикселях (px) остаются одинаковыми для всех экранов.
Пиксели легко переводятся. Например, если мы установим размер шрифта 24px для элемента
, то он всегда будет 24px для всех экранов и устройств.
h2 {
размер шрифта: 24 пикселя;
}
п{
размер шрифта: 18 пикселей;
}
И если мы установим размер шрифта на 18 пикселей для элемента
, то он всегда будет 24 пикселей для всех экранов и устройств.
Мы используем пиксели как абсолютную единицу, и она остается одинаковой для всех экранов.
В зависимости от проекта, потребностей и разработчика вы можете использовать rem, em или пиксели. Но прежде всего следует принять во внимание, для кого создается веб-сайт. Когда вы ознакомитесь со своими потребностями и конечной целью, легко решить, на чем сосредоточить внимание.
Адаптивная типографика: rem, em и px
Бена Адамса
Введение
Работа с шрифтом в Интернете может быть проблемой, особенно если вам нужно учитывать постоянно меняющийся диапазон размеров экрана.В конечном итоге размер шрифта, который вы используете для заголовков, основного текста и всего остального, напрямую влияет на макет вашей страницы, и когда вы имеете дело с десятками или даже сотнями страниц с разным содержанием, вам нужен гибкий способ управления тип, сохраняя при этом все согласованность. К счастью, теперь у нас есть модульные весы, такие как rem
и em
, чтобы помочь в этом.
Я хочу предисловие к этому, сказав, что есть несколько способов справиться с адаптивной типографикой, и я не собираюсь перечислять их все, но я покажу свой предпочтительный метод.Прежде чем мы это сделаем, давайте проясним любую путаницу: может быть более rem,
, em,
, пикселей,
пикселей, а затем обсудим, когда лучше использовать каждую из них.
пикселей
Я предполагаю, что вы уже достаточно хорошо разбираетесь в пикселях, они имеют фиксированный размер, один пиксель превращается в одну точку на экране. Наши дизайны также создаются в пикселях, поэтому естественно думать так, когда мы переходим от дизайна к коду. Проблема возникает, когда нам нужно масштабировать эти проекты по размеру экрана.
Какие пиксели (px) подходят для: - границы
- базовые размеры шрифта
- минимальная высота (т.е. изображения героев, если
vh
не жизнеспособны или как запасной вариант)
Чтобы быть ясным, вполне возможно создавать полностью адаптивные веб-сайты, используя только пикселей
единиц, используя набор медиа-запросов для отображения определенного размера шрифта при каждом разрешении. Однако при этом мы быстро узнаем, что эти размеры, зависящие от пикселей, могут стать трудными для масштабирования и кошмаром для поддержания.Здесь пригодятся единицы измерения CSS3 rem
и em
- так что давайте углубимся.
Rem против Em
Я начну это с того, что честно говоря, я не был полностью уверен, в чем разница между rem
и em
до недавнего времени, так что, если вы тоже не знаете, не расстраивайтесь. Давайте проясним это раз и навсегда ...
И rem
, и em
являются масштабируемыми единицами размера, но с em
единица измерения относительно размера шрифта его родительского элемента, а rem
единица только относительно размера корневого шрифта HTML документ.
Для меня осознание того, что «R» в REM означает «корень», помогло мне наконец различить их. Давайте посмотрим на быстрый пример, который поможет прояснить rem
и em
.
Просто пример CSS, чтобы показать, как rem
будет работать, обратите внимание, что размер корневого шрифта установлен с использованием пикселей
через тег html
html, body {font-size: 16px; }
div {размер шрифта: 18 пикселей; }
p {font-size: 1rem; }
И соответствующий HTML:
Поскольку тег
установлен на 1rem
, он игнорирует размер шрифта родительского div 18 пикселей.Однако, если мы вместо этого установим размер шрифта на 1em
, абзац унаследует размер шрифта 18 пикселей своего родительского элемента. Я знаю, что этот пример не особо полезен, но, надеюсь, он поможет проиллюстрировать разницу между em
и rem
.
Лучшее из обоих миров
Лучшее в модуле rem
заключается в том, что он позволяет быстро масштабировать весь проект с разными разрешениями, просто задав размер корневого шрифта один раз для каждого медиа-запроса, а затем масштабируя его оттуда.Вы можете сделать это несколькими способами, но самый простой способ - установить базовый размер шрифта в пикселях, скажем, 16px
, а затем использовать rem
, чтобы унаследовать этот базовый размер шрифта и масштабировать его вверх или вниз для изменения размера h2- H5, основной текст и даже поля и отступы. Давайте посмотрим:
Этот шаг не является обязательным, но если вы используете Sass или Less, неплохо установить точки останова для многократного использования размера экрана для ваших медиа-запросов.
$ screen-sm: 768px;
$ screen-md: 1024px;
$ screen-lg: 1200 пикселей;
$ screen-xl: 1600 пикселей;
Теперь мы можем использовать эти переменные размера экрана (или жестко запрограммированные значения) для установки смещенных размеров корневого шрифта.Сначала мы делаем этот мобильный телефон с размером шрифта по умолчанию 15 пикселей, который применяется к размерам экрана 768 пикселей,
и ниже (большинство телефонов), до 20 пикселей
на очень больших мониторах или телевизорах.
кузов {
семейство шрифтов: «Open Sans», без засечек;
размер шрифта: 15 пикселей;
высота строки: 1,6;
@media screen и (min-width: $ screen-sm) {
размер шрифта: 16 пикселей;
}
@media screen и (min-width: $ screen-lg) {
размер шрифта: 18 пикселей;
}
@media screen и (min-width: $ screen-xl) {
размер шрифта: 20 пикселей;
}
}
И теперь мы можем использовать корневой размер шрифта для масштабирования наших заголовков и любых других многоразовых или общих элементов.
h2 {font-size: 3rem;}
h3 {размер шрифта: 2,5 бэр; }
h4 {размер шрифта: 2rem; }
h5 {размер шрифта: 1,5 бэр; }
h5 {размер шрифта: 1 rem; }
Обратная сторона и решение (я)
Вышеупомянутый метод очень упрощает настройку масштабируемого типа, но, к сожалению, ограничивает наш контроль над отдельными элементами. Например, приведенные выше заголовки отлично смотрятся на больших экранах, но после перехода на мобильный телефон заголовки становятся слишком большими.
Есть несколько способов решить эту проблему, в том числе использовать rem
для глобальных элементов и em
для локальных, но проще всего было бы просто добавить дополнительный медиа-запрос, в результате Sass будет выглядеть так:
h2 {размер шрифта: 2.4rem;}
h3 {размер шрифта: 2rem; }
h4 {font-size: 1.6rem; }
h5 {размер шрифта: 1,2 бэр; }
h5 {размер шрифта: 1 rem; }
@media screen и (min-width: $ screen-sm) {
h2 {размер шрифта: 3rem;}
h3 {размер шрифта: 2,5 бэр; }
h4 {размер шрифта: 2rem; }
h5 {размер шрифта: 1,5 бэр; }
h5 {размер шрифта: 1 rem; }
}
Заключение
Похоже, что пока нет отраслевого стандарта обработки адаптивной типографики, некоторые предпочитают использовать em
, некоторые rem
, а другие - комбинацию этих двух.Есть даже растущая группа, которая заявляет, что никогда не используйте пикс.
для размеров шрифта, потому что это не позволяет пользователю увеличивать или уменьшать размер шрифта в настройках своего браузера.
h2 {
размер шрифта: 2em; / * размер шрифта родительского элемента по умолчанию - 16 пикселей * /
}
п {
font-size: 1em / * размер шрифта по умолчанию родительского элемента составляет 16 пикселей * /
}
Если мы хотим установить размер шрифта
равным 30 пикселей в em, то мы можем вычислить размер шрифта в em следующим образом:
30 пикселей / 16 пикселей = 1.875em .Каковы виды использования Em?
Основная проблема заключается в том, что em зависит от размера шрифта его родительского элемента. Если мы хотим изменить размер шрифта элемента, мы должны изменить размер шрифта его родительского элемента.
Используя em, мы можем создавать компоненты на странице, которые автоматически реагируют на изменение размера шрифта.
Скажем, если мы хотим изменить размер шрифта
на мобильном устройстве или планшете,
div {
размер шрифта: 16 пикселей;
@media only screen и (max-width: 767px) {
размер шрифта: 14 пикселей;
}
h2 {
размер шрифта: 1em;
@media only screen и (max-width: 767px) {
размер шрифта: 1em; / * i.е. 14 пикселей * /
}
}
}
Что такое пиксель?
Пиксель - это единица абсолютного фиксированного размера в CSS. Хотя размер пикселя не всегда одинаков, размер шрифта, поля и отступы в пикселях (px) остаются одинаковыми для всех экранов.
Пиксели легко переводятся. Например, если мы установим размер шрифта 24px для элемента
, то он всегда будет 24px для всех экранов и устройств.
h2 {
размер шрифта: 24 пикселя;
}
п{
размер шрифта: 18 пикселей;
}
И если мы установим размер шрифта на 18 пикселей для элемента
, то он всегда будет 24 пикселей для всех экранов и устройств.
Мы используем пиксели как абсолютную единицу, и она остается одинаковой для всех экранов.
В зависимости от проекта, потребностей и разработчика вы можете использовать rem, em или пиксели. Но прежде всего следует принять во внимание, для кого создается веб-сайт. Когда вы ознакомитесь со своими потребностями и конечной целью, легко решить, на чем сосредоточить внимание.
Адаптивная типографика: rem, em и px
Бена Адамса
Введение
Работа с шрифтом в Интернете может быть проблемой, особенно если вам нужно учитывать постоянно меняющийся диапазон размеров экрана.В конечном итоге размер шрифта, который вы используете для заголовков, основного текста и всего остального, напрямую влияет на макет вашей страницы, и когда вы имеете дело с десятками или даже сотнями страниц с разным содержанием, вам нужен гибкий способ управления тип, сохраняя при этом все согласованность. К счастью, теперь у нас есть модульные весы, такие как rem
и em
, чтобы помочь в этом.
Я хочу предисловие к этому, сказав, что есть несколько способов справиться с адаптивной типографикой, и я не собираюсь перечислять их все, но я покажу свой предпочтительный метод.Прежде чем мы это сделаем, давайте проясним любую путаницу: может быть более rem,
, em,
, пикселей,
пикселей, а затем обсудим, когда лучше использовать каждую из них.
пикселей
Я предполагаю, что вы уже достаточно хорошо разбираетесь в пикселях, они имеют фиксированный размер, один пиксель превращается в одну точку на экране. Наши дизайны также создаются в пикселях, поэтому естественно думать так, когда мы переходим от дизайна к коду. Проблема возникает, когда нам нужно масштабировать эти проекты по размеру экрана.
Какие пиксели (px) подходят для:- границы
- базовые размеры шрифта
- минимальная высота (т.е. изображения героев, если
vh
не жизнеспособны или как запасной вариант)
Чтобы быть ясным, вполне возможно создавать полностью адаптивные веб-сайты, используя только пикселей
единиц, используя набор медиа-запросов для отображения определенного размера шрифта при каждом разрешении. Однако при этом мы быстро узнаем, что эти размеры, зависящие от пикселей, могут стать трудными для масштабирования и кошмаром для поддержания.Здесь пригодятся единицы измерения CSS3 rem
и em
- так что давайте углубимся.
Rem против Em
Я начну это с того, что честно говоря, я не был полностью уверен, в чем разница между rem
и em
до недавнего времени, так что, если вы тоже не знаете, не расстраивайтесь. Давайте проясним это раз и навсегда ...
И
rem
, иem
являются масштабируемыми единицами размера, но сem
единица измерения относительно размера шрифта его родительского элемента, аrem
единица только относительно размера корневого шрифта HTML документ.
Для меня осознание того, что «R» в REM означает «корень», помогло мне наконец различить их. Давайте посмотрим на быстрый пример, который поможет прояснить rem
и em
.
Просто пример CSS, чтобы показать, как rem
будет работать, обратите внимание, что размер корневого шрифта установлен с использованием пикселей
через тег html
html, body {font-size: 16px; }
div {размер шрифта: 18 пикселей; }
p {font-size: 1rem; }
И соответствующий HTML:
Поскольку тег
установлен на 1rem
, он игнорирует размер шрифта родительского div 18 пикселей.Однако, если мы вместо этого установим размер шрифта на 1em
, абзац унаследует размер шрифта 18 пикселей своего родительского элемента. Я знаю, что этот пример не особо полезен, но, надеюсь, он поможет проиллюстрировать разницу между em
и rem
.
Лучшее из обоих миров
Лучшее в модуле rem
заключается в том, что он позволяет быстро масштабировать весь проект с разными разрешениями, просто задав размер корневого шрифта один раз для каждого медиа-запроса, а затем масштабируя его оттуда.Вы можете сделать это несколькими способами, но самый простой способ - установить базовый размер шрифта в пикселях, скажем, 16px
, а затем использовать rem
, чтобы унаследовать этот базовый размер шрифта и масштабировать его вверх или вниз для изменения размера h2- H5, основной текст и даже поля и отступы. Давайте посмотрим:
Этот шаг не является обязательным, но если вы используете Sass или Less, неплохо установить точки останова для многократного использования размера экрана для ваших медиа-запросов.
$ screen-sm: 768px;
$ screen-md: 1024px;
$ screen-lg: 1200 пикселей;
$ screen-xl: 1600 пикселей;
Теперь мы можем использовать эти переменные размера экрана (или жестко запрограммированные значения) для установки смещенных размеров корневого шрифта.Сначала мы делаем этот мобильный телефон с размером шрифта по умолчанию 15 пикселей, который применяется к размерам экрана 768 пикселей,
и ниже (большинство телефонов), до 20 пикселей
на очень больших мониторах или телевизорах.
кузов {
семейство шрифтов: «Open Sans», без засечек;
размер шрифта: 15 пикселей;
высота строки: 1,6;
@media screen и (min-width: $ screen-sm) {
размер шрифта: 16 пикселей;
}
@media screen и (min-width: $ screen-lg) {
размер шрифта: 18 пикселей;
}
@media screen и (min-width: $ screen-xl) {
размер шрифта: 20 пикселей;
}
}
И теперь мы можем использовать корневой размер шрифта для масштабирования наших заголовков и любых других многоразовых или общих элементов.
h2 {font-size: 3rem;}
h3 {размер шрифта: 2,5 бэр; }
h4 {размер шрифта: 2rem; }
h5 {размер шрифта: 1,5 бэр; }
h5 {размер шрифта: 1 rem; }
Обратная сторона и решение (я)
Вышеупомянутый метод очень упрощает настройку масштабируемого типа, но, к сожалению, ограничивает наш контроль над отдельными элементами. Например, приведенные выше заголовки отлично смотрятся на больших экранах, но после перехода на мобильный телефон заголовки становятся слишком большими.
Есть несколько способов решить эту проблему, в том числе использовать rem
для глобальных элементов и em
для локальных, но проще всего было бы просто добавить дополнительный медиа-запрос, в результате Sass будет выглядеть так:
h2 {размер шрифта: 2.4rem;}
h3 {размер шрифта: 2rem; }
h4 {font-size: 1.6rem; }
h5 {размер шрифта: 1,2 бэр; }
h5 {размер шрифта: 1 rem; }
@media screen и (min-width: $ screen-sm) {
h2 {размер шрифта: 3rem;}
h3 {размер шрифта: 2,5 бэр; }
h4 {размер шрифта: 2rem; }
h5 {размер шрифта: 1,5 бэр; }
h5 {размер шрифта: 1 rem; }
}
Заключение
Похоже, что пока нет отраслевого стандарта обработки адаптивной типографики, некоторые предпочитают использовать em
, некоторые rem
, а другие - комбинацию этих двух.Есть даже растущая группа, которая заявляет, что никогда не используйте пикс.
для размеров шрифта, потому что это не позволяет пользователю увеличивать или уменьшать размер шрифта в настройках своего браузера.