Использование 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 и px
Есть ли какие-либо доказательства того, что конкретная единица калибровки занимает больше времени для обработки? Например, если бы вы использовали rem для определения размера всего вашего сайта, потребовалось бы больше времени для вычисления/рисования страницы, чем если бы все было задано.
- Должен ли я использовать единицы измерения px или rem в моем CSS?
Я разрабатываю новый веб-сайт и хочу, чтобы он был совместим с как можно большим количеством браузеров и настроек браузера. Я пытаюсь решить, какую единицу измерения я должен использовать для размеров моих шрифтов и элементов, но не могу найти убедительного ответа. Мой вопрос: Должен ли я…
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
в качестве основы (по умолчанию 16 пикселей) для вычисления его размера, поэтому в основном ваше значениеrem
изimg
умножается наfont-size
наhtml
em
использует первого родителя с
для вычисления размера , который он должен отобразить (вычисляется так же, как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 / Em Путаница
Сегодня я поиграл с использованием em’s/rem’s на новом сайте, и у меня есть несколько вещей, которые я хотел бы обсудить/спросить Здесь.
- rem, px, mediaqueries для браузеров >=IE9
У меня есть проект, где IE9 -это браузер с минимальной совместимостью. Это означает, что я могу использовать rem -блок. По моему опыту работы с большими проектами, в которых участвует много разработчиков, использование em создает довольно большой беспорядок. Я не говорю, что это плохо само по…
1
И em , и rem являются гибкими, масштабируемыми единицами измерения, которые преобразуются браузером в значения пикселей в зависимости от настроек размера шрифта в вашем дизайне. Если вы используете значение 1em or 1rem,
, оно может быть переведено в браузере как что-либо из 16px to 160px
или любого другого значения.
значения px используются браузером как есть, поэтому
всегда будет отображаться как 1px
.
Перевод единиц rem в значение пикселя определяется размером шрифта элемента html.
Перевод единиц измерения em в значения пикселей определяется размером шрифта элемента, на котором они используются. Используйте em units
для размера, который должен масштабироваться в зависимости от размера шрифта элемента, отличного от root.Use rem
единиц, для размера, который не нуждается в em
единицах, и который должен масштабироваться в зависимости от размера шрифта браузера settings.Use единиц rem на media queries
Поделиться Mubeen Khan
Похожие вопросы:
Зачем использовать rem вместо px, если это все равно одно и то же?
Хорошо, во-первых, да, я прочитал много-много статей ( Должен ли я использовать единицы измерения px или rem в моем CSS? ) и форумов об этом. Я знаю, что 1px — это не физический пиксель , а скорее…
Следует ли использовать em/rem или px при расширении фундамента?
Я создаю новое веб-приложение с foundation 5.x и заметил, что все, похоже, основано на rem. Раньше я изменял отступы/поля с помощью px,но мне кажется, что создание темы с фундаментом может быть…
Преобразуются ли rem и em в px браузером во время рендеринга?
Когда мы используем em/rem, разве мы не даем браузеру дополнительную работу с точки зрения изменения значений em/rem на px во время рендеринга, что может быть не очень хорошей практикой, поскольку…
Тест скорости между единицами измерения размера: rem, em и px
Есть ли какие-либо доказательства того, что конкретная единица калибровки занимает больше времени для обработки? Например, если бы вы использовали rem для определения размера всего вашего сайта,…
Должен ли я использовать единицы измерения px или rem в моем CSS?
Я разрабатываю новый веб-сайт и хочу, чтобы он был совместим с как можно большим количеством браузеров и настроек браузера. Я пытаюсь решить, какую единицу измерения я должен использовать для…
REM / Em Путаница
Сегодня я поиграл с использованием em’s/rem’s на новом сайте, и у меня есть несколько вещей, которые я хотел бы обсудить/спросить Здесь. В течение многих лет я был полностью пиксельным человеком с…
rem, px, mediaqueries для браузеров >=IE9
У меня есть проект, где IE9 -это браузер с минимальной совместимостью. Это означает, что я могу использовать rem -блок. По моему опыту работы с большими проектами, в которых участвует много…
Почему Bootstrap 4 выбирает rem и em вместо px?
Я хотел бы знать, почему Boostrap выбирает rem и em вместо px для новой версии Boostrap 4 . Мы можем посмотреть здесь Некоторые примеры переменных: $font-size-h2: 2.5rem !default; $font-size-h3:…
Когда выбрать REM вместо PX?
Когда я должен использовать rem поверх px? Я вижу много статей, в которых говорится, что я должен использовать REM, чтобы уважать предпочтения пользователя, но примеры всегда говорят о размере. ..
Как преобразовать em/rem в px?
У меня есть следующий скрипт, который преобразует px в em: perl -p -i -e ‘s/(\d+)px/($1\/16).em/ge’ stylesheet.css Однако, когда я настраиваю его, чтобы преобразовать em в px, он не работает хорошо:…
Разница между единицами измерения px и em, rem в css
Возможности PX
IE не может настроить размер шрифта, который использует пиксель как единицу измерения;
Причина, по которой большинство зарубежных веб-сайтов можно настраивать, заключается в том, что они используют em или rem в качестве единицы шрифта;
Firefox может настраивать px, em и rem, но более 96% китайских пользователей сети используют браузер IE (или ядро).
px пиксели (пиксель). Единица относительной длины. Пиксель в пикселях относится к разрешению экрана монитора. (Цитируется из руководства CSS2.0)
Как сделать 1em равным 10 строкам пикселей;
Высота шрифта по умолчанию любого браузера составляет 16 пикселей.
Все неотрегулированные браузеры соответствуют: 1em = 16px.
Тогда 12px = 0,75em, 10px = 0,625em.
Чтобы упростить преобразование font-size, вам необходимо объявить Font-size = 62,5% в селекторе body в css, что делает значение em 16px * 62,5% = 10px, поэтому 12px = 1.2em, 10px = 1em, что означает, что вам нужно только разделить исходное значение в пикселях на 10, а затем заменить его на em в качестве единицы.
EM особенности
Значение em не фиксировано;
em унаследует размер шрифта родительского элемента.
Поэтому, когда мы пишем CSS, нам нужно обращать внимание на два момента:
Селектор тела объявляет размер шрифта = 62,5%;
Разделите исходное значение в пикселях на 10 и замените его на em в качестве единицы;
Пересчитайте значения em для увеличенных шрифтов. Избегайте повторного объявления размера шрифта.
То есть, чтобы избежать явления 1,2 * 1,2 = 1,44. Например, если вы объявляете размер шрифта 1.2em в #content, тогда, когда вы объявляете размер шрифта p, вы можете использовать только 1em вместо 1.2em, потому что этот em не тот em, и он наследует высоту шрифта #content. Он становится 1em = 12px.
rem особенности
rem этоCSS3Добавлена новая относительная единица (корень em, корень em), которая привлекла всеобщее внимание. В чем разница между этим устройством и em? Разница в том, что при использовании rem для установки размера шрифта для элемента это все еще относительный размер, ноПротивоположным является только корневой элемент HTML.. Можно сказать, что этот модуль сочетает в себе преимущества относительного и абсолютного размера. Благодаря ему все размеры шрифтов можно регулировать пропорционально только путем изменения корневого элемента, а также можно избежать цепной реакции послойного изменения размера шрифта. В настоящее время rem поддерживают все браузеры, кроме IE8 и более ранних версий. Для браузеров, которые его не поддерживают, решение также очень простое: написать объявление абсолютной единицы измерения. Эти браузеры игнорируют размер шрифта, установленный с помощью rem.
Пример:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>rem</title>
<style type="text/css">
html{
font-size: 40px;
}
#first {
font-size: 90px;
}
#second {
width: 1rem;
height: 1rem;
background: gray;
}
</style>
</head>
<body>
<div>
<div>
<p> Я </p>
</div>
</div>
</body>
</html>
нота:
Выбор используемого шрифта в основном определяется вашим проектом. Если ваша пользовательская база использует последнюю версию браузера, рекомендуется использовать rem. Если вы хотите учитывать совместимость , затем используйте px или оба.
Конвертер px в rem
Базовый размер шрифта px
Введите известное значение в соответствующем поле:
Таблица значений rem для 16px
Измените базовое значение размера шрифта чтобы в таблице отобразились значения для нужного базового размера
px | rem |
---|---|
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 |
px | rem |
---|---|
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 |
px | rem |
---|---|
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 |
Теория
px (пиксель) — это единица измерения размеров для экранов (мониторов). Используется для максимально конкретного и точного задания размеров.
rem – задаёт размер относительно размера шрифта заданного для тега <html>
, используется для удобства глобального масштабирования: элементы которые планируется масштабировать, задаются в rem
.
Чтобы размер шрифта масштабировался для устройств с разным расширением экрана, в css через медиа-запросы задают базовый размер шрифта для тега <html>
для разных размеров экранов. Пример:
html { font-size: 16px; } @media (max-width: 576px) { html { font-size: 13px; } } @media (max-width: 768px) { html { font-size: 14px; } } @media (max-width: 992px) { html { font-size: 15px; } }
***Данные размеры для свойства font-size
не являются рекомендуемыми. Они просто взяты как пример. Размер напрямую зависит от используемого шрифта и его особенностей. При этом сами значения для font-size
не обезательно должны быть целыми числами, а могут быть десятичными дробями: font-size: 15.7575px
, что очень часто практекуется в различный css-фреймворках.
Формула для перевода из px в rem
Для перевода значений из пикселей в rem применяется следующая формула:
rem = \dfrac{px}{\text{База}}
- rem — значение в rem
- px — значение в пикселях
- База — базовый размер шрифта
Похожие калькуляторы:
Понимание и использование rem Units в CSS
Модули CSS были предметом нескольких статей здесь на SitePoint (например, «Взгляд на единицы длины в CSS» , «Новые единицы измерения относительного размера шрифта CSS3» и «Сила элементов em в CSS» ). В этой статье мы увеличиваем количество, подробно рассматривая единицы rem , которые имеют отличную поддержку браузера и полифилл, если вам нужна поддержка старого IE.
Эта статья была обновлена в декабре 2019 года, чтобы отразить текущее состояние определения размера блоков rem с помощью CSS. Подробнее о свойствах шрифта и текста CSS читайте в нашей книге CSS Master, 2nd Edition .
Что такое Rem Units?
Возможно, вы встречали термин «REM» раньше, когда слушали радио или музыкальный проигрыватель. В отличие от их музыкальных аналогов, названных по имени «Быстрое движение глаз» во время глубокого сна, в CSS rem означает «root em». Они не заставят вас потерять вашу религию или поверить в человека на луне. Они могут помочь вам достичь гармоничного и сбалансированного дизайна.
В соответствии со спецификацией W3C определение для одного модуля rem:
Равен вычисленному значению
font-size
При указании в свойствеfont-size
Это означает, что 1rem
html
Рем Юниты против Эм Юнитов
Основная проблема с модулями em заключается в том, что они связаны с размером шрифта их собственного элемента. Как таковые они могут каскадироваться и вызывать неожиданные результаты. Давайте рассмотрим следующий пример, где мы хотим, чтобы списки имели размер шрифта 12px
16px
html {
font-size: 100%;
}
ul {
font-size: 0.75em;
}
Если у нас есть список, вложенный в другой список, размер шрифта внутреннего списка будет 75% от размера его родителя (в данном случае 9px
Мы все еще можем преодолеть эту проблему, используя что-то вроде этого:
ul ul {
font-size: 1em;
}
Это делает свое дело, однако мы все еще должны уделять много внимания ситуациям, когда вложение становится еще глубже.
С блоками rem все проще:
html {
font-size: 100%;
}
ul {
font-size: 0.75rem;
}
Поскольку на все размеры ссылается размер корневого шрифта, больше нет необходимости покрывать случаи вложения в отдельных объявлениях.
Определение размера шрифта с помощью модулей Rem
Одним из пионеров использования rem-модулей для определения размера шрифта является Джонатан Снук (Jonathan Snook) со своей статьей « Изменение размера шрифта с помощью REM», опубликованной еще в мае 2011 года. Как и многим другим разработчикам CSS, ему пришлось столкнуться с проблемами, возникающими в сложных макетах модулей.
В то время старые версии IE по-прежнему имели большую долю рынка и не могли масштабировать текст, который был измерен в пикселях. Однако, как мы видели ранее, очень легко потерять след вложенности и получить неожиданные результаты с единицами em.
Основная проблема с использованием rem для определения размера шрифта заключается в том, что значения довольно сложно использовать. Давайте рассмотрим пример некоторых распространенных размеров шрифта, выраженных в единицах rem, при условии, конечно, что базовый размер составляет 16 пикселей:
- 10 пикселей = 0,625 мм
- 12px = 0,75rem
- 14px = 0.875rem
- 16px = 1рем (базовый)
- 18px = 1.125rem
- 20 пикселей = 1,25 мм
- 24 пикс. = 1,5 мм
- 30px = 1.875rem
- 32px = 2rem
Как видим, эти значения не очень удобны для проведения расчетов. По этой причине Snook использовал трюк под названием « 62,5% ». В любом случае, это не было новым открытием, так как оно уже использовалось с модулями em:
body { font-size:62.5%; }
h2 { font-size: 2.4em; }
p { font-size: 1.4em; }
li { font-size: 1.4em; }
Поскольку единицы измерения rem относятся к корневому элементу, вариант решения Snook:
html { font-size: 62.5%; }
body { font-size: 1.4rem; }
h2 { font-size: 2.4rem; }
Также нужно было учитывать другие браузеры, которые не поддерживали rem. Таким образом, код сверху на самом деле был бы написан так:
html {
font-size: 62.5%;
}
body {
font-size: 14px;
font-size: 1.4rem;
}
h2 {
font-size: 24px;
font-size: 2.4rem;
}
Хотя это решение кажется близким к статусу «золотого правила», есть люди, которые советуют не использовать его ослепительно. Гарри Робертс пишет свой взгляд на использование бэков . По его мнению, хотя решение на 62,5% облегчает вычисления (поскольку размеры шрифта в px
Третье мнение исходит от Криса Койера из CSS-Tricks. Его решение использует все три устройства, с которыми мы столкнулись до сих пор. Он сохраняет размер корня, определенный в px
Этот подход облегчает манипулирование глобальным размером, который масштабирует тип в модулях, в то время как содержимое модуля масштабируется на основе самого размера шрифта модуля. Луи Лазарис обсуждал эту последнюю концепцию в «Силах их единиц в CSS» .
В приведенном ниже примере вы можете увидеть, как будет выглядеть подход Криса:
На практике существуют основные структуры, такие как Bootstrap 4 и руководящие принципы проектирования материалов , в которых используются единицы измерения rem для определения размера текстового содержимого.
Особо следует упомянуть Material-UI , очень популярную коллекцию компонентов React. Они не только одинаково изменяют размер текста, но и предлагают механизм для реализации «упрощения в 10 пикселей», которое мы упоминали выше.
Другой недавний проект Every Layout очень вдохновенно объединяет единицы em и rem. Он ближе всего подходит к схеме модели Криса Койера ранее и использует единицы em для выделения встроенных элементов, таких как значки SVG, промежутки или другие подобные элементы.
Как видите, решения «серебряной пули» не существует. Возможные комбинации ограничены только воображением разработчиков.
Использование модулей em или rem внутри медиа-запросов тесно связано с понятием «оптимальной длины строки» и тем, как оно влияет на восприятие чтения. В сентябре 2014 года журнал Smashing Magazine опубликовал комплексное исследование веб-типографики под названием « Размер имеет значение: балансировка длины строки и размера шрифта в адаптивном веб-дизайне» . Среди многих других интересных вещей, статьи дают оценку оптимальной длины строки: от 45 до 75-85 символов (включая пробелы и знаки пунктуации), с 65 «идеальным» целевым значением.
Используя приблизительную оценку 1rem = 1 символ, мы можем управлять потоком текста для одного столбца контента в подходе, ориентированном на мобильные устройства:
. container {
width: 100%;
}
@media (min-width: 85rem) {
.container {
width: 65rem;
}
}
Однако есть одна интересная деталь о единицах rem и em при использовании в качестве единиц для медиазапросов: они всегда сохраняют одно и то же значение 1rem = 1em = размер шрифта, установленный браузером. Причина такого поведения объясняется в спецификации медиа-запроса (выделение добавлено):
Относительные единицы в медиазапросах основаны на начальном значении, что означает, что единицы никогда не основаны на результатах объявлений. Например, в HTML единица em относится к начальному значению размера шрифта, определяемого пользовательским агентом или настройками пользователя, а не к каким-либо стилям на странице .
Давайте посмотрим быстрый пример такого поведения:
Посмотреть демонстрацию медиа-запросов на CodePen
Во-первых, в нашем HTML у нас есть элемент <span>
Document width: <span></span>px
Далее у нас есть два медиазапроса, один с блоками rem, а другой с em (для простоты используется Sass):
html {
font-size: 62.5%;
@media (min-width: 20rem) {
background-color: lemonchiffon;
font-size: 200%;
}
@media (min-width: 30em) {
background-color: lightblue;
font-size: 300%;
}
}
Наконец, мы используем немного jQuery для отображения ширины области просмотра на странице, обновляя значение при изменении размера окна:
$('span').text($(window).width());
$(window).on('resize', function(e) {
$('span').text($(window).width());
});
Мы начнем с трюка с 62,5%, чтобы показать, что измененный размер корневого шрифта не влияет на значения, используемые для медиазапросов. Изменяя ширину окна браузера, мы можем видеть, что первый медиа-запрос начинает работать с 320px (20 × 16px), а второй становится активным с 480px (30 × 16px). Ни одно из объявленных нами изменений font-size
Единственный способ изменить значения точки останова медиазапроса — изменить размер шрифта по умолчанию в настройках браузера.
По этой причине не имеет значения, используем ли мы единицы em или rem для точек останова медиазапроса. Zurb Foundation (в настоящее время v6.5.3 на момент написания этой статьи) использует единицы em в медиазапросах.
В поисках доступности
Выше мы видели, что возможность масштабирования в зависимости от размера корневого шрифта делает единицы rem очень полезными для доступности. Разработчики Google рекомендуют использовать относительные единицы для определения размера текста .
Люди, стоящие за интернет-архивом, проводят эмпирическое исследование, показывающее, что существует значительное количество пользователей, которые изменяют размер шрифта по умолчанию в настройках браузера. Используя rem и другие относительные единицы, вы уважаете решения пользователей о том, как они хотят просматривать Интернет.
Использование модулей Rem для масштабирования документов
Третье применение, которое мы можем найти для блоков rem, — создание масштабируемых компонентов. Выражая ширину, поля и отступ в единицах rem, становится возможным создать интерфейс, который увеличивается или уменьшается в соответствии с размером корневого шрифта. Давайте посмотрим, как это работает, используя пару примеров.
Использование rem Units для масштабирования документов Demo # 1
В этом первом примере мы меняем размер корневого шрифта с помощью медиа-запросов. Как и в предыдущем разделе, цель состоит в том, чтобы настроить удобство чтения для используемого устройства. Поскольку значения заполнения полей и поля выражаются с использованием rem, весь компонент масштабируется с учетом размера устройства.
Давайте посмотрим на другое:
Во втором примере мы делаем то же самое изменение, используя JavaScript. На этот раз пользователь может контролировать размер интерфейса, подстраивая его под свои нужды. Добавьте способ хранения этих пользовательских значений (используя базу данных, файлы cookie или локальное хранилище), и вы получите базу системы персонализации, основанную на предпочтениях пользователя.
Вывод
На этом мы заканчиваем нашу встречу с CSS rem модулями. Очевидно, что использование этих модулей в нашем коде дает много преимуществ, таких как скорость отклика, масштабируемость, улучшенный опыт чтения и большая гибкость в определении компонентов. Устройства Rem не являются универсальным решением «серебряной пули», но при тщательном развертывании они могут решить многие проблемы, которые раздражали разработчиков в течение многих лет. Каждый из нас должен раскрыть весь потенциал ремов. Запустите свои редакторы, экспериментируйте и делитесь своими результатами с остальными из нас.
Максимально используйте свой текст, понимая, что еще можно сделать с текстовыми значениями CSS. В нашей скриншоте AtoZ CSS: Text and Typography мы рассмотрим свойства текста, свойства шрифта и многое другое.
Это не Конец Света, каким мы его знаем , скорее это еще один путь в пути, который делает разработчиков переднего плана « Блестящими Счастливыми Людьми ».
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.
стратег и практик • Интерьер+Дизайн
Архитектор Рем Колхас (Rem Koolhaas, р.17.11.1944) — записной интеллектуал, притцкеровский лауреат, теоретик, куратор, фаворит модных брендов, автор книг, обязательных к прочтению для продвинутых архитекторов и урбанистов на всех континентах.
По теме: REM: сын об отце
Рем Колхас постоянно пытается делать все иначе, чем принято и привычно. Он по-другому проектирует, неординарно учит студентов, ввел моду на исследовательскую работу (институт AMO). Как проектировщика (бюро OMA) его интересуют урбанистика, коммуникации, изменчивость жизни. Все, что он осуществляет, происходит в модусе переосмысления или как минимум имеет инновационную упаковку. Не просто шаг вперед, скорее скачок на другой уровень.
Fondazione Prada в Милане.РЕМ КОЛХАС
Голландский
архитектор. Глава ОМA
и АМО. Слава пришла к нему в 80-х. Парк ла-Вилетт в Париже (1982), Роттердамский художественный музей (1992), Музей Гуггенхайма в Лас-Вегасе (2002), бутик Prada в Нью-Йорке (2003), Посольство Нидерландов в Берлине (2003), библиотека в Сиэтле (2004), ССТV в Пекине (2007) — его рук дело. Он автор книг, среди которых Delirious New York: A Retroactive Manifesto for Manhattan (1978) и Mutations (2001).
Рем Колхас и Миучча Прада дружат давным-давно (специалистам-архитекторам OMA достаются все проекты реконструкции и строительства зданий Fondazione Prada в Венеции и Милане), официальное сотрудничество AMO и Prada началось с 2007 года, когда междисциплинарные умники Рема Колхаса стали регулярно трудиться над лукбуками и оформлением подиумных показов Prada.
Музей современного искусства «Гараж», Москва.Звезда мировой архитектуры лично открывал новое здание Музея «Гараж» в Парке Горького. При его непосредственном участии создавался Институт медиа, архитектуры и дизайна «Стрелка». В 2012 году вышел русский перевод его бестселлера 1978 года «Нью-Йорк вне себя: ретроактивный манифест Манхэттена». Как пошутил Колхас, это «работа, в том числе, о России, но немного и французская, написанная голландцем по-английски». Долгие годы анонсировалось участие Колхаса в грандиозной реконструкции Государственного Эрмитажа, в результате долгих отсрочек и согласований проект изменился, коллаборация отложилась, но имя Колхаса надолго засело в ушах россиян. В общем, архитектор он нам не чужой, но от того не менее удивительный.
Штаб-квартира Центрального ТВ Китая в Пекине ССTV HQ. 2009.Штаб-квартира Центрального ТВ Китая в Пекине ССTV HQ. 2009.
Голландец Колхас начинал карьеру как журналист: писал киносценарии и статьи для местной газеты «Гаагская почта». Однажды его послали на интервью к художнику Константу. Колхас, пораженный архитектурной утопией Константа «Новый Вавилон», решил оставить писательскую карьеру и отправился в Лондон изучать архитектуру. А затем в Нью-Йорк к Освальду Маттиасу Унгерсу — на практику. В середине 1970-х он организовал бюро ОМА («Офис городской архитектуры»), основная цель которого — позиционирование архитектуры в контексте актуальной культурной ситуации. В дополнение к офису в Нью-Йорке появилась главная штаб-квартира в Роттердаме. А несколько лет спустя Колхас признал, что практика без теории неубедительна, и открыл еще одну контору — АМО, где, как в настоящем научно-исследовательском институте, собрал профессионалов: социологов, урбанистов, математиков, дизайнеров и т. д. Отряд интеллектуалов кропотливо отслеживает социальные, технологические, медиальные, политические и коммерческие инновации.
Комплекс Food Port в Луисвилле, Кентукки, США.В общей сложности в НИИ AMO под руководством Колхаса сегодня работают 220 сотрудников из 35 стран мира. Рациональный мастер ко всему подходит серьезно. И свято следует традиции. Как Рембрандт в своей мастерской, Колхас имеет право на «первый мазок». Гениальный подмалевок дописывают шесть архитекторов-партнеров, которые, однако, могут предлагать и собственные проекты. Каждое предложение тщательно изучается в АМО. Умные мальчики исследуют предпосылки, историю, антропологические тенденции и социальные задачи, и только потом Рем и его команда реализуют проект. Например, палаццо Фондако деи Тедески переделывалось множество раз, и, прежде чем приступить к его реконструкции, штату Колхаса пришлось несколько лет изучать историю постройки.
Студия Cai Guo-Qiang’s в Нью-Йорке. Переделка школьного здания.Конечно, Рем Колхас привлек большое внимание, выступив в 2014 году в качестве куратора XIV Архитектурной биеннале. Мэтра много раз приглашали, он отказывался из-за невозможности подчинить своей исследовательской воле большое количество архитекторов за два года. И вот наконец согласился, ибо придумал концепцию, позволяющую заставить других двигаться в нужном ему направлении, укладываясь в срок. Он придумал трехчастную историю. В проекте «Основы» (Fundamentals) три части: Absorbing Modernity 1914–2014 («Впитывая современность»), Elements of Architecture («Элементы архитектуры») и Monditalia. Все три экспозиции проливали свет на прошлое и будущее архитектуры. Колхас говорит, что после нескольких биеннале, посвященных актуальной архитектуре, «Основы» yмеренно обращены к прошлому, конечно, с попыткой исследовать настоящее и вообразить будущее. «Впитывая современность» — приглашение ко всем странам-участницам биеннале показать XX век; то, как архитектура страны адаптировала универсальный язык дизайна.
McCormick Tribune Center. IIT кампус. Чикаго. 2003.«Переход к глобальной архитектуре — процесс более сложный, чем принято думать, потому что связан со столкновениями культур, изобретений, технологий и чего-то незначительного национального. Мы живем в очень плоском цифровом мире, в котором все доступно, но остается все меньше и меньше памяти. Мы, в некотором роде, приговорены к «постоянному настоящему». Именно поэтому мне показалось, что важно вернуться в прошлое к невероятному богатству того, что сейчас кажется банальным, — к дверям, лестницам, стенам. Хочу заявить о том, как много истории содержит наша профессия. Как много скрытых и неосознанных ожиданий до сих пор сосредоточено в архитектуре. Думаю, это история, о которой мы едва догадываемся».
Центральная библиотека Сиэтла, 2004. Интерьер.Итак, почему Колхас вошел в десятку крупнейших архитекторов мира? За умение в свои 70 с небольшим думать, что лучшее все еще впереди, считывать быстро меняющийся мир и за способность идеально к нему приспосабливаться.
Таблица соответствия PX и REM
Единица rem — это смесь px и em. rem задаёт размер относительно размера шрифта элемента <html>. 1 rem = 16px.
10px | 0.625rem |
11px | 0.6875rem |
12px | 0.75rem |
13px | 0.8125rem |
14px | 0.875rem |
15px | 0.9375rem |
16px | 1rem |
17px | 1.0625rem |
18px | 1.125rem |
19px | 1.1875rem |
20px | 1.25rem |
21px | 1.3125rem |
22px | 1.375rem |
23px | 1.4375rem |
24px | 1.5rem |
25px | 1.5625rem |
26px | 1.625rem |
27px | 1.6875rem |
28px | 1.75rem |
29px | 1.8125rem |
30px | 1.875rem |
31px | 1.9375rem |
32px | 2rem |
33px | 2.0625rem |
34px | 2.125rem |
35px | 2.1875rem |
36px | 2.25rem |
37px | 2.3125rem |
38px | 2.375rem |
39px | 2.4375rem |
40px | 2.5rem |
41px | 2.5625rem |
42px | 2.625rem |
43px | 2.6875rem |
44px | 2.75rem |
45px | 2.8125rem |
46px | 2.875rem |
47px | 2.9375rem |
48px | 3rem |
49px | 3.0625rem |
50px | 3.125rem |
51px | 3.1875rem |
52px | 3.25rem |
53px | 3.3125rem |
54px | 3.375rem |
55px | 3.4375rem |
56px | 3.5rem |
57px | 3.5625rem |
58px | 3.625rem |
59px | 3.6875rem |
60px | 3.75rem |
61px | 3.8125rem |
62px | 3.875rem |
63px | 3.9375rem |
64px | 4rem |
P.S. rem не поддерживается в IE8-.
Rem в CSS: понимание и использование единиц rem
Получите глубокое понимание единиц rem в CSS , относительной единицы измерения размера с отличной поддержкой браузера, и узнайте, как их эффективно использовать.
Что такое единицы rem?
Вы могли встретить термин «R.E.M.» перед прослушиванием радио или музыкального плеера. В отличие от своих музыкальных аналогов, названных в честь «Быстрого движения глаз» во время глубокого сна, в CSS rem означает «root em». Они не заставят вас потерять религию или поверить в человека на Луне.Что они могут сделать, так это помочь вам добиться гармоничного и сбалансированного дизайна.
Согласно спецификации W3C определение одной единицы rem:
Равно вычисленному значению
font-size
для корневого элемента. Если указано в свойствеfont-size
корневого элемента, единицы rem относятся к начальному значению свойства.
Это означает, что 1rem
равно размеру шрифта элемента html
(который для большинства браузеров имеет значение по умолчанию 16 пикселей).
единиц Rem и единиц Em
Основная проблема с единицами em заключается в том, что они зависят от размера шрифта своего собственного элемента. Как таковые, они могут каскадировать и вызывать неожиданные результаты. Давайте рассмотрим следующий пример, в котором мы хотим, чтобы списки имели размер шрифта 12 пикселей,
, в случае, когда размер корневого шрифта по умолчанию 16 пикселей
:
html {
размер шрифта: 100%;
}
ul {
размер шрифта: 0,75em;
}
Если у нас есть список, вложенный в другой список, размер шрифта внутреннего списка будет 75% от размера его родительского (в данном случае 9px
).Мы все еще можем решить эту проблему, используя что-то вроде этого:
ul ul {
размер шрифта: 1em;
}
Это помогает, однако мы все равно должны уделять много внимания ситуациям, когда вложение становится еще глубже.
С единицами rem все проще:
html {
размер шрифта: 100%;
}
ul {
размер шрифта: 0,75 бэр;
}
Поскольку все размеры указываются исходя из размера корневого шрифта, больше нет необходимости описывать случаи вложения в отдельных объявлениях.
Изменение размера шрифта с использованием удаленных блоков
Одним из пионеров использования модулей rem для изменения размера шрифта является Джонатан Снук, опубликовавший в мае 2011 года статью «Размер шрифта с помощью REM». Как и многим другим разработчикам CSS, ему пришлось столкнуться с проблемами, которые модули em создают в сложных макетах.
В то время более старые версии IE все еще имели большую долю рынка, и они не могли масштабировать текст размером в пиксели. Однако, как мы видели ранее, очень легко потерять из виду вложенность и получить неожиданные результаты с модулями em.
Основная проблема с использованием rem для изменения размера шрифта состоит в том, что значения довольно сложно использовать. Давайте посмотрим на пример некоторых распространенных размеров шрифтов, выраженных в единицах rem, конечно, при условии, что базовый размер равен 16px:
- 10 пикселей = 0,625 бэр
- 12 пикселей = 0,75 бэр
- 14 пикселей = 0,875 бэр
- 16 пикселей = 1 бэр (базовый)
- 18 пикселей = 1,125 бэр
- 20 пикселей = 1,25 бэр
- 24 пикселя = 1,5 бэр
- 30 пикселей = 1,875 бэр
- 32 пикселя = 2 бэр
Как видим, эти значения не очень удобны для расчетов.По этой причине Снук использовал уловку под названием « 62,5% ». Это ни в коем случае не было новым открытием, так как оно уже использовалось с модулями em:
body {font-size: 62,5%; }
h2 {размер шрифта: 2.4em; }
п {размер шрифта: 1.4em; }
ли {размер шрифта: 1.4em; }
Поскольку единицы rem относятся к корневому элементу, вариант решения Snook выглядит следующим образом:
html {размер шрифта: 62,5%; }
body {font-size: 1.4rem; }
h2 {размер шрифта: 2,4 бэр; }
Также нужно было учитывать другие браузеры, не поддерживающие rem.Таким образом, приведенный выше код на самом деле был бы записан так:
html {
размер шрифта: 62,5%;
}
тело {
размер шрифта: 14 пикселей;
размер шрифта: 1,4 бэр;
}
h2 {
размер шрифта: 24 пикселя;
размер шрифта: 2,4 бэр;
}
Хотя это решение кажется близким к статусу «золотого правила», есть люди, которые советуют не использовать его вслепую. Гарри Робертс пишет свой собственный взгляд на использование единиц rem. По его мнению, хотя решение 62,5% упрощает вычисления (поскольку размеры шрифта в пикселей
в 10 раз больше их значений rem), оно в конечном итоге вынуждает разработчиков явно переписывать все размеры шрифтов на своем веб-сайте.
Третье мнение принадлежит Крису Койе из CSS-Tricks. Его решение использует все три единицы, с которыми мы столкнулись до сих пор. Он сохраняет корневой размер, определенный как пикселей,
, модули, определенные с помощью единиц rem, а элементы внутри модулей, размером с em. Такой подход упрощает управление глобальным размером, который масштабирует тип в модулях, в то время как содержимое модуля масштабируется на основе самого размера шрифта модуля. Луи Лазарис обсуждал эту последнюю концепцию в книге «Сила единиц измерения в CSS».
В приведенном ниже примере вы можете увидеть, как будет выглядеть подход Криса:
См. Метод Pen One для использования ems и rem в CSS от SitePoint (@SitePoint) на CodePen.
На практике существуют основные фреймворки, такие как Bootstrap 4 и рекомендации по материальному дизайну, которые используют единицы rem для изменения размера текстового содержимого.
Особо следует упомянуть Material-UI, очень популярный набор компонентов React. Они не только изменяют размер текста, но также предлагают механизм для реализации «упрощения на 10 пикселей», о котором мы упоминали выше.
Другой недавний проект, Every Layout, очень вдохновляет сочетанием единиц em и rem. Он ближе всего к схеме модели Криса Койера, описанной ранее, и в нем используются единицы измерения em, чтобы выделить встроенные элементы, такие как значки SVG, промежутки или другие подобные элементы.
Как видите, «серебряной пули» не существует. Возможные комбинации ограничены только фантазией разработчиков.
Использование единиц em или rem внутри медиа-запросов тесно связано с понятием «оптимальной длины строки» и тем, как она влияет на восприятие чтения. В сентябре 2014 года журнал Smashing Magazine опубликовал подробное исследование веб-типографики под названием «Размер имеет значение: баланс длины строки и размера шрифта в адаптивном веб-дизайне». Помимо прочего, в статье дается оценка оптимальной длины строки: от 45 до 75-85 символов (включая пробелы и знаки препинания), при этом 65 — «идеальное» целевое значение.
Используя приблизительную оценку 1rem = 1 символ, мы можем управлять потоком текста для одного столбца контента в подходе, ориентированном на мобильные устройства:
.container {
ширина: 100%;
}
@media (min-width: 85rem) {
.container {
ширина: 65бэр;
}
}
Однако есть одна интересная деталь о единицах rem и em, когда они используются в качестве единиц для медиа-запросов: они всегда сохраняют одно и то же значение 1rem = 1em = размер шрифта, установленный браузером. Причина такого поведения объясняется в спецификации медиа-запроса (выделено мной):
Относительные единицы в медиа-запросах основаны на начальном значении, что означает, что единицы никогда не основываются на результатах объявлений.Например, в HTML единица em определяется начальным значением font-size, определяемым пользовательским агентом или предпочтениями пользователя, а не стилем на странице .
Давайте посмотрим на быстрый пример этого поведения:
Посмотреть демонстрацию медиа-запросов на CodePen
Во-первых, в нашем HTML у нас есть элемент
, в котором мы будем писать ширину области просмотра:
Ширина документа: px
Далее у нас есть два медиа-запроса, один с единицами rem, а другой с единицами em (для простоты используется Sass):
html {
размер шрифта: 62.5%;
@media (min-width: 20rem) {
цвет фона: лимонно-шифон;
размер шрифта: 200%;
}
@media (min-width: 30em) {
цвет фона: светло-голубой;
размер шрифта: 300%;
}
}
Наконец, мы используем немного jQuery для отображения ширины области просмотра на странице, обновляя значение при изменении размера окна:
$ ('диапазон'). Текст ($ (окно). Ширина ());
$ (window) .on ('изменить размер', function (e) {
$ ('диапазон'). текст ($ (окно). ширина ());
});
Начнем с трюка 62.5% , чтобы показать, что измененный размер корневого шрифта не влияет на значения, используемые для медиа-запросов.Когда мы изменяем ширину окна браузера, мы видим, что первый медиа-запрос запускается с разрешением 320 пикселей (20 × 16 пикселей), а второй становится активным с разрешением 480 пикселей (30 × 16 пикселей). Ни одно из объявленных нами изменений размера шрифта
не повлияло на точки останова. Единственный способ изменить значения точки останова медиа-запроса — изменить размер шрифта по умолчанию в настройках браузера.
По этой причине не имеет значения, используем ли мы единицы em или rem для точек останова медиа-запроса. Zurb Foundation (в настоящее время v6.5.3 на момент написания) использует единицы em в медиа-запросах.
В поисках доступности
Выше мы видели, что возможность масштабирования на основе размера корневого шрифта делает единицы rem очень полезными для доступности. Разработчики Google рекомендуют использовать относительные единицы измерения размера текста.
Авторы Internet Archive провели эмпирическое исследование, показывающее, что значительное количество пользователей меняют размер шрифта по умолчанию в настройках браузера.Используя rem и другие относительные единицы, вы уважаете решения пользователей о том, как они хотят просматривать веб-страницы.
Использование единиц rem для масштабирования документов
Третье применение, которое мы можем найти для модулей rem, — это создание масштабируемых компонентов. Выражая ширину, поля и отступы в единицах rem, становится возможным создать интерфейс, который увеличивается или уменьшается в соответствии с размером корневого шрифта. Давайте посмотрим, как это работает, на нескольких примерах.
Использование модулей rem для масштабирования документов. Демонстрация № 1
В этом первом примере мы изменяем размер корневого шрифта с помощью медиа-запросов.Как и в предыдущем разделе, цель состоит в том, чтобы настроить удобство чтения для используемого устройства. Поскольку значения заполнения и поля элементов выражаются с помощью rem, весь компонент масштабируется в соответствии с размером устройства.
Посмотрим еще:
См. Раздел «Динамическое изменение размеров модулей с модулями Rem» от SitePoint (@SitePoint) на CodePen.
Во втором примере мы делаем то же изменение, используя JavaScript. На этот раз пользователь может контролировать размер интерфейса, настраивая его под свои нужды.Добавьте способ хранения этих пользовательских значений (с использованием базы данных, файлов cookie или локального хранилища), и у вас будет база для системы персонализации, основанной на предпочтениях пользователя.
Заключение
На этом мы заканчиваем нашу встречу с модулями rem в CSS. Очевидно, что использование этих модулей в нашем коде дает много преимуществ, таких как отзывчивость, масштабируемость, улучшенное чтение и большая гибкость при определении компонентов. Модули Rem не являются универсальным решением, но при тщательном развертывании они могут решить многие проблемы, которые раздражали разработчиков в течение многих лет.Каждый из нас должен раскрыть весь потенциал бэма. Запустите своих редакторов, экспериментируйте и поделитесь своими результатами с остальными.
Подробнее о калибровочных единицах CSS см .:
значений и единиц CSS — Изучите веб-разработку
Каждое свойство, используемое в CSS, имеет тип значения, определяющий набор значений, разрешенных для этого свойства. Просмотр любой страницы свойств в MDN поможет вам понять значения, связанные с типом значения, которые действительны для любого конкретного свойства.В этом уроке мы рассмотрим некоторые из наиболее часто используемых типов значений, а также их наиболее распространенные значения и единицы измерения.
В спецификациях CSS и на страницах свойств здесь, в MDN, вы сможете определять типы значений, поскольку они будут заключены в угловые скобки, например <цвет>
или <длина>
. Когда вы видите тип значения
как допустимый для определенного свойства, это означает, что вы можете использовать любой допустимый цвет в качестве значения для этого свойства, как указано на справочной странице
.
Примечание : вы также увидите значения CSS, называемые типами данных . Термины в основном взаимозаменяемы — когда вы видите что-то в CSS, называемое типом данных, на самом деле это просто причудливый способ обозначить тип значения. Термин значение относится к любому конкретному выражению, поддерживаемому выбранным вами типом значения.
Примечание : Да, типы значений CSS обычно обозначаются угловыми скобками, чтобы отличать их от свойств CSS (например,грамм. свойство color
по сравнению с типом данных
В следующем примере мы установили цвет нашего заголовка с помощью ключевого слова, а фон с помощью функции rgb ()
:
h2 {
черный цвет;
цвет фона: rgb (197,93,161);
}
Тип значения в CSS — это способ определения набора допустимых значений.Это означает, что если вы видите
как допустимое, вам не нужно задумываться, какие из различных типов значений цвета можно использовать — ключевые слова, шестнадцатеричные значения, функции rgb (),
и т. Д. Вы можете использовать любые доступных значений <цвет>
, если они поддерживаются вашим браузером. Страница в MDN для каждого значения предоставит вам информацию о поддержке браузером. Например, если вы посмотрите на страницу
, вы увидите, что в разделе совместимости браузера перечислены различные типы значений цвета и их поддержка.
Давайте рассмотрим некоторые типы значений и единиц, с которыми вы часто можете столкнуться, с примерами, чтобы вы могли опробовать различные возможные значения.
Существуют различные типы числовых значений, которые вы можете использовать в CSS. Все следующие числа классифицируются как числовые:
Тип данных | Описание |
---|---|
<целое число> | <целое число> — это целое число, например 1024 или -55 . |
<номер> | <число> представляет собой десятичное число — оно может иметь или не иметь десятичную точку с дробной составляющей. Например, 0,255 , 128 или -1,2 . |
<размер> | A <размер> — это <номер> с прикрепленным к нему блоком. Например, 45deg , 5s или 10px . — это зонтичная категория, которая включает типы , , и . |
<процент> | A <процент> представляет собой часть некоторого другого значения. Например, 50% . Значения в процентах всегда относятся к другому количеству. Например, длина элемента зависит от длины его родительского элемента. |
Длина
Чаще всего вы встретите числовой тип <длина>
. Например, 10px
(пикселей) или 30em
. В CSS используются два типа длины — относительная и абсолютная. Важно знать разницу, чтобы понять, насколько масштабными станут вещи.
Единицы абсолютной длины
Ниже приведены все абсолютных единиц длины — они не связаны ни с чем другим и обычно считаются всегда одного размера.
Установка | Имя | Эквивалент |
---|---|---|
см | Сантиметров | 1 см = 38 пикселей = 25/64 дюйма |
мм | Миллиметров | 1 мм = 1/10 1 см |
Q | Четверть миллиметра | 1Q = 1/40 1 см |
дюйм | дюймов | 1 дюйм = 2.54 см = 96 пикселей |
шт | Picas | 1 шт. = 1/6 от 1 из |
пт | Очки | 1pt = 1/72 от 1 из |
пикселей | пикселей | 1 пиксель = 1/96 от 1 дюйма |
Большинство из этих единиц более полезны при использовании для печати, чем для вывода на экран. Например, мы обычно не используем на экране см и
(сантиметры).Единственное значение, которое вы обычно будете использовать, — пикселей
(пикселей).
Единицы относительной длины
Единицы относительной длины относятся к чему-то еще, например к размеру шрифта родительского элемента или размеру области просмотра. Преимущество использования относительных единиц заключается в том, что при некотором тщательном планировании вы можете сделать так, чтобы размер текста или других элементов масштабировался относительно всего остального на странице. Некоторые из наиболее полезных модулей для веб-разработки перечислены в таблице ниже.
Установка | относительно |
---|---|
выс. | Размер шрифта родительского элемента, в случае типографских свойств, таких как font-size , и размер шрифта самого элемента, в случае других свойств, таких как ширина . |
пр. | x-высота шрифта элемента. |
шасси | Предварительная мера (ширина) глифа «0» шрифта элемента. |
рем | Размер шрифта корневого элемента. |
слева | Высота строки элемента. |
VW | 1% ширины области просмотра. |
vh | 1% высоты области просмотра. |
vmin | 1% меньшего размера области просмотра. |
vmax | 1% от большего размера области просмотра. |
Изучение примера
В приведенном ниже примере вы можете увидеть, как ведут себя некоторые единицы относительной и абсолютной длины. Первый блок имеет ширину
в пикселях. Как абсолютная единица измерения, эта ширина останется неизменной вне зависимости от того, что еще изменится.
Ширина второго окна устанавливается в единицах vw
(ширина области просмотра). Это значение относится к ширине области просмотра, поэтому 10vw составляет 10 процентов ширины области просмотра. Если вы измените ширину окна браузера, размер поля должен измениться.Однако этот пример встроен в страницу с использованием
, поэтому это не сработает. Чтобы увидеть это в действии, вам нужно будет попробовать этот пример, открыв его на отдельной вкладке браузера.
В третьем ящике используются единицы После выполнения приведенных выше инструкций попробуйте поиграть со значениями другими способами, чтобы увидеть, что вы получите. HTML — это набор вложенных списков — всего у нас есть три списка, и оба примера имеют один и тот же HTML. Единственное отличие состоит в том, что первый имеет класс ems , а второй — класс rems . Для начала мы установили размер шрифта 16 пикселей в элементе Напомним, что em-единица означает «размер шрифта моего родительского элемента» в случае типографики. Элементы Напомним, что rem означает «размер шрифта корневого элемента» . (rem означает «root em».) Элементы Однако, если вы измените размер шрифта Во многих случаях процентная доля обрабатывается так же, как и длина. Дело в том, что проценты всегда устанавливаются относительно некоторого другого значения. Например, если вы установите для элемента В приведенном ниже примере два блока с процентным размером и два блока с размером пикселя имеют одинаковые имена классов. Оба набора имеют ширину 200 пикселей и 40% соответственно. Разница в том, что второй набор из двух блоков находится внутри оболочки шириной 400 пикселей. Второе поле шириной 200 пикселей имеет ту же ширину, что и первое, но второе поле 40% теперь составляет 40% от 400 пикселей - намного уже, чем первое! Попробуйте изменить ширину оболочки или процентное значение, чтобы увидеть, как это работает. В следующем примере размер шрифта установлен в процентах. Каждый Обратите внимание, что, хотя многие типы значений принимают длину или процентное соотношение, есть некоторые, которые принимают только длину. Вы можете увидеть, какие значения принимаются на справочных страницах свойств MDN. Если допустимое значение включает Некоторые типы значений принимают числа без добавления к ним единиц измерения. Примером свойства, которое принимает безразмерное число, является свойство В приведенном ниже примере попробуйте изменить значение Примечание : когда вы используете число в CSS в качестве значения, его не следует заключать в кавычки. Есть много способов указать цвет в CSS, некоторые из которых реализованы позже, чем другие. Одни и те же значения цвета могут использоваться везде в CSS, независимо от того, указываете ли вы цвет текста, цвет фона или что-то еще. Стандартная система цветности, доступная в современных компьютерах, - 24 бита, что позволяет отображать около 16 цветов.7 миллионов различных цветов с помощью комбинации различных красных, зеленых и синих каналов с 256 различными значениями на канал (256 x 256 x 256 = 16 777 216). Давайте посмотрим на некоторые способы, которыми мы можем указать цвета в CSS. Примечание : В этом руководстве мы рассмотрим общие методы указания цвета, которые хорошо поддерживаются браузером; есть и другие, но они не имеют такой хорошей поддержки и встречаются реже. Довольно часто в примерах здесь, в разделе обучения или где-либо еще на MDN, вы увидите используемые ключевые слова цвета, поскольку они представляют собой простой и понятный способ указания цвета.Есть несколько этих ключевых слов, некоторые из которых имеют довольно забавные названия! Вы можете увидеть полный список на странице для типа значения Попробуйте поиграть с разными значениями цвета в живых примерах ниже, чтобы лучше понять, как они работают. Следующий тип значения цвета, с которым вы, вероятно, столкнетесь, - это шестнадцатеричные коды. Каждое шестнадцатеричное значение состоит из символа решетки / фунта (#), за которым следуют шесть шестнадцатеричных чисел, каждое из которых может принимать одно из 16 значений от 0 до f (что соответствует 15) - так что Эти значения немного сложнее и труднее для понимания, но они намного более универсальны, чем ключевые слова - вы можете использовать шестнадцатеричные значения для представления любого цвета, который вы хотите использовать в своей цветовой схеме. Снова попробуйте изменить значения, чтобы увидеть, как меняются цвета. Третья схема, о которой мы здесь поговорим, - это RGB.Значение RGB - это функция - Давайте перепишем наш последний пример, чтобы использовать цвета RGB: Вы также можете использовать цвета RGBA - они работают точно так же, как цвета RGB, поэтому вы можете использовать любые значения RGB.Однако есть четвертое значение, которое представляет альфа-канал цвета, который контролирует непрозрачность. Если вы установите это значение на Примечание : установка альфа-канала для цвета имеет одно ключевое отличие от использования свойства В приведенном ниже примере я добавил фоновое изображение в содержащий блок наших цветных блоков. Затем я установил для полей разные значения непрозрачности - обратите внимание, как фон больше просвечивает, когда значение альфа-канала меньше. В этом примере попробуйте изменить значения альфа-канала, чтобы увидеть, как это влияет на вывод цвета. Примечание : в какой-то момент современные браузеры были обновлены, так что Чуть менее хорошо поддерживается, чем RGB, цветовая модель HSL (не поддерживается в старых версиях IE), которая была реализована после большого интереса со стороны дизайнеров. Вместо значений красного, зеленого и синего цветов функция Мы можем обновить пример RGB, чтобы использовать цвета HSL следующим образом: Так же, как RGB имеет RGBA, HSL имеет эквивалент HSLA, который дает вам такую же возможность указывать альфа-канал.Я продемонстрировал это ниже, изменив свой пример RGBA, чтобы использовать цвета HSLA. Вы можете использовать любые из этих значений цвета в своих проектах. Вероятно, что для большинства проектов вы выберете цветовую палитру, а затем будете использовать эти цвета - и выбранный вами метод определения цвета - на протяжении всего проекта. Вы можете смешивать и сопоставлять цветовые модели, однако для единообразия лучше всего, если весь ваш проект будет использовать одну и ту же! Тип значения В приведенном ниже примере мы продемонстрировали изображение и градиент, используемые в качестве значения для свойства фонового изображения CSS Примечание : есть и другие возможные значения для Тип значения Типичное значение позиции состоит из двух значений: первое задает положение по горизонтали, второе - по вертикали.Если вы укажете значения только для одной оси, другая по умолчанию будет В следующем примере мы разместили фоновое изображение на 40 пикселей сверху и справа от контейнера с помощью ключевого слова. Поэкспериментируйте с этими значениями, чтобы увидеть, как можно перемещать изображение. В приведенных выше примерах мы видели места, где ключевые слова используются в качестве значения (например, Есть места, где вы используете строки в CSS. Например, при указании сгенерированного контента. В этом случае значение приводится в кавычки, чтобы продемонстрировать, что это строка. В приведенном ниже примере мы используем ключевые слова без кавычек вместе со строкой сгенерированного содержимого в кавычках. Последний тип значения, который мы рассмотрим, - это группа значений, известная как функции.В программировании функция - это многократно используемый раздел кода, который можно запускать несколько раз для выполнения повторяющейся задачи с минимальными усилиями как со стороны разработчика, так и со стороны компьютера. Функции обычно связаны с такими языками, как JavaScript, Python или C ++, но они существуют и в CSS как значения свойств. Мы уже видели функции в действии в разделе «Цвета» - Значение, которое больше похоже на то, что вы можете найти в традиционном языке программирования, - это CSS-функция Например, ниже мы используем В этой статье мы рассмотрели многое, но можете ли вы вспомнить самую важную информацию? Вы можете найти дополнительные тесты, чтобы убедиться, что вы сохранили эту информацию, прежде чем двигаться дальше - см. Проверка своих навыков: значения и единицы. Это был краткий обзор наиболее распространенных типов значений и единиц, с которыми вы можете столкнуться. Вы можете ознакомиться со всеми различными типами на справочной странице значений и единиц CSS; вы столкнетесь со многими из них, когда будете работать над этими уроками. Главное помнить, что каждое свойство имеет определенный список допустимых типов значений, и каждый тип значения имеет определение, объясняющее, что это за значения. Затем вы можете найти подробности здесь, в MDN. Например, понимание того, что Хотя в этом руководстве содержится контент, который, по нашему мнению, принесет большую пользу нашему сообществу, мы еще не тестировали или
отредактировал его, чтобы обеспечить безошибочное обучение. Это в нашем списке, и мы над этим работаем!
Вы можете помочь нам, нажав кнопку «сообщить о проблеме» в нижней части руководства. У нас есть много хороших вариантов, когда дело доходит до единиц в CSS. В современном мире адаптивного дизайна относительные единицы, такие как em или rem, дают нам возможность адаптации и гибкости прямо из коробки, что позволяет определять размеры на основе размеров шрифта, определенных выше в разметке. Вы, вероятно, уже какое-то время используете единицы em и rem, но вы, возможно, задаетесь вопросом о точной разнице между ними и о том, какая единица лучше подходит для ваших вариантов использования.Давайте разберемся как можно короче. Сводка: em для свойства font-size будут относиться к font-size родительского элемента. Единицы em для других свойств, кроме font-size, будут относиться к font-size текущего элемента. Размеры единиц rem всегда будут относиться к размеру шрифта корневого элемента em заимствовано из мира типографики, и это единица, позволяющая установить размер шрифта элемента относительно размера шрифта его родительского элемента. Возьмем этот простой пример: В этом примере у дочернего элемента будет размер шрифта 27 пикселей (1,5 * 18 пикселей = 27 пикселей). Если в родительском элементе не указано значение font-size, значение будет искать выше в дереве DOM. Если размер шрифта не указан на всем протяжении вплоть до корневого элемента ( Довольно просто и понятно, правда? Однако единицы em могут использоваться не только для установки размера шрифта, и их можно использовать практически везде, где ожидаются единицы (отступы, поля, ширина, высота, максимальная ширина, ... вы понимаете!) Когда единицы em используются в свойствах, отличных от font-size, значение определяется относительно собственного font-size элемента. Добавим к нашему примеру: Помните: когда единицы em используются для font-size, размер зависит от font-size родительского элемента. При использовании в других свойствах он зависит от размера шрифта самого элемента. Пока все хорошо с использованием модуля em, но проблема может возникнуть из-за того, что модуль может соединяться от одного уровня к другому. Давайте сохраним аналогичный базовый пример: Но давайте использовать его в нашей разметке так: У меня 120 пикселей, теперь у нас действительно проблемы! Итак, как вы можете видеть, эффект единиц em может усугубляться, когда несколько элементов размера em-font находятся внутри друг друга.Это может стать проблемой и привести к непредвиденным последствиям в ваших проектах. Эта проблема является причиной создания модуля rem. Единица rem, сокращенно от root em, является относительной единицей, которая всегда будет основываться на значении font-size для корневого элемента, которым является элемент Это означает, что при использовании единицы rem игнорируются значения родительских элементов и учитывается только значение корня. Аналогичный пример, но в rem: У меня 32 пикселя, как по маслу! Как видите, использование единиц rem позволяет избежать эффекта сложения единиц em.С rem все всегда и последовательно основывается на размере шрифта или корневом элементе, поэтому нет никаких сюрпризов. То же самое относится и к другим значениям, кроме font-size (margin, padding,…). Использование единиц rem для них по-прежнему будет относиться к размеру шрифта корневого элемента. На самом деле нет лучшего устройства, и все зависит от ваших личных предпочтений. Некоторым людям нравится разрабатывать все в единицах rem для согласованности и предсказуемости, в то время как другим нравится также использовать единицы em в местах, где влияние соседних родительских элементов имело бы смысл. Мы уже знакомы с использованием пикселей для изменения размера в CSS, но зачем использовать em или rem ? Создавая доступные веб-сайты, вы должны учитывать их включение. Когда вы используете px , вы не ставите предпочтения пользователя во главу угла.
Когда пользователь увеличивает масштаб или изменяет настройку шрифта браузера, веб-сайты должны настраиваться в соответствии с настройками пользователя. Как продолжение этого, рекомендуется устанавливать размер шрифта элемента html в процентах. Предполагая, что размер шрифта браузера установлен на 16 пикселей (т. Е. По умолчанию), установка размера шрифта элемента html (корневого) на 62,5% будет по умолчанию 1rem равным 10 пикселей. Возможно, вы какое-то время использовали единицы CSS пикселей ( ( Вычисленное значение пикселя для единицы Вычисленное значение пикселя в единицах С единицей Unit = Размер шрифта стилизуемого элемента x Заданное значение стилизуемого элемента Для элемента section с размером шрифта При использовании Unit = Размер шрифта корневого элемента html x Заданное значение стилизуемого элемента Для веб-страницы, корневому элементу которой назначен размер шрифта Когда наследование применяется к элементам CSS Единица = Размер шрифта стилизуемого элемента x Размер шрифта родительского и родительского элементов (если есть) x Указанное значение стилизуемого элемента Чтобы вычислить значение Раздел с классом По-видимому, значение заполнения, указанное в контейнере Если класс контейнера значение заполнения будет вычислено как: Размер шрифта родительского элемента (html) x размер шрифта раздела (page-wrapper) x размер шрифта div (контейнера) x значение заполнения Это будет равно 57,6 пикселей (16 x 1,5 x 1,5 x 2 = 72). Чтобы переопределить это унаследованное значение, вам необходимо явно установить единицу стилизованного элемента на Например, Со стилем: Обратите внимание, что значение размера шрифта Вычисляется как: При использовании Размер шрифта, установленный в браузере пользователем, может повлиять на значение, когда в веб-приложении используется единица CSS В примере ниже размер шрифта элемента с именем класса Когда значение шрифта Например, если элемент html веб-сайта имеет свойство font-size, установленное на 1,5em, а размер шрифта браузера установлен на 14 пикселей, вычисленное значение пикселя корневого элемента будет 1,5 x 14 = 21 пиксель. Рекомендуется установить размер шрифта элемента html в процентах. Это решает проблему. Предполагая, что размер шрифта браузера установлен на 16 пикселей (т. Е. По умолчанию), установка размера шрифта корневого элемента html на 100% будет по умолчанию 1rem равным 16 пикселей.Это все еще не оптимальное решение. Лучше использовать 62,5%. Это будет равняться 1 бэр на 10 пикселей. Начиная с этого, поскольку база упрощает расчеты. Для браузеров, которые не поддерживают использование rem, вы можете использовать миксин SCSS или предоставить запасной вариант. Один из лучших способов типографики в Интернете — использовать относительные единицы, такие как Вопрос в том, , что использовать ? Между сторонниками В этой статье вы найдете мой взгляд на Это утверждение не имеет смысла в Интернете, поскольку мы не используем размер Это означает: Единица Рассмотрим следующее: Каков фактический размер селектора Мы должны взглянуть на родительский элемент, чтобы вычислить размер шрифта Таким образом, мы видим, что вычисленное значение Хотя это возможно, часто плохая идея устанавливать Вместо этого вы можете выбрать использование Примечание. Для большинства пользователей (и браузеров) размер шрифта Хорошо, пока? Вернемся к Именно здесь многие люди начинают путаться со значениями Рассмотрим следующий код.Каким должно быть значение Вы удивлены, что вычисленное значение Это явление возникает из-за того, что Люди сбивают с толку то, что Во всяком случае, это Это единица типографики, равная корню Рассмотрим тот же код выше, но вместо него записан в Как видите, Это надежно. Это просто понять. Это А теперь перейдем к сути этой статьи. Это очень спорно. Некоторые разработчики полностью избегают Как ни странно, я попал в ловушку только Оказывается, Как? У меня два простых правила : Слишком просто? Что ж, давайте рассмотрим написание простого компонента (элемента заголовка) с использованием Допустим, у вас есть элемент заголовка ( Стили заголовка должны быть похожи на следующие, если размер всего установлен в Пока все хорошо. Затем давайте создадим элемент заголовка немного большего размера, поскольку на одном и том же веб-сайте часто встречаются элементы разного размера. При этом попробуем унаследовать как можно больше стилей. Разметка большего элемента заголовка может быть примерно такой: CSS будет: К сожалению, код не работает. Как видите, между краем и текстом Если вы настаиваете на использовании только Обратите внимание на узор здесь? Что произойдет, если у нас будет больше заголовков разного размера или если заголовки должны измениться по размеру? Вы уже можете видеть, как кодирование всего сайта в Мы можем упростить код так, чтобы не было необходимости повторно объявлять Как видите, Теперь давайте посмотрим, что произойдет, если использовать подход Реализация И Это что? Нет! Маловероятно, что ваш веб-сайт содержит только один элемент заголовка. Мы должны учитывать, как этот заголовок взаимодействует с другими элементами на вашей странице. Обычно перед или после заголовка можно увидеть другие элементы, например: Разметка для этого набора элементов: Абзац текста Абзац текста Для стилей нам нужно добавить Нееет! 🙁 Заполнение Если вы настаиваете на использовании только Обратите внимание на узор здесь? Размер шрифта Как и в предыдущем случае, мы можем упростить код, если вы готовы использовать в своем коде комбинацию Как видите, единица измерения Гораздо яснее увидеть, как теперь А теперь давайте сделаем еще один шаг и посмотрим, как заголовок и абзац взаимодействуют с сеткой. Прежде чем мы продолжим, давайте объединим элементы заголовка и абзаца в один компонент: Текст абзаца Основные стили для этого компонента: Пока все хорошо. Это было все, что мы рассмотрели в предыдущих разделах. Далее, этот компонент можно найти на разных сайтах. Потенциальные районы включают: Элемент заголовка может отображаться с меньшим размером шрифта Мы можем создать для этого вариант, изменив класс компонента. Разметка будет выглядеть так: И стиль для этого варианта: Теперь о стилях компонента. По-прежнему применяются те же два правила: Как и в случае с элементом заголовка, вы можете определить, какие свойства нужно изменить в размере Давайте создадим компонент обоими способами, и вы поймете, что я имею в виду. Начнем с примера того, как выглядит такой компонент: Обратите внимание, как одновременно изменяются размер шрифта Если ваш компонент ведет себя подобным образом при изменении размера, вам нужно задать размер всего в Затем, чтобы активировать изменение размеров, все, что вам нужно сделать, это изменить свойство Пока все хорошо. А теперь давайте немного усложним. Представьте, что у вас есть такая сетка. Вертикальные и горизонтальные промежутки между каждым элементом сетки должны оставаться одинаковыми на всех устройствах (для хорошей эстетики). Разметка для этой сетки: Я установил ширину желоба между каждым элементом сетки равным Задача в этой сетке состоит в том, чтобы разделить маленький компонент A и маленький компонент B с полем К сожалению, не получается. Поле Boo 🙁 Это происходит потому, что размер шрифта Гррррр! (╯ ° □ °) ╯︵ ┻━┻ К счастью, мы можем решить эту проблему, просто изменив размер в Тада! Проблема решена 🙂 Вот вам Codepen, с которым можно поиграть. См. Pen REM vs EM - Case 1 от Зелла Лью (@zellwk) на CodePen. Примечание. Для построения этой сетки необходимо использовать Flexbox. Я не буду объяснять, как я это построил, поскольку это выходит за рамки возможностей. Прочтите эту статью, если хотите узнать больше о Flexbox Да, кстати, не я придумал эту технику.Крис Койер писал об этом год назад. (Он гений). В любом случае, у нас все хорошо? Если да, перейдем к случаю 2. Если нет, не стесняйтесь оставлять комментарий, и я найду способ объяснить это дальше. Case 1 легко понять. Однако недостатком является то, что вам сложно оставаться верным своему модульному масштабу, поддерживать хорошие вертикальные ритмы и гарантировать, что каждый компонент имеет подходящий размер В то же время (особенно при создании адаптивных веб-сайтов). Иногда вам просто нужно настроить небольшую часть вашего компонента, вместо того, чтобы изменять размер всего сразу. Например, вы можете изменить только заголовок Давайте начнем стилизовать этот случай с рассмотрения основных стилей, которые мы написали выше: Поскольку мы меняем только Затем вы можете изменить размер шрифта Тада! Обратите внимание, как теперь изменяется только заголовок Еще одно. Поскольку рекомендуется использовать только несколько типографских размеров, я часто абстрагирую свойство На этом случай 2! Вот вам Codepen: См. Pen REM vs EM - Case 2 от Zell Liew (@zellwk) на CodePen. Вот вопрос, который вы, вероятно, зададите, поэтому я подумал, что сначала отвечу на него: Какой метод вы должны использовать ? Я бы сказал, это зависит от вашего дизайна. Лично я работаю со случаем 2 чаще, чем со случаем 1, так как предпочитаю абстрагироваться от типографики в отдельный файл. Итак, следует ли использовать А теперь перейдем к делу! Что вы думаете об этих дебатах? Я хотел бы услышать ваше мнение в комментариях ниже! 🙂 Если вам понравилась эта статья, расскажите о ней другу! Поделитесь этим в Твиттере.Если вы заметили опечатку, я буду признателен, если вы сможете исправить ее на GitHub. Спасибо! Я хотел бы похвалить ответ josh4736 за предоставление отличного исторического контекста. Несмотря на то, что он хорошо сформулирован, ландшафт CSS изменился за почти пять лет, прошедших с того момента, как был задан этот вопрос. Когда был задан этот вопрос, правильным ответом было tl; dr: использовать Исторически В большинстве примеров CSS в Интернете используются значения Если вам нужна тонкая граница, с Есть две части преимущества Масштабирование в браузере за эти годы сильно изменилось. Исторически многие браузеры увеличивали только размер шрифта Уважение к пожеланиям пользователя не исключается. Тот факт, что для браузера по умолчанию установлено значение Если вы основываете свои медиа-запросы на Поскольку Никогда не делайте этого, пожалуйста Что бы вы ни делали, не устанавливайте для размера шрифта Если вы установите размер шрифта Если вы хотите изменить кажущееся значение на Математика для этого достаточно проста. Кажущийся размер шрифта Составьте уравнение: И решите для Если вы используете размер шрифта по умолчанию, у меня высота 20 пикселей. Делать все, кратное Если вы используете размер шрифта по умолчанию, у меня высота 10 пикселей. Проблема теперь в том, что ваш размер шрифта Я размер шрифта по умолчанию Важно отметить, что с этой настройкой кажущееся значение превращается в Видимый размер шрифта, который вы выбираете, зависит от вас, поэтому, если вы хотите, нет причин, по которым вы не можете использовать: и Итак, у вас есть простое решение, учитывающее пожелания пользователей и позволяющее избежать чрезмерного усложнения вашего CSS. Я боялся, что вы спросите об этом. Как бы мне ни хотелось притвориться, что Одна из первых проблем, с которыми вы столкнетесь с Здесь значение Это немного раздражает, потому что это означает, что вам нужно выполнить некоторые дробные вычисления , но я обнаружил, что в большинстве распространенных медиа-запросов уже используются значения, кратные 16. Кроме того, если вы используете препроцессор CSS, вы можете использовать миксины или переменные для управления вашими медиа-запросами, которые полностью замаскируют проблему. К сожалению, в Safari есть известная ошибка, при которой изменения размера шрифта Если вы переключаетесь между проектами, различными проектами, вполне возможно, что видимый размер шрифта Моя единственная рекомендация - придерживаться Если вы пишете CSS, который будет использоваться на сайте, который вы не контролируете, например, для встроенного виджета, на самом деле нет хорошего способа узнать, какой видимый размер будет иметь Если вы все же хотите использовать * Я не хочу никого отпугивать от использования Краткое примечание об основных единицах CSS. Прочитав эту статью, вы полностью поймете этих трех рыцарей Интернета! Pixels, EM'S и REM'S довольно популярны в мире CSS, но их часто путают и ошибочно принимают друг с другом.Итак, без лишних слов, давайте сначала посмотрим на пикселей ! Они являются наиболее часто используемым модулем над CSS, и единственное, что вам нужно понять, это то, что если вы измените размер элемента до 100 пикселей, он будет выглядеть большим и гигантским на экране вашего ноутбука. . Проблема возникает, когда вы хотите просматривать один и тот же контент на меньшем экране, например на экране мобильного телефона, потому что он будет иметь такой же гигантский вид и на экране мобильного телефона.Так что будьте осторожны при разработке адаптивных веб-сайтов, поскольку пикселя не являются динамическими по сравнению с em / rem. ЭМ, с другой стороны, полностью родственны своим родителям. Например, у вас есть тег Теперь третий приятель, который мы получили, - это REM (Root EM). em
. Они относятся к размеру шрифта. Я установил размер шрифта 1em
для содержащего .wrapper
. Измените это значение на 1.5em
, и вы увидите, что размер шрифта всех элементов увеличивается, но только последний элемент станет шире, так как ширина относительно этого размера шрифта. ems и rem
em
и rem
— две относительные длины, с которыми вы, вероятно, столкнетесь чаще всего при изменении размеров чего-либо, от полей до текста. Стоит понять, как они работают, и чем они отличаются, особенно когда вы начинаете переходить к более сложным темам, таким как стилизация текста или макет CSS. В приведенном ниже примере представлена демонстрация.
.
внутри
с классом
из ems
берут размер от своего родителя.Таким образом, каждый последующий уровень вложенности становится все больше и больше, поскольку для каждого установлен размер шрифта 1,3em
— в 1,3 раза больше размера шрифта его родителя.
внутри
с классом
из rems
получают размер от корневого элемента (
). Это означает, что каждый последующий уровень вложенности не увеличивается.
в CSS, вы увидите, что все остальное изменится относительно него — и rem
— и текст размером em
. Процентные соотношения
font-size
в процентах, это будет процент от font-size
родительского элемента.Если вы используете процентное значение для значения ширины , это будет процент от ширины
родительского элемента.
имеет размер шрифта
, равный 80%, поэтому элементы вложенного списка становятся все меньше по мере того, как они наследуют свой размер от своего родителя.
, вы можете использовать длину или процент.Если допустимое значение включает только <длина>
, использование процента невозможно. Числа
opacity
, которое контролирует непрозрачность элемента (насколько он прозрачен). Это свойство принимает число от 0
(полностью прозрачное) до 1
(полностью непрозрачное). непрозрачности
на различные десятичные значения от 0
до 1
и посмотрите, как поле и его содержимое становятся более или менее непрозрачными. Ключевые слова цвета
<цвет>
. Шестнадцатеричные значения RGB
0123456789abcdef
.Каждая пара значений представляет один из каналов - красный, зеленый и синий - и позволяет нам указать любое из 256 доступных значений для каждого (16 x 16 = 256). Значения RGB и RGBA
rgb ()
- которой заданы три параметра, которые представляют значения красного, зеленого и синего каналов цветов, почти так же, как шестнадцатеричные значения. Разница с RGB заключается в том, что каждый канал представлен не двумя шестнадцатеричными цифрами, а десятичным числом от 0 до 255, что несколько проще для понимания. 0
, это сделает цвет полностью прозрачным, тогда как 1
сделает его полностью непрозрачным. Значения между ними дают вам разные уровни прозрачности. непрозрачности
, которое мы рассматривали ранее. Когда вы используете непрозрачность, вы делаете элемент и все внутри него непрозрачными, тогда как использование цветов RGBA делает непрозрачным только цвет, который вы указываете. rgba ()
и rgb ()
и hsl ()
и hsla ()
(см. Ниже) стали чистыми псевдонимами друг друга и начал вести себя точно так же.Так, например, и rgba ()
, и rgb ()
принимают цвета со значениями альфа-канала и без них. Попробуйте изменить функции rgba ()
в приведенном выше примере на rgb ()
и посмотрите, работают ли цвета! Какой стиль вы используете, зависит от вас, но разделение определений непрозрачного и прозрачного цвета для использования различных функций дает (очень) немного лучшую поддержку браузера и может выступать в качестве визуального индикатора того, где прозрачные цвета определены в вашем коде. Значения HSL и HSLA
hsl ()
принимает значения оттенка, насыщенности и яркости, которые используются для различения 16,7 миллионов цветов, но другим способом: <изображение>
используется везде, где изображение является допустимым значением.Это может быть фактический файл изображения, на который указывает функция url ()
, или градиент..
, однако они новее и в настоящее время плохо поддерживаются браузером. Посетите страницу в MDN для типа данных
, если вы хотите прочитать о них.
представляет набор 2D-координат, используемых для позиционирования элемента, такого как фоновое изображение (через background-position
). Он может принимать такие ключевые слова, как верхний
, левый
, нижний
, правый
и центральный
, чтобы выровнять элементы с определенными границами 2D-блока, а также длины, которые представляют смещения сверху и слева. ручные края коробки., центр
.
ключевые слова, такие как красный
, черный
, rebeccapurple
и goldenrod
).Эти ключевые слова более точно описываются как идентификаторы , , особое значение, которое понимает CSS. Как таковые, они не цитируются - они не рассматриваются как строки. rgb ()
, hsl ()
и т. Д. Значение, используемое для возврата изображения из файла - url ()
- также является функцией. calc ()
. Эта функция дает вам возможность выполнять простые вычисления внутри вашего CSS. Это особенно полезно, если вы хотите выработать значения, которые вы не можете определить при написании CSS для вашего проекта, и вам нужен браузер, чтобы работать за вас во время выполнения. calc ()
, чтобы сделать поле шириной 20% + 100px
.20% рассчитываются от ширины родительского контейнера .wrapper
и поэтому изменится, если эта ширина изменится. Мы не можем выполнить этот расчет заранее, потому что мы не знаем, какими будут 20% родительского элемента, поэтому мы используем calc ()
, чтобы указать браузеру сделать это за нас.
также позволяет создавать цветовой градиент, полезно, но, возможно, иметь неочевидные знания! rem против em единиц в CSS
Введение
html
. em Установка
.parent {
размер шрифта: 18 пикселей;
}
.ребенок {
размер шрифта: 1.5em;
}
), то используется значение браузера по умолчанию 16px .
.parent {
размер шрифта: 18 пикселей;
}
.ребенок {
размер шрифта: 1.5em;
отступ: 2em 1em;
}
.ребенок
будет 54px . Это в 2 раза больше размера шрифта нашего текущего элемента ( 2 * 27 пикселей ) .child
будет 27px . Это в 1 раз больше размера шрифта нашего элемента. Эффект смешивания: Проблемы в раю
.parent {
размер шрифта: 15 пикселей;
}
.ребенок {
размер шрифта: 2em;
}
У меня 15 пикселей, я 30 пикселей, как и ожидалось, 60 пикселей, начинаются проблемы!
rem Единица
. И если элемент
не имеет указанного размера шрифта, используется значение браузера по умолчанию 16px .
.html {
размер шрифта: 16 пикселей;
}
.parent {
размер шрифта: 15 пикселей;
}
.child-rem {
размер шрифта: 2rem;
}
Я 15px
У меня 32 пикселя, как и ожидалось
У меня 32 пикселя, да!
em vs rem, что лучше?
Размер в CSS: px vs em vs rem
пикселей
не масштабируются, но масштабируются em
и rem
. em
и rem
, но разница между ними все еще нечеткая. В этой статье я расскажу о разнице и о том, когда использовать конкретный модуль, чтобы избежать создания веб-сайтов с непропорциональным размером. Разница
пикселей,
) - это часто используемая единица CSS на веб-сайтах. пикселей
не масштабируется, это абсолютная единица измерения. Изменение значения другого элемента не влияет на значение абсолютных единиц. Присваиваемое значение фиксируется независимо от настройки пользователя. em
) и корневой элемент ( rem
) - это адаптивные единицы, интерпретируемые браузером в эквивалентные единицы пикселей и
. Это относительные единицы.Изменение значения родительского или корневого элемента влияет на значение относительных единиц. Они масштабируются вместе с устройством. Итак, что отличает их друг от друга? Разница заключается в том, как значения выводятся браузером. Чтобы просмотреть вычисленные значения, откройте Инструменты разработчика Chrome и перейдите на вкладку Computed . em
равно относительно размера шрифта элемента, для которого применяется стиль . На это также влияют унаследованные значения от родительских элементов, если они явно не переопределены блоком пикселей
, который не подлежит наследованию. rem
относительно размера шрифта корневого (html) элемента . Однако на это влияет параметр размера шрифта в браузере в результате наследования, если он не переопределен единицей пикселей
, которая не подлежит наследованию. Использование em
em
вычисленное значение пикселя выводится из размера шрифта стилизованного элемента с учетом унаследованных (родительских и прародительских) значений.Использование агрегата em
может оказаться сложным. em
единиц следует использовать для обеспечения масштабируемости в контексте конкретного элемента дизайна, например установка отступов, полей и высоты строки пунктов меню для использования значений em
хорошо работает для правильного масштабирования пунктов меню навигации. 14px
, когда вы создаете правило, со свойством padding, установленным на 3em
, оно будет оцениваться как 42px
(14 x 3 = 42).Это не зависит от размера шрифта, назначенного элементу html. Проще говоря, размер шрифта элемента, для которого объявлена единица em, определяет значение единицы пикселя.
html {
размер шрифта: 18 пикселей;
}
раздел {
размер шрифта: 14 пикселей;
заполнение: 3em;
}
html {
размер шрифта: 18 пикселей;
}
раздел {
размер шрифта: 14 пикселей;
padding-bottom: 42px;
отступ слева: 42 пикселей;
padding-right: 42px;
padding-top: 42px;
}
Использование rem
rem
эквивалент пикселей и
зависит от размера шрифта элемента html. 18px
, а свойству margin присвоено значение 2rem
. Расчетное значение поля будет равно 36px
(18 x 2 = 36).
html {
размер шрифта: 18 пикселей;
маржа: 2бэр;
}
html {
размер шрифта: 18 пикселей;
нижнее поле: 36 пикселей;
маржа слева: 36 пикселей;
поле справа: 36 пикселей;
маржа сверху: 36 пикселей;
}
Влияние наследования на единицу
em
, метод вычисления эквивалентного пикселя меняется.С em
дочерний элемент наследует значение своего родителя и вплоть до прародителя. Это изменяет предполагаемое значение пикселя, поскольку унаследованное значение принимается во внимание.
<раздел>
Бабушка и дедушка
html {
размер шрифта: 16 пикселей;
}
.page-wrapper {
размер шрифта: 1.5em;
}
.container {
отступ: 2em;
}
padding
для класса .container
выше, учитывается наследование.
html {
размер шрифта: 16 пикселей;
}
.page-wrapper {
размер шрифта: 24 пикселя;
}
.container {
padding-bottom: 48 пикселей;
отступ слева: 48 пикселей;
отступ справа: 48 пикселей;
padding-top: 48 пикселей;
}
page-wrapper
наследует размер шрифта родительского (html) элемента (16 пикселей).Он умножает это значение на размер шрифта (1,5em), который составляет 24 пикселя (16 x 1,5 = 24 пикселя)., класс
будет наследовать от родительского элемента. Его значение заполнения теперь будет вычислено до 48 пикселей (24 x 2 = 48).
определяет размер шрифта в единицах em
, вычисление будет расширено, чтобы использовать это значение. например, если размер шрифта 1.5em
указан в классе контейнера
,
html {
размер шрифта: 16 пикселей;
}
.page-wrapper {
размер шрифта: 1.5em;
}
.container {
размер шрифта: 1.5em;
отступ: 2em;
}
html {
размер шрифта: 16 пикселей;
}
.page-wrapper {
размер шрифта: 24 пикселя;
}
.container {
размер шрифта: 36 пикселей;
padding-bottom: 72px;
отступ слева: 72 пикселей;
padding-right: 72px;
padding-top: 72px;
}
пикселей
.
<раздел>
Бабушка и дедушка
html {
размер шрифта: 16 пикселей;
}
.page-wrapper {
размер шрифта: 24 пикселя;
}
.container {
размер шрифта: 1.5em;
}
div
с классом контейнера выше вычисляется на основе его родительского элемента, а не корня. Интересно то, что родительский и дочерний элементы в приведенном выше HTML не имеют одинакового размера шрифта, независимо от того, что они имеют одно и то же имя класса.Размер шрифта Child вычисляется на основе его родителя, то есть Parent, а размер шрифта Parent вычисляется на основе его родителя, то есть Grandparent.
<раздел>
Дедушка и бабушка (24px)
em
рекомендуется определять размер шрифта в элементе html
вместо того, чтобы явно объявлять его для других элементов. Влияние настроек браузера
rem
. Это влияет на единицы em
также в результате наследования. Если для элемента html не задано значение шрифта
html {
размер коробки: рамка-рамка;
}
.page-wrapper {
размер шрифта: 2rem;
}
page-wrapper
будет зависеть от настроек браузера, поскольку для корневого элемента размер шрифта не установлен.По умолчанию размер шрифта браузера установлен на 16 пикселей
и наследуется корневым элементом. Если пользователь изменяет размер шрифта браузера в настройках, страница будет отображаться в соответствии с настройками. Предполагая, что пользователь устанавливает размер шрифта по умолчанию на 14 пикселей, вычисленное значение размера шрифта для обертки страницы
будет равно 28 пикселей (14 x 2 = 28). Если для элемента html установлено значение шрифта em или rem
em
или rem
установлено для элемента html с настраиваемой настройкой браузера, вычисленное значение пикселя будет кратным настройке размера шрифта браузера с указанным размером шрифта. Рекомендуемая настройка
html {
размер шрифта: 62,5%;
}
тело {
маржа: 0;
размер шрифта: 1.6rem;
}
.Заголовок страницы {
размер шрифта: 3,2 бэр;
}
html {
размер шрифта: 62,5%;
}
тело {
маржа: 0;
размер шрифта: 16 пикселей;
размер шрифта: 1.6рем;
}
.Заголовок страницы {
размер шрифта: 32 пикселя;
размер шрифта: 3,2 бэр;
}
Заключительные записи
em
только для изменения размера, который необходимо масштабировать на основе размера шрифта элемента, отличного от html (корневого) элемента. rem
для элементов, масштабируемых в зависимости от настроек размера шрифта браузера пользователя. Используйте rem
в качестве единицы для большей части стоимости вашего имущества. REM против EM — Великие дебаты
17 февраля 2016 г. rem
и em
. rem
и em
ведутся давние дебаты, считая, что вы должны использовать одно вместо другого. rem
и em
. Вы также узнаете, что такое rem
и em
и как их использовать для создания модульных компонентов. Что такое EM?
EM — это типографская единица, равная текущему заданному кеглю. Википедия
пунктов
. Это имеет полный смысл, если мы заменим размером шрифта
на размером шрифта
. 1em = 20px
, если у селектора есть размер шрифта
20px
.
h2 {font-size: 20px} / * 1em = 20px * /
p {font-size: 16px} / * 1em = 16px * /
em
может использоваться для объявления размеров шрифта. Фактически, для размера шрифта
рекомендуется использовать относительные единицы, такие как em
.
h2 {font-size: 2em} / * Что это вообще значит ?! * /
h2
здесь?
для
.Допустим, родительский элемент -
, а его размер шрифта
установлен на 16px
.
равно 32px
или 2 * 16px
.
html {font-size: 16px}
h2 {font-size: 2em} / * 16 пикселей * 2 = 32 пикселей * /
font-size
в
на значение в пикселях, потому что это переопределяет настройки браузера пользователя. процентного значения
или полностью исключить объявление font-size . font-size
будет установлено на 100%
, если вы его полностью не указали.
html {font-size: 100%} / * По умолчанию это означает 16 пикселей * /
из 100%
по умолчанию будет иметь значение 16px
, если они не изменят размер шрифта по умолчанию
в настройках своего браузера.Однако редко кто-то так поступает. на
. em
также можно использовать для указания значений для других свойств в дополнение к font-size
. margin
и padding
— два таких свойства, размер которых обычно составляет em
s. em
. margin-bottom
для элементов
и
? (Предположим, что размер шрифта
из
установлен на 100%
).
h2 {
размер шрифта: 2em; / * 1em = 16 пикселей * /
нижнее поле: 1em; / * 1em = 32px * /
}
п {
размер шрифта: 1em; / * 1em = 16 пикселей * /
нижнее поле: 1em; / * 1em = 16 пикселей * /
}
1em
для нижнего поля
отличается в этих двух сценариях? 1em
равен его текущему размеру шрифта
. Поскольку размер шрифта
в
теперь установлен на 2em
. Другие свойства, вычисленные с em
в
, увидят, что 1em = 32px
. 1em
может принимать разные значения в разных частях кода. Это может сбить с толку, если вы только начинаете с em
s. em
. Давайте узнаем, что будет дальше rem
. Что такое REM?
rem
означает Root EM. Он создан для облегчения вычислительной проблемы em
, с которой многие столкнулись. font-size
. Это означает, что 1rem
всегда равен размеру шрифта
, определенному в
. rem
s. Каковы теперь вычисленные значения нижнего предела
?
h2 {
размер шрифта: 2rem;
нижнее поле: 1 бэр; / * 1rem = 16 пикселей * /
}
п {
размер шрифта: 1 бэр;
нижнее поле: 1 бэр; / * 1rem = 16 пикселей * /
}
1rem
всегда будет принимать значение 16px
независимо от того, где вы его устанавливаете (если вы не изменили размер шрифта
из
). rem
. Довольно легко узнать, что такое на
, согласны? rem
или em
? REM или EM?
rem
, утверждая, что использование rem
делает их компоненты менее модульными. Другие используют rem
для всего, предпочитая простоту, которую обеспечивает rem
. rem
или em
на разных этапах моей карьеры разработчика. Мне нравилось, как em
помогли мне создавать модульные компоненты, но мне не нравилась сложность, которую они вносили в мой код. Мне также нравилось, как rem
упрощает вычисления, но я ненавидел хитрости, которые я использовал для создания модульных компонентов. rem
и em
имеют свои сильные и слабые стороны. Их следует использовать по-разному, в зависимости от обстоятельств. em
, если свойство масштабируется в соответствии с размером шрифта
rem
. rem
или em
, и вы увидите, как эти два правила прекрасно сочетаются.
), который выглядит следующим образом: rem
:
.header {
размер шрифта: 1 бэр;
набивка: 0,5 бэр 0,75 бэр;
фон: # 7F7CFF;
}
заголовок!
.header {
размер шрифта: 1 бэр;
набивка: 0,5 бэр 0,75 бэр;
фон: # 7F7CFF;
}
.header - large {
размер шрифта: 2rem;
}
.header - large
слишком мало свободного места. rem
s, единственный способ решить эту проблему — повторно объявить отступ
в большом заголовке:
Теперь больше заполнения большого заголовка!.header {
размер шрифта: 1 бэр;
набивка: 0,5 бэр 0,75 бэр;
фон: # 7F7CFF;
}
.header - large {
размер шрифта: 2rem;
набивка: 1 бэр 1,5 бэр;
}
.header - large
font-size
вдвое больше, чем .header
. Следовательно, заполнение
в .header - large
вдвое больше, чем заполнение
в .header
. rem
может вызвать дублирование и сверхсложный код. padding
на .header - large
, если мы не против использовать и em
и rem
:
.header {
размер шрифта: 1 бэр;
заполнение: 0,5 мкм 0,75 мкм;
фон: # 7F7CFF;
}
.header - large {
размер шрифта: 2rem;
}
em
может быть невероятно полезным, когда у вас есть свойство, которое необходимо масштабировать с размером шрифта . Здесь родилось первое правило. em
только для того же заголовка. em
недалеко от кода rem
, на котором мы остановились. Все, что нам нужно сделать, это изменить rem
на em
.
.header {
размер шрифта: 1em;
заполнение: 0,5 мкм 0,75 мкм;
фон: # 7F7CFF;
}
.header - large {
размер шрифта: 2em;
}
.header
, и .header - large
будут выглядеть точно так же, как их аналоги rem
.
margin
s слева и справа от тегов
.
Ой ой. `padding` в большом заголовке не совпадает с текстом п {
маржа слева: 0,75em;
поле справа: 0,75em;
}
слева и справа от .header - большой
слишком велик! em
, единственный способ решить эту проблему — повторно объявить свойства padding-left
и padding-right
в большом заголовке:
Левый и правый отступы теперь выровнены!.header {
размер шрифта: 1em;
заполнение: 0,5 мкм 0,75 мкм;
/ * Другие стили * /
}
.header - large {
размер шрифта: 2em;
отступ слева: 0,375em;
отступ справа: 0,375em;
маржа: 0,75em 0;
}
из .header - large
вдвое больше размера шрифта
из .header
. Тем не менее, padding-left
и padding-right
из .header - large
составляют половину от padding-left
и padding-right
из .заголовок
! rem
и em
. В частности, rem
для левого и правого padding
s и em
для верхнего и нижнего padding
s:
.header {
набивка: 0,5 м 0,75 бэр;
размер шрифта: 1em;
фон: # 7F7CFF;
}
.header - large {
размер шрифта: 2em;
}
em
полезна, когда вам нужно масштабировать свойство с размером шрифта
.Однако вы столкнетесь с проблемами, если вам потребуется изменить размер свойства в соответствии с размером корневого font-size
. rem
и em
могут работать вместе в компоненте, не так ли? Компоненты в сети
.составная часть {
фон: белый;
граница: 2px solid # 7F7CFF;
}
.component__header {
размер шрифта: 2em;
набивка: 0,5 м 1,5 бэр;
фон: # 7F7CFF;
маржа: 0;
}
.component p {
отступ слева: 1,5 бэр;
отступ справа: 1,5 бэр;
маржа: 1,5 бэр 0;
}
Возможные местоположения компонента
, когда компонент размещается в узком месте, например на боковой панели.
.component - small .component__header {
размер шрифта: 1em;
}
em
, если свойство должно масштабироваться в соответствии с размером шрифта
rem
. em
, посмотрев, взаимодействуют ли они с остальной частью страницы. Есть два разных подхода к созданию этого компонента: компонента
. компонента
. Случай 1. Свойства всех элементов масштабируются с размером шрифта компонента
, поля
и отступ
всех элементов внутри компонента? em
s. Затем код становится:
.составная часть {
фон: белый;
граница: 2px solid # 7F7CFF;
}
.component__header {
размер шрифта: 2em;
заполнение: 0,5 мкм 0,75 мкм; / * Заменены отступы на em * /
фон: # 7F7CFF;
маржа: 0;
}
.component p {
отступ слева: 1.5em; / * Заменены отступы на em * /
отступ справа: 1.5em; / * Заменены отступы на em * /
маржа: 1.5em 0; / * Маржа заменена на em * /
}
// Малый вариант
.component - маленький .component__header {
размер шрифта: 1em;
отступ слева: 1.5em; / * Добавлен отступ размером в em * /
padding-right: 1.5em; / * Добавлен отступ размером в em * /
}
font-size
компонента.
.component {
// Другие стили
@media (min-width: 800px) {
размер шрифта: 1.5em;
}
}
2em
в корне font-size
из 16px
. Другими словами, вычисленная ширина желоба составляет 32px
. 32px
. Мы можем попробовать установить для начала margin-top
компонента B равным 2em
.
.component {
/ * Другие стили * /
@media (min-width: 800px) {
размер шрифта: 1.25em;
}
}
.component + .component {
маржа сверху: 2em;
}
, поле
между маленьким компонентом A и маленьким компонентом B больше, чем ширина желоба в области просмотра выше 800 пикселей.
компонента равен 1.5em
(или 24px
), когда область просмотра больше 800px
. Поскольку размер шрифта
равен 24px
, вычисленное значение 2em
становится 48px
, что отличается от 32px
, которые мы искали. rem
, так как мы знаем, где нужно изменить ширину желоба в соответствии с размером шрифта root
.
Вертикальное пространство теперь равно! 🙂 .component + .component {
верхняя маржа: 2 бэр;
}
Случай 2: свойства некоторых элементов масштабируются с размером шрифта компонента
font-size
в большем окне просмотра.
.component {
фон: белый;
граница: 2px solid # 7F7CFF;
}
.component__header {
размер шрифта: 2em;
отступ: 0.5em 1.5rem;
фон: # 7F7CFF;
маржа: 0;
}
.component p {
отступ слева: 1,5 бэр;
отступ справа: 1,5 бэр;
маржа: 1,5 бэр 0;
}
.component - маленький .component__header {
размер шрифта: 1em;
}
font-size
s заголовка на 1200px
, мы можем безопасно изменить размер каждого свойства в rem
(за исключением свойств заголовка padding-top
и padding-bottom
)
.component {
фон: белый;
граница: 2px solid # 7F7CFF;
}
.component__header {
размер шрифта: 2rem; / * Вместо этого размер измеряется в rem * /
набивка: 0,5 м 1,5 бэр; / * Вместо этого размер измеряется в rem * /
фон: # 7F7CFF;
}
.component p {
отступ слева: 1,5 бэр; / * Вместо этого размер измеряется в rem * /
отступ справа: 1,5 бэр; / * Вместо этого размер измеряется в rem * /
маржа: 1,5 бэр 0; / * Вместо этого размер измеряется в rem * /
}
.component - маленький .component__header {
размер шрифта: 1 бэр; / * Вместо этого размер измеряется в rem * /
}
заголовка
в разных окнах просмотра, просто добавив к ним медиа-запрос:
.component__header {
размер шрифта: 2rem;
@media (min-width: 1200 пикселей) {
размер шрифта: 3rem
}
}
.component - маленький .component__header {
размер шрифта: 1 бэр;
@media (min-width: 1200 пикселей) {
размер шрифта: 1.5rem
}
}
font-size
, когда мы изменяем размер браузера? Вот как вы строите для корпуса 2 🙂 font-size
от компонента .Таким образом, становится легко гарантировать, что ваша типографика останется единообразной для всех компонентов.
h3 {
размер шрифта: 2rem;
@media (min-width: 1200 пикселей) {
размер шрифта: 3rem
}
}
h4 {
размер шрифта: 1 бэр;
@media (min-width: 1200 пикселей) {
размер шрифта: 1.5rem
}
}
.component__header {@extend h3; }
.component - маленький .component__header {@extend h4; }
Заключение
rem
или em
? Я думаю, что это неправильный вопрос. И rem
, и em
имеют свои сильные и слабые стороны, и их можно использовать вместе, чтобы помочь вам создавать простые модульные компоненты! html - следует ли использовать в CSS единицы значений px или rem?
пикселей,
, , но сегодня это уже не так. rem
Обзор устройства
пикселей
единиц обычно представляли один пиксель устройства.С устройствами, имеющими все более и более высокую плотность пикселей, это больше не актуально для многих устройств, например, с дисплеем Retina от Apple. rem
единиц представляют собой размер r oot em . Это размер шрифта
для всего, что соответствует : root
. В случае HTML это элемент
; для SVG это элемент
. Размер шрифта по умолчанию
в каждом браузере * составляет 16 пикселей
. При использовании
пикселей
пикселей и
, потому что они были стандартом де-факто. pt
, в
и множество других единиц можно было бы использовать теоретически, но они плохо обрабатывали малые значения, так как вам быстро пришлось бы прибегать к дробям, которые были длиннее и сложнее рассуждать о. пикселей,
вы можете использовать 1px,
, с pt
, вам нужно будет использовать 0,75pt
для согласованных результатов, и это просто не очень удобно. При использовании
rem
rem
Значение по умолчанию 16px
не очень веский аргумент в пользу его использования.Запись 0,0625 rem
на хуже , чем запись 0,75pt
, так зачем кому-то использовать rem
? rem
над другими устройствами. пикселей
rem
на все, что захотите Соблюдение настроек пользователя
до
, но это изменилось довольно быстро, когда веб-сайты поняли, что их красивый, идеальный по пикселям дизайн ломается каждый раз, когда кто-то увеличивает или уменьшает масштаб.На этом этапе браузеры масштабируют всю страницу, поэтому масштабирование на основе шрифта не имеет значения. 16px
, не означает, что ни один пользователь не может изменить свои предпочтения на 24px
или 32px
, чтобы исправить слабое зрение или плохую видимость (например, блики на экране). Если вы основываете свои единицы на rem
, любой пользователь с большим размером шрифта увидит сайт пропорционально большего размера.Границы будут больше, отступы будут больше, поля будут больше, все будет плавно масштабироваться. rem
, вы также можете убедиться, что сайт, который видят ваши пользователи, соответствует их экрану. Пользователь с размером шрифта
, установленным на 32px
в широком браузере 640px
, будет эффективно видеть ваш сайт, как показано пользователю с размером 16px
в широком браузере 320px
. При использовании rem
нет абсолютно никаких потерь для RWD. Изменение видимого
пикселей
Значение rem
основан на размере шрифта
узла : root
, если вы хотите изменить то, что представляет 1rem
, все, что вам нужно сделать, это изменить размер шрифта
:
: root {
размер шрифта: 100 пикселей;
}
тело {
размер шрифта: 1 бэр;
}
элемента
значение : root
пикселей
.
на html
на значение пикселей
, вы уничтожите предпочтения пользователя без возможности их вернуть. rem
, используйте единицы %
.: root
равен 16px
, но, допустим, мы хотим изменить его на 20px
.Все, что нам нужно сделать, это умножить 16
на некоторое значение, чтобы получить 20
.
16 * Х = 20
X
:
X = 20/16
Х = 1,25
Х = 125%
: root {
размер шрифта: 125%;
}
20
, не так уж и хорошо, но общее предложение - сделать видимый размер rem
равным 10px
.Магическое число для этого - 10/16
, что составляет 0,625
или 62,5%
.
: root {
размер шрифта: 62,5%;
}
по умолчанию
для остальной части страницы установлен слишком малым, но для этого есть простое решение: установите размер шрифта
в теле
, используя rem
:
: root {
размер шрифта: 62.5%;
}
тело {
размер шрифта: 1.6rem;
}
rem
равно 10px
, что означает, что любое значение, которое вы могли записать в px
, можно преобразовать напрямую в rem
, ударив десятичный разряд.
отступ: 20 пикселей;
набивка: 2рем;
: root {
размер шрифта: 6.25%;
}
тело {
размер шрифта: 16rem;
}
1rem
равно 1px
. Подожди, а в чем прикол?
rem
- волшебство и решает все проблемы, все же есть некоторые важные проблемы. Ничего нарушающего договор , на мой взгляд, , но я позвоню им, чтобы вы не могли сказать, что я вас не предупреждал. Media Queries (используйте
em
) rem
, связана с медиа-запросами. Рассмотрим следующий код:
: root {
размер шрифта: 1000 пикселей;
}
@media (min-width: 1rem) {
:корень {
размер шрифта: 1px;
}
}
rem
изменяется в зависимости от того, применяется ли медиа-запрос, а медиа-запрос зависит от значения rem
, так что же, черт возьми, происходит? rem
в медиа-запросах использует начальное значение font-size
и не должно (см. Раздел Safari) учитывать любые изменения, которые могли произойти с размером шрифта
элемента : root
.Другими словами, очевидное значение - , всегда 16px
.
| px | rem |
+ ------ + ----- +
| 320 | 20 |
| 480 | 30 |
| 768 | 48 |
| 1024 | 64 |
| 1200 | 75 |
| 1600 | 100 |
: root
действительно изменяют вычисленные значения rem
для диапазонов медиа-запросов. Это может вызвать очень странное поведение, если размер шрифта элемента : root
изменяется в медиа-запросе. К счастью, исправить это просто: используйте для медиа-запросов единицы em
. Переключение контекста
rem
будет иметь разные значения.В одном проекте вы можете использовать видимый размер 10 пикселей
, тогда как в другом проекте видимый размер может быть 1 пиксель
. Это может сбивать с толку и вызывать проблемы. 62,5%
, чтобы преобразовать rem
в видимый размер 10px
, потому что в моем опыте это было более распространено. Общие библиотеки CSS
rem
.Если это так, не стесняйтесь продолжать использовать пикселей
. rem
, рассмотрите возможность выпуска версии таблицы стилей Sass или LESS с переменной, чтобы переопределить масштабирование для видимого размера rem
. rem
, но я не смог официально подтвердить, что каждый браузер использует 16px
по умолчанию. Видите ли, существует множество браузеров, и для одного браузера не так уж сложно было бы хоть немного разойтись, скажем, 15px
или 18px
.Однако при тестировании я не видел ни одного примера, где бы браузер, использующий настройки по умолчанию в системе с настройками по умолчанию, имел любое значение, отличное от 16px
. Если вы найдете такой пример, поделитесь, пожалуйста, со мной. em, rem и px. Небольшая заметка об основных модулях CSS… | by Ritchie Pulikottil