em, px, pt, cm, in…
См. также оглавление со всеми советами.
На этой странице:
em
, px
, pt
, cm
, in
…Указывать длину в CSS можно в разных единицах. Некоторые из них
пришли из типографской традиции, как пункт (pt
)
и пика (pc
), другие, напр. сантиметр (cm
) и дюйм (in
), знакомы нам в повседневном
обиходе. Есть и «волшебная» единица, придуманная специально для
CSS: px
. Значит ли это, что для разных свойств нужны
разные единицы?
Нет, единицы измерения не имеют отношения к свойствам, но имеют прямое отношение к средствам отображения: экран или бумага.
Любые единицы измерения можно использовать где угодно. Свойство
со значением в пикселях (margin: 5px
) также
допускает и значения в дюймах или сантиметрах (margin:
1.2in; margin: 0.5cm
), и наоборот.
Но в целом для отображения на экране и для печати лучше использовать разные наборы единиц измерения. Советы по использованию единиц собраны в следующей таблице:
Рекомендуются | Можно иногда | Не рекомендуются | |
---|---|---|---|
Экран | em, px, % | ex | pt, cm, mm, in, pc |
Печать | em, cm, mm, in, pt, pc, % | px, ex |
Соотношение между абсолютными единицами таково: 1in = 2.54cm = 25.4mm = 72pt = 6pc
Если у вас есть под рукой линейка, можете проверить точность
своего устройства. Вот прямоугольник высотой 1 дюйм (2.54cm):
↑
↓
Так называемые абсолютные единицы (cm
, mm
, in
, pt
и pc
) в CSS означают то же самое, что и везде, но только если
у устройства вывода достаточно высокое разрешение. На лазерном
принтере 1cm должен быть точно равен 1 сантиметру.
Но на устройствах низкого разрешения, вроде компьютерных экранов,
CSS этого не требует. И вправду, разные устройства и разные
реализации CSS норовят отобразить их по-разному. Лучше оставить эти
единицы для устройств высокого разрешения, в частности для печати.
На компьютерных экранах и мобильных устройствах может получиться
не то, что ожидалось.
В прошлом CSS требовал, чтобы абсолютные единицы отображались правильно даже на компьютерных экранах. Но поскольку неправильных реализаций было больше, чем правильных, и никаких улучшений не предвиделось, в 2011-м CSS отказался от этого требования. Сейчас абсолютные единицы обязаны работать правильно только при выводе на печать и на устройствах высокого разрешения.
CSS не уточняет, что именно понимается под «высоким разрешением». Но так как у дешевых принтеров сегодня бывает не менее 300 точек на дюйм, а у хороших экранов порядка 200 точек на дюйм, граница, скорее всего, проходит где-то между этими значениями.
Еще одна причина не использовать абсолютные единицы где-либо,
кроме печати: на разные экраны мы смотрим с разного расстояния.
1 сантиметр на экране настольного компьютера выглядит маленьким.
Но на мобильном экране прямо перед глазами — это много. Лучше
вместо них использовать относительные единицы, напр. em
.
Единицы em
и ex
зависят от размера
шрифта и могут быть свои для каждого элемента в документе. Единица em
— просто размер шрифта. В элементе, которому
задан шрифт в 2in, 1em и означает эти 2in. Указание размеров
(напр., для отступов) в em
означает, что они
задаются относительно шрифта, и какой бы ни был шрифт
у пользователя — крупный (напр. на большом экране) или мелкий
(напр. на мобильном устройстве), эти размеры останутся
пропорциональными. Объявления наподобие
и margin: 1em
в CSS крайне популярны.
Единица ex
используется нечасто. В ней выражаются
размеры, которые должны отсчитываться от x-высоты шрифта.
X-высота — это, грубо говоря, высота строчных букв вроде a, c, m, или o. У шрифтов
с одинаковым размером (и, соответственно, при одинаковом em
) может быть огромная разбежка в размерах строчных букв,
и если важно, чтобы какая-то картинка, например, соответствовала
x-высоте, единица
к вашим услугам.
Единица px
в CSS волшебная. Она не связана
с текущим шрифтом, но и с физическими сантиметрами или дюймами
обычно тоже не связана. Единица px
определена как
что-то маленькое, но видимое, т.е. горизонтальную линию толщиной
1px можно было отобразить с четкими краями (без сглаживания). Что
считается четким, маленьким и видимым, зависит от устройства
и способа пользования им: держите ли вы его прямо перед глазами,
как мобильный телефон, на расстоянии вытянутой руки, как монитор,
или где-то на промежуточном расстоянии, как электронную книгу?
Поэтому px
по определению не фиксированная длина,
а нечто, зависящее от типа устройства и его обычного использования.
Чтобы понять, почему единица px
именно такая,
представьте ЭЛТ-монитор из 1990-х: наименьшая точка, которую он мог
отобразить, была размером примерно в 1/100 дюйма (0,25 мм) или чуть
больше. Свое название единица px
получила от тех
экранных пикселей.
Нынешние устройства в принципе могут отображать и более мелкие
четкие точки (хотя их может быть трудно разглядеть без лупы).
Но документы из прошлого века, которые использовали px
в CSS, независимо от устройства выглядят по-прежнему. Принтеры,
в особенности, могут отображать четко отображать линии гораздо
тоньше 1px, но даже на принтерах линия в 1px выглядит почти так же,
как выглядела бы на мониторе. Устройства меняются, но единица
всегда выглядит одинаково.
На самом деле CSS требует, чтобы 1px
был точно
равен 1/96 дюйма при любом выводе на печать. В CSS считается, что
принтерам, в отличие от экранов, не нужны разные размеры для px
, чтобы отображать четкие линии. Поэтому при печати
px не только одинаково выглядит независимо от устройства,
но и заведомо измеряется одной и той же величиной (совсем как
единицы c
m
, pt
, mm
, in
pc
, как
объяснялось выше).CSS также определяет, что растровые изображения (напр.
фотографии) по умолчанию отображаются в масштабе 1 пиксель
изображения на 1px. Фотография разрешением 600 на 400 будет 600px
шириной и 400px высотой. Тем самым пиксели фотографии привязываются
не к пикселям устройства вывода (которые могут быть очень мелкими),
а к единицам px
. Это позволяет точно совмещать
изображения с другими элементами документа, при условии, что
вы используете в своих стилях единицы px
, а не pt
, cm
и т.д.
Используйте
em
или px
для шрифтовЕдиницы pt
(пункт) and pc
pt
, пользуйтесь любой
единицей на свой выбор. Но есть хорошая причина
не использовать ни pt
, ни других абсолютных
единиц, а использовать только em
и px
.Вот несколько линий разной толщины. Некоторые из них могут казаться четкими, но как минимум линии в 1px и 2px должны быть четкими и видимыми:
0.5pt, 1px, 1pt, 1.5px, 2px
Если первые четыре линии выглядят одинаковыми (либо линия в 0.5pt пропала), скорее всего вы видите это на мониторе, не способном отображать точки мельче 1px. Если линии выглядят возрастающими по толщине, скорее всего вы видите эту страницу на качественном экране или на бумаге. А если 1pt выглядит толще, чем 1.5px, то это скорее всего экран мобильного устройства
Волшебная единица CSS, px
, часто бывает удачным
выбором, особенно если нужно выровнять текст с картинками, либо
просто потому, что что-либо толщиной 1px (или кратной 1px) заведомо
будет выглядеть четко.
Но размеры шрифтов еще лучше задавать в em
. Идея
в том, чтобы 1) не задавать размер шрифта для элемента BODY
(в HTML), а использовать размер шрифта по умолчанию для устройства,
поскольку это наиболее удобный для читателя размер; и 2) указывать
размеры шрифта других элементов в
: h2
{font-size: 2.5em}
, чтобы h2 был в 2½ раза крупнее
основного шрифта страницы.
Едиственное место, где можно использовать pt
(либо cm
или in
) для размера
шрифтов — стили для печати, если нужно, чтобы напечатанный шрифт
был строго определенного размера. Но даже там чаще всего лучше
использовать размер шрифта по умолчанию.
Таким образом, единица px
избавляет
от необходимости знать разрешение устройства. Независимо
от разрешения устройства вывода (96 dpi, 100 dpi, 220 dpi или
1800 dpi), длина, указанная в виде целого числа
,
всегда выглядит хорошо и везде достаточно похоже. Но что, если
мы хотим узнать разрешение устройства, например, чтобы
решить, можно ли использовать линию в 0.5px
?
Выход — проверить разрешение с помощью медиавыражений.
Подробности о медиавыражениях — за рамками этой статьи, но вот
небольшой пример:
div.mybox { border: 2px solid } @media (min-resolution: 2dppx) { /* Media with 2 or more dots per px */ div.mybox { border: 1.5px solid } }
Новые единицы измерения в CSS
Чтобы было еще проще писать стилевые правила, зависящие только
от размера шрифта по умолчанию, с 2013 года в CSS есть новая
единица: rem
. Один rem
(от «root em»,
т.е. «корневой em» или «em корневого элемента») — это размер шрифта
корневого элемента в документе. В отличие от em
,
который может быть для каждого элемента свой, rem
для всего документа один и тот же. Например, чтобы задать
элементам P и h2 одинаковый внешний отступ слева, вот для сравнения
CSS-код до 2013 года:
p { margin-left: 1em } h2 { font-size: 3em; margin-left: 0.333em }
и новая версия:
p { margin-left: 1rem } h2 { font-size: 3em; margin-left: 1rem }
Благодаря другим новым единицам стало можно указывать размеры
относительно окна пользователя. Это vw
и vh
. Единица vw
— 1/100 ширины окна, а vh
— 1/100 его высоты. Еще есть vmin
,
соответствующая меньшему из vw
и vh
.
И vmax
(можете догадаться, что она делает).
Поскольку они новые, они еще работают не везде. Но к началу 2015 года многие браузеры уже их поддерживали.
EM, REM или PX – почему нельзя использовать «только пиксели»
От автора: споры ведутся уже давно – какие единицы измерения использовать в CSS? Мы, как и многие другие, сначала перешли на REM и потом вернулись к любимым пикселям. Мы просто потеряли тот след, почему мы перешли на REM единицы. Проблема связана не только с размером шрифта, но и с доступностью.
Если коротко:
пиксели – это каменный век, не используйте их;
используйте REM для размеров шрифтов и отступов;
используйте EM для медиа запросов.
Практический курс по верстке адаптивного сайта с нуля!
Изучите курс и узнайте, как верстать современные сайты на HTML5 и CSS3
Узнать подробнееПиксели
За все эти годы мы привыкли к пикселям (px). Все знают, что такое пиксель (хотя размер пикселя не всегда одинаковый, но это тема другой статьи). Всем удобно работать с пикселями, их легко переводить. Дизайнеры работают в пикселях, очень удобно брать размеры прямо из Photoshop и переносить их в верстку.
Так что же не так с пикселями?
Доступность
Я большой сторонник доступности в интернете.
Если вы указываете все шрифты, элементы и отступы в пикселях, вы не уважаете конечного пользователя.
В большинстве браузеров пользователь может сменить размер шрифта по умолчанию (обычно это 16px). Если пользователь указал размер шрифта по умолчанию 20px, все шрифты должны увеличиться пропорционально.
Однако если на сайте четко прописан размер шрифта в пикселях, то заголовок размером 30px всегда будет 30px. От дизайнера/разработчика это может звучать круто, но вы не обычный пользователь. Хватит делать сайты для себя.
Если задать размер шрифта в пикселях, это не убьет всю доступность. Пользователь может изменять масштаб с помощью CTRL+/- (на OSX вместо CTRL клавиша CMD). Но можно ведь сделать все лучше.
Единицы измерения REM
Если вы хоть как-то знакомы с миром веб-дизайна, вы точно слышали про единицы измерения REM. Если все же не знаете, REM – это способ указать размер шрифта на основе размера шрифта корневого HTML элемента. С их помощью также можно быстро изменить размеры во всем проекте, поменяв размер шрифта корневого элемента (например, под определенный медиа запрос/размер экрана).
«REM единицы представляют собой размер шрифта корневого элемента (например, размер шрифта тега ). Если использовать эти единицы измерения для указания размера шрифта корневого элемента, вы получите изначальное значение.»
Как перевести REM в PX
Стандартный пример: размер шрифта html задан в 10px, параграф задан в 1,6rem. 1,6rem*10px = 16px.
Самый распространенный сценарий, который я видел, это установка корневого размера шрифта в 10px с помощью REM. Это позволяет легко и быстро переводить одни значения в другие, просто поделив на 10.
Тем не менее, если задать базовый размер шрифта в пикселях, мы получим ту же проблему, что и в примере выше. Доступность.
У REM единиц есть свои способы применения, однако я готов поспорить, что большинство людей используют REM только потому, что они круче пикселей. Я почти не видел реальных проектов, где специально бы изменяли корневой размер шрифта под определенный размер экрана, и это нормально. Если ваш сайт не нагружен множеством шрифтов, вы вряд ли захотите масштабировать все и сразу.
Так как же нам не ломать доступность?
Задайте размер шрифта корневого HTML элемента в процентах. Проценты будут связаны с размером шрифта в браузере по умолчанию. Обычно ставят размер шрифта на 62,5%. 62,5% от 16px (стандартный размер шрифта по умолчанию) составляют 10px. То есть 1,6rem = 16px. Если пользователь поменяет размер шрифта по умолчанию, например, на 20px, то 1,6rem будут равны 20px. Если пользователь хочет шрифты еще больше, пусть ставит. Счастливый дизайнер, счастливый разработчик. Со всеми числами легко работать.
Идеальный вариант – оставить размер шрифта HTML на 100%, но тогда вычисления станут немного сложнее. Например, 16px будут равны 1rem, а 20px станут 1,25rem, 24px превратятся в 1,5rem и т.д.
Sass/SCSS в помощь
Вычислять все эти числа в голове довольно затруднительно и долго. К счастью, вам не следует беспокоиться, если вы используете один из CSS препроцессоров Sass/SCSS, LESS. Все цифры можно вычислять с помощью функций.
А что по поводу EM единиц измерения?
EM единицы работают почти так же, как REM, пока дело не касается вложенности. Мне никогда не нравились EM, особенно когда нужно задавать размер шрифта. Например, возьмем div с размером шрифта 2em, добавим параграф со шрифтом 2em. Размер параграфа теперь 2em относительно div. Я быстро сбиваюсь в вычислениях, где какой размер. Код быстро становится неудобным. Именно эту проблему решает REM – размер всегда привязывается к корневому элементу.
Что по поводу медиа запросов?
Итак, мы установили, что значения в пикселях переписывают значения браузера по умолчанию, поэтому лучший выход – перевести все пиксели в REM, верно? Не совсем.
В этой статье описываются ключевые различия в использовании пикселей, EM и REM в медиа запросах (//zellwk.com/blog/media-query-units/). Прочитайте ее и возвращайтесь.
В итоге, и пиксели и REM в медиа запросах проигрывают, когда необходимо изменить масштаб в некоторых браузерах. EM в таких случаях становится наилучшим вариантом. REM здесь проигрывают намного больше, чем пиксели, поэтому мы не будем их рассматривать.
Все становится немного сложнее. У EM и пикселей есть свои минусы с медиа запросами, когда дело касается различий значений с плавающей точкой. Если вы используете min и max медиа запросы в одном блоке кода, то вам придется попотеть, когда пользователь начнет менять масштаб браузера или размер шрифта по умолчанию.
Пара примеров:
Мы используем шесть цифр после точки, так как отдельные браузеры не видят разницы межу 2-5 цифрами после точки.
Пример 1: масштаб в браузере установлен в 100%, ширина окна 640px
Практический курс по верстке адаптивного сайта с нуля!
Изучите курс и узнайте, как верстать современные сайты на HTML5 и CSS3
Узнать подробнееmin-width: 64em = Hit max-width: 63.99em = Miss max-width: 63.999999em = Hit min-width: 640px = Hit max-width: 639px = Miss max-width: 639.999999px = Miss
min-width: 64em = Hit max-width: 63.99em = Miss max-width: 63.999999em = Hit min-width: 640px = Hit max-width: 639px = Miss max-width: 639.999999px = Miss |
Пример 1б: масштаб в браузере установлен в 100%, ширина окна 639px
min-width: 64em = Miss max-width: 63.99em = Hit max-width: 63.999999em = Hit min-width: 640px = Miss max-width: 639px = Hit max-width: 639.999999px = Hit
min-width: 64em = Miss max-width: 63.99em = Hit max-width: 63.999999em = Hit min-width: 640px = Miss max-width: 639px = Hit max-width: 639.999999px = Hit |
Нельзя использовать 6 цифр после точки для EM, это запускает оба медиа запроса. Пример 2: масштаб в браузере установлен в 110%, ширина окна 704px (так как 640px*110% = 704px)
min-width: 64em = Miss max-width: 63.99em = Miss max-width: 63.999999em = Hit min-width: 640px = Miss max-width: 639px = Miss max-width: 639.999999px = Hit
min-width: 64em = Miss max-width: 63.99em = Miss max-width: 63.999999em = Hit min-width: 640px = Miss max-width: 639px = Miss max-width: 639.999999px = Hit |
Пример 2б: масштаб в браузере установлен в 110%, ширина окна 705px
min-width: 64em = Hit max-width: 63.99em = Miss max-width: 63.999999em = Miss min-width: 640px = Hit max-width: 639px = Miss max-width: 639.999999px = Miss
min-width: 64em = Hit max-width: 63.99em = Miss max-width: 63.999999em = Miss min-width: 640px = Hit max-width: 639px = Miss max-width: 639.999999px = Miss |
Мы не можем использовать две цифры после точки для EM. Нам осталось использовать 6dp. Это работает с зумом в браузерах. Однако… Пример 3: масштаб в браузере установлен в 100%, размер шрифта 20px, ширина окна 800 (640*125% = 800)
min-width: 64em = Hit max-width: 63.99em = Miss max-width: 63.999999em = Hit
min-width: 64em = Hit max-width: 63.99em = Miss max-width: 63.999999em = Hit |
И опять, 6dp для EM использовать нельзя. Нельзя использовать пиксели для медиа запросов, так как они запускают оба запроса 640px/639px, потому что игнорируются EM/REM.
Какой же выход?
К сожалению, ответа нет. Пока браузеры не решат проблемы с округлением, вы в западне. Простейший выход – не создавать min-width и max-width в одном блоке. Пример:
body { @media screen and (max-width: 63.99em) { background: blue; } @media screen and (min-width: 64em) { background: blue; } }
body { @media screen and (max-width: 63.99em) { background: blue; }
@media screen and (min-width: 64em) { background: blue; } } |
Проблема с кодом выше заключается в том, что есть сценарии, когда будут запущены или проигнорированы оба медиа запроса. Так что лучше всего писать что-то такое:
body { background: blue; @media screen and (min-width: 64em) { background: blue; } }
body { background: blue;
@media screen and (min-width: 64em) { background: blue; } } |
Почему не существует реального решения? Мне кажется, люди особо об этом не думают. Любая статистика, где говорится, что люди не меняют размер шрифта в браузере по умолчанию, искажает правду. Опция по изменению размера шрифта в Chrome похоронена в продвинутых настройках.
Ловушки
У данного подхода есть несколько ловушек:
если вы привыкли писать min-width и max-width медиа запросы в одном блоке кода, то вам придется ждать еще дольше;
возрастает сложность, так как вам придется переписать CSS в одну из сторон, вместо того, чтобы просто сказать браузеру, чтобы тот использовал вариант А или B;
возрастает размер файла из-за перезаписей, несильно, но это стоит учесть.
В зависимости от проекта, кто его разрабатывает и таких факторов, как бюджет (нужно быть реалистами), пиксели будут намного проще и быстрее. Намного проще и быстрее игнорировать доступность.
Помните, для кого вы создаете сайты. Проблемы, затронутые в этом посте, актуальны на момент написания, однако постоянные обновления браузеров могут оставить их в прошлом.
Источник: //engageinteractive.co.uk/
Редакция: Команда webformyself.
Практический курс по верстке адаптивного сайта с нуля!
Изучите курс и узнайте, как верстать современные сайты на HTML5 и CSS3
Узнать подробнееPSD to HTML
Практика верстки сайта на CSS Grid с нуля
СмотретьИспользование 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
использует первого родителя сfont-size
для вычисления размера , который он должен отобразить (вычисляется так же, какrem
выше — родительское вычисленное значениеpx
, умноженное на вашеem
)., Если этот родитель используетem
в своемfont-size
, ребенок будет использовать вычисленное/вычисленноеfont-size
родителя.
Объяснение может быть трудным для понимания (особенно em
), посмотрите здесь: https://jsfiddle.net/6ydf931w/
По большей части я стараюсь избегать использования em
почти для всего, потому что это может привести к неожиданным результатам, если вы не будете постоянно знать, где он используется.
Обычно я ограничиваю rem
текстом в том случае, если он должен быть изменен глобально.
px
очень предсказуемо, если это работает для вас, нет никакого вреда в его использовании.
Поделиться NickZA 24 мая 2019 в 20:47
1
Лучше использовать rem вместо пикселей, если вы хотите адаптивный веб-сайт. Это связано с тем, что пиксель является абсолютной единицей, а rem-единицей относительно размера шрифта вашего корня.
Представьте, что у вас есть все ваши элементы в пикселях и вы хотите масштабировать все, когда ваше окно меньше. Если бы у вас были пиксели, вам пришлось бы менять все один за другим. Однако с помощью rem вы можете изменить размер шрифта вашего корня, и все масштабируется сразу.
Попробуйте изменить размер шрифта в приведенном ниже примере и убедитесь в этом сами:
html{
font-size: 30px;
}
.pixel1{
width: 30px;
height: 30px;
background-color: red;
margin-bottom: 10px;
}
.pixel2{
width: 40px;
height: 40px;
background-color: red;
margin-bottom: 10px;
}
.rem1{
width: 1rem;
height: 1rem;
background-color: blue;
margin-bottom: 10px;
}
.rem2{
width: 1.4rem;
height: 1.4rem;
background-color: blue;
}
<div></div>
<div></div>
<div></div>
<div></div>
Поделиться Vasilis Georgoudis 24 мая 2019 в 20:52
- REM / Em Путаница
Сегодня я поиграл с использованием em’s/rem’s на новом сайте, и у меня есть несколько вещей, которые я хотел бы обсудить/спросить Здесь. В течение многих лет я был полностью пиксельным человеком с несколькими процентами, добавленными при необходимости. Я все время читаю, что ЭМ и Рем-это the way,…
- rem, px, mediaqueries для браузеров >=IE9
У меня есть проект, где IE9 -это браузер с минимальной совместимостью. Это означает, что я могу использовать rem -блок. По моему опыту работы с большими проектами, в которых участвует много разработчиков, использование em создает довольно большой беспорядок. Я не говорю, что это плохо само по…
1
И em , и rem являются гибкими, масштабируемыми единицами измерения, которые преобразуются браузером в значения пикселей в зависимости от настроек размера шрифта в вашем дизайне. Если вы используете значение 1em or 1rem,
, оно может быть переведено в браузере как что-либо из 16px to 160px
или любого другого значения.
значения px используются браузером как есть, поэтому 1px
всегда будет отображаться как 1px
.
Перевод единиц rem в значение пикселя определяется размером шрифта элемента html.
Перевод единиц измерения em в значения пикселей определяется размером шрифта элемента, на котором они используются. Используйте em units
для размера, который должен масштабироваться в зависимости от размера шрифта элемента, отличного от root.Use rem
единиц, для размера, который не нуждается в em
единицах, и который должен масштабироваться в зависимости от размера шрифта браузера settings.Use единиц rem на media queries
Поделиться Mubeen Khan 24 мая 2019 в 21:20
Похожие вопросы:
Зачем использовать 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, он не работает хорошо:…
Оформление текста — Material-UI
The theme provides a set of type sizes that work well together, and also with the layout grid.
Шрифт
You can change the font family with the theme.typography.fontFamily
property.
For instance, this demo uses the system font instead of the default Roboto font:
const theme = createTheme({
typography: {
fontFamily: [
'-apple-system',
'BlinkMacSystemFont',
'"Segoe UI"',
'Roboto',
'"Helvetica Neue"',
'Arial',
'sans-serif',
'"Apple Color Emoji"',
'"Segoe UI Emoji"',
'"Segoe UI Symbol"',
].join(','),
},
});
Self-hosted fonts
To self-host fonts, download the font files in ttf
, woff
, and/or woff2
formats and import them into your code.
⚠️ This requires that you have a plugin or loader in your build process that can handle loading ttf
, woff
, and woff2
files. Fonts will not be embedded within your bundle. They will be loaded from your webserver instead of a CDN.
import RalewayWoff2 from './fonts/Raleway-Regular.woff2';
const raleway = {
fontFamily: 'Raleway',
fontStyle: 'normal',
fontDisplay: 'swap',
fontWeight: 400,
src: `
local('Raleway'),
local('Raleway-Regular'),
url(${RalewayWoff2}) format('woff2')
`,
unicodeRange:
'U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF',
};
Next, you need to change the theme to use this new font. In order to globally define Raleway as a font face, the CssBaseline
component can be used (or any other CSS solution of your choice).
const theme = createTheme({
typography: {
fontFamily: 'Raleway, Arial',
},
overrides: {
MuiCssBaseline: {
'@global': {
'@font-face': [raleway],
},
},
},
});
return (
<ThemeProvider theme={theme}>
<CssBaseline />
{children}
</ThemeProvider>
);
Размер шрифта
Material-UI uses rem
units for the font size. The browser <html>
element default font size is 16px
, but browsers have an option to change this value, so rem
units allow us to accommodate the user’s settings, resulting in a better accessibility support. Users change font size settings for all kinds of reasons, from poor eyesight to choosing optimum settings for devices that can be vastly different in size and viewing distance.
To change the font-size of Material-UI you can provide a fontSize
property. The default value is 14px
.
const theme = createTheme({
typography: {
fontSize: 12,
},
});
The computed font size by the browser follows this mathematical equation:
Responsive font sizes
The typography variants properties map directly to the generated CSS. You can use media queries inside them:
const theme = createTheme();
theme.typography.h4 = {
fontSize: '1.2rem',
'@media (min-width:600px)': {
fontSize: '1.5rem',
},
[theme.breakpoints.up('md')]: {
fontSize: '2.4rem',
},
};
To automate this setup, you can use the responsiveFontSizes()
helper to make Typography font sizes in the theme responsive.
You can see this in action in the example below. adjust your browser’s window size, and notice how the font size changes as the width crosses the different breakpoints:
import { createTheme, responsiveFontSizes } from '@material-ui/core/styles';
let theme = createTheme();
theme = responsiveFontSizes(theme);
Fluid font sizes
To be done: #15251.
HTML font size
You might want to change the <html>
element default font size. For instance, when using the 10px simplification.
⚠️ Changing the font size can harm accessibility ♿️. Most browsers agreed on the default size of 16 pixels, but the user can change it. For instance, someone with an impaired vision could have set their browser’s default font size to something larger.
An htmlFontSize
theme property is provided for this use case, which tells Material-UI what the font-size on the <html>
element is. This is used to adjust the rem
value so the calculated font-size always match the specification.
const theme = createTheme({
typography: {
htmlFontSize: 10,
},
});
html {
font-size: 62.5%;
}
You need to apply the above CSS on the html element of this page to see the below demo rendered correctly
Variants
The typography object comes with 13 variants by default:
- h2
- h3
- h4
- h5
- h5
- h6
- subtitle1
- subtitle2
- body1
- body2
- button
- caption
- overline
Each of these variants can be customized individually:
const theme = createTheme({
typography: {
subtitle1: {
fontSize: 12,
},
body1: {
fontWeight: 500,
},
button: {
fontStyle: 'italic',
},
},
});
Default values
You can explore the default values of the typography using the theme explorer or by opening the dev tools console on this page (window.theme.typography
).
Разница между единицами измерения 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 в CSS? [закрыто]
Я хотел бы похвалить ответ Джош3736 за предоставление превосходного исторического контекста. Несмотря на то, что он четко сформулирован, ландшафт CSS изменился почти за пять лет, с тех пор как был задан этот вопрос. Когда был задан этот вопрос, px
был правильный ответ, но сегодня это уже не так.
тл; др: использоватьrem
Обзор объекта
Исторически px
единицы обычно представляли собой один пиксель устройства. Для устройств с более высокой и более высокой плотностью пикселей это больше не распространяется на многие устройства, например на Retina Display от Apple.
rem
единицы представляют собой г OOT эм размера. Это font-size
из всех совпадений:root
. В случае с HTML это <html>
элемент; для SVG это <svg>
элемент. По умолчанию font-size
в каждом браузере * 16px
.
На момент написания статьи rem
поддерживается примерно 98% пользователей . Если вы беспокоитесь о других 2%, я напомню вам, что медиа-запросы также поддерживаются примерно 98% пользователей .
По использованию
px
Большинство примеров CSS в Интернете используют px
значения, потому что они были стандартом де-факто. pt
,in
А также ряд других подразделений могли быть использованы в теории, но они не обрабатывать небольшие значения хорошо , как вы бы быстро нужно прибегать к фракциям, которые были больше к типу, и труднее рассуждать о.
Если вы хотите тонкую границу, px
вы можете использовать 1px
, сpt
чтобы использовать ее 0.75pt
для получения стабильных результатов, а это не очень удобно.
По использованию
rem
rem
Значение по умолчанию 16px
не очень сильный аргумент для его использования. Письмо 0.0625rem
это хуже , чем письма0.75pt
, так почему бы кто — нибудь использовать rem
?
Есть две части rem
преимущество перед другими подразделениями.
- Пользовательские настройки соблюдаются
- Вы можете изменить кажущееся
px
значениеrem
на то, что вы хотите
Уважение предпочтений пользователя
Масштаб браузера сильно изменился за эти годы. Исторически многие браузеры только font-size
расширялись, но это изменилось довольно быстро, когда веб-сайты поняли, что их прекрасные пиксельные дизайны ломаются всякий раз, когда кто-то увеличивает или уменьшает масштаб. На этом этапе браузеры масштабируют всю страницу, поэтому масштабирование на основе шрифта не входит в изображение.
Уважение пожеланий пользователя не исключено. То, что браузер настроен 16px
по умолчанию, не означает, что ни один пользователь не может изменить свои предпочтения 24px
или 32px
исправить слабое зрение или плохую видимость (например, блики на экране). Если вы основываете свои единицы измерения rem
, любой пользователь с более высоким размером шрифта увидит пропорционально больший сайт. Границы будут больше, отступы будут больше, поля будут больше, все будет плавно увеличиваться.
Если вы основываете свои медиазапросы rem
, вы также можете убедиться, что сайт, который видят ваши пользователи, соответствует их экрану. Пользователь с font-size
набором для 32px
на 640px
широкий браузер, будет эффективно видеть ваш сайт , как показано пользователю в 16px
на 320px
широком браузере. Там нет абсолютно никаких потерь для RWD в использованииrem
.
Изменение видимого
px
значенияПоскольку rem
основан на font-size
на :root
узле, если вы хотите , чтобы изменить то , что 1rem
представляет собой, все , что вам нужно сделать , это изменить font-size
:
:root {
font-size: 100px;
}
body {
font-size: 1rem;
}
<p>Don't ever actually do this, please</p>
Что бы вы ни делали, не установить :root
элемент font-size
к px
значению.
Если установить font-size
на html
к аpx
значению, вы сдуваетесь предпочтениями пользователя без пути , чтобы получить их обратно.
Если вы хотите изменить кажущееся значение rem
, используйте %
единицы измерения.
Математика для этого достаточно проста.
Кажущийся размер шрифта :root
равен 16px
, но допустим, мы хотим изменить его на 20px
. Все, что нам нужно сделать, это умножить 16
на некоторое значение, чтобы получить 20
.
Настройте свое уравнение:
16 * X = 20
И решить для X
:
X = 20 / 16
X = 1.25
X = 125%
:root {
font-size: 125%;
}
<p>If you're using the default font-size, I'm 20px tall.</p>
Делать все кратно 20
не так уж и здорово, но общее предложение — сделать видимый размер rem
равным 10px
. Магическое число для того, 10/16
что есть 0.625
, или 62.5%
.
:root {
font-size: 62.5%;
}
<p>If you're using the default font-size, I'm 10px tall.</p>
Сейчас проблема заключается в том , что используемое по умолчанию font-size
для остальной части страницы набора слишком малы, но есть простое исправление для этого: Установить font-size
на body
использовании rem
:
:root {
font-size: 62.5%;
}
body {
font-size: 1.6rem;
}
<p>I'm the default font-size</p>
Важно отметить, что с этой корректировкой очевидное значение rem
— 10px
это означает, что любое значение, в которое вы могли записать, px
может быть преобразовано непосредственно rem
путем увеличения десятичного разряда.
padding: 20px;
превращается в
padding: 2rem;
Выбранный вами размер шрифта зависит от вас, поэтому, если вы хотите, нет никаких причин, по которым вы не можете использовать:
:root {
font-size: 6.25%;
}
body {
font-size: 16rem;
}
и имеют 1rem
равные 1px
.
Таким образом, у вас есть простое решение, которое учитывает пожелания пользователя и позволяет избежать чрезмерного усложнения вашего CSS.
Подожди, так в чем подвох?
Я боялся, что ты спросишь это. Как бы мне ни хотелось притворяться, что rem
это магия и решает все, есть еще некоторые вопросы, на которые стоит обратить внимание. На мой взгляд , ничего страшного , но я собираюсь их вызвать, так что вы не можете сказать, что я вас не предупреждал.
Медиа-запросы (использование
em
)Одна из первых проблем, с которой вы столкнетесь, rem
связана с медиа-запросами. Рассмотрим следующий код:
:root {
font-size: 1000px;
}
@media (min-width: 1rem) {
:root {
font-size: 1px;
}
}
Здесь значение rem
меняется в зависимости от того, применяется ли медиа-запрос, а медиа-запрос зависит от значения rem
, так что же происходит?
rem
в запросах медиа использует начальное значение font-size
и не должны (смотрите раздел Safari) принимать во внимание любые изменения , которые могут произойти с font-size
из :root
элемента. Другими словами, это очевидная ценность всегда 16px
.
Это немного раздражает, потому что это означает, что вам нужно выполнить некоторые дробные вычисления, но я обнаружил, что большинство распространенных медиа-запросов уже используют значения, кратные 16.
| px | rem |
+------+-----+
| 320 | 20 |
| 480 | 30 |
| 768 | 48 |
| 1024 | 64 |
| 1200 | 75 |
| 1600 | 100 |
Кроме того, если вы используете препроцессор CSS, вы можете использовать миксины или переменные для управления медиазапросами, что полностью замаскирует проблему.
СафариК сожалению, в Safari есть известная ошибка, из-за которой изменение :root
размера шрифта действительно изменяет вычисленные rem
значения для диапазонов медиазапроса. Это может вызвать очень странное поведение, если размер шрифта :root
элемента изменяется в медиа-запросе. К счастью, решение простое: используйте em
единицы для медиазапросов .
Переключение контекста
Если вы переключаетесь между проектами между различными проектами, вполне возможно, что кажущийся размер шрифта rem
будет иметь разные значения. В одном проекте вы можете использовать очевидный размер, а 10px
в другом — очевидный размер 1px
. Это может привести к путанице и вызвать проблемы.
Моя единственная рекомендация здесь — придерживаться 62.5%
конвертирования rem
в видимый размер 10px
, потому что в моем опыте это встречалось чаще.
Общие CSS библиотеки
Если вы пишете CSS, который будет использоваться на сайте, который вы не контролируете, например, для встроенного виджета, на самом деле нет хорошего способа узнать, какой rem
будет видимый размер . Если это так, не стесняйтесь продолжать использовать px
.
Однако, если вы все еще хотите использовать rem
, рассмотрите возможность выпуска Sass или LESS версии таблицы стилей с переменной, чтобы переопределить масштабирование для видимого размера rem
.
* Я не хочу отговаривать кого-либо от использования rem
, но я не смог официально подтвердить, что каждый браузер использует 16px
по умолчанию. Видите ли, есть много браузеров, и для одного браузера было бы не так уж и сложно отклониться, скажем, 15px
или 18px
. Однако при тестировании я не видел ни одного примера, в котором браузер, использующий настройки по умолчанию, в системе, использующей настройки по умолчанию, имел какое-либо значение, кроме 16px
. Если вы найдете такой пример, пожалуйста, поделитесь им со мной.
Размеры шрифтов CSS. Пиксели vs Em vs Rem vs Проценты vs Viewport единицы
В этой статье вы узнаете про выставление размера шрифта в пикселях, em, rem, процентах и viewport единицах.
Эта статья перевод — CSS Font Sizing: Pixels vs Em vs Rem vs Percent vs Viewport Units
Очень много обсуждений велось по поводу пикселей, em
, процентов, rem
и какое свойство шрифтов когда использовать. Не смотря на более сотни статей в сети, эта тема может быть довольно запутанной, учитывая то, как использование этих свойств шрифтов разнится в зависимости от нужд наших проектов. Для примера, некоторые советуют не использовать фиксированные пиксели на базовом уровне (html и body элементы), так как пользователь не будет иметь возможности сбросить размер шрифтов под свои параметры. Но для людей типа меня, которые зависимы от bootstrap, это не совсем благоразумно. Мы заканчиваем с фиксированными основными значениями в пикселях и начинаем создавать свойства шрифтов для всего проекта, отталкиваясь от основных пиксельных значений.
Эта статья объясняет разницу между свойствами шрифтов и как лучше их использовать. Естественно нет конкретного пути того, как это делать и большая часть того какой шрифт использовать и насколько будет определяющим этот момент, основываясь на понимании единиц размерности шрифтов и тип проекта — всё это определяющие моменты, от которых зависит выборка в вариативности инструментов.
ПикселиПеред наступлением эпохи адаптивного дизайна, пиксели широко использовались как единица размерности шрифтов для всего от типографики до ширины, отступов и высоты. Тем не менее, пиксели это единицы с фиксированным размером и они не меняются, основываясь на размере viewport или масштабности. Если вы хотите сделать адаптивный сайт, используя пиксели, то это может стать довольно сложным занятием, так как вам придется отслеживать все значения основанные на пикселях в CSS, включая значения в медиа запросах. Так какое же свойство шрифта мы можем использовать, чтобы делать минимальные изменения в нашем CSS, но оставаться масштабируемыми? И тут нам на помощь приходят em, rem, проценты и единицы viewport.
EmEm
— гибкая масштабируемая единица, которая конвертируется браузером в пиксели. Если стандартный размер шрифта в Chrome равен 16px, то 1 em
= 16px
. Главное заблуждение по поводу em в том, что оно зависит от размера шрифта родительского элемента. Следуя спецификации W3, em относителен размеру шрифта элемента на котором их используют. Em
широко используются для типографии, такой как заголовки, текста, параграфы и с элементами ассоциированными с ней, такими как внешние отступы и внутренние. Если вы выставите базовый размер шрифта для для html
и body
элементов в пикселях и свойства ваших типографических элементов будут определяться в с помощью em, для адаптивного дизайна все что вам нужно будет сделать это изменить стандартный размер шрифта на базовом уровне, например.
@media (max-width: 400px) {
html, body { font-size: 15px; }
}
и все em
значения будут автоматически пересчитаны.
Тем не менее, у em есть большое предостережение! Наследование!
Для примера, <div>
с размером шрифта в 16px
содержит <p>
размером шрифта в 2em
, что пересчитывается как 32px
для <p>
. Теперь добавьте <div>
в <p>
с размером шрифта в 0.5em
, как результат у дива будет размер 16px
, как у половины от 32px
, а не 8px
. И тут нам на помощь приходят rem.
rem
относителен размеру шрифта корневого элемента(html
элемент). Если размер шрифта html
элемента равен 16px
, то 1rem
= 16px
. Rem
будет ВСЕГДА относителен корневому элементу, не полагаясь на вложенные элементы. Тем не менее, использование исключительно rem без em может вызвать своеобразные проблемы в плане типографики, так как она может стать слишком большой или маленькой, что приведет к проблемам в масштабируемости.
Значения в процента всегда относительны от другого значения, будь это родительское значение элемента или другое свойство элемента. Проценты широко используются в адаптивном дизайне. Отличный тому пример Bootstrap. Двенадцати колоночный макет бутстрапа имеет значения ширины выставленные в процентах, таким образом они всегда гибкие и подстраиваются относительно родительского элемента.
Проценты широко используются для выставления ширины и высоты контейнеров, дивов и для адаптивной графики.
Единицы viewportШирина и высота viewport свойств относительна ширине/высоте заданного размера viewport.
Подробно про viewport единицы вы можете почитать в этой статье.
1vw
= 1% ширины viewport
1vh
= 1% высоты viewport
Viewport в данному случае означает размер окна браузера. Если вы хотите выставить размер элемента, основываясь на ширине viewport, а не на родительском/корневом элементе, то viewport единицы это то, что вам нужно. vw
/vh
единицы отлично работают с типографикой и широко используются там же.
С тех пор как я часто начал использовать Bootstrap, мой стандартный размер базового шрифта стал в пикселях. Я использую проценты, чтобы выставить ширину и высоту для изображений, контейнеров и дивов, а em и rem для типографики и элементов относящихся к типографике, таким как margin
и padding
и т. п. Сейчас я играюсь с единицами viewport для адаптивной типографики и нахожу это очень крутым. Экспериментируйте с этими свойствами как можно больше и вы вскоре найдете стиль подогнанный именно для вас.
единиц CSS
Единицы CSS
CSS имеет несколько различных единиц для выражения длины.
Многие свойства CSS принимают значения длины, такие как ширина
, поле
, отступ
, размер шрифта
и т. Д.
Длина — это число, за которым следует единица длины, например 10px
, 2em
и т. Д.
Пример
Установите разные значения длины, используя px (пиксели):
h2 {размер шрифта: 60 пикселей;
}
p {
font-size: 25px;
высота строки: 50 пикселей;
}
Попробуйте сами »
Примечание: Пробел не может быть между числом и единицей измерения.Однако, если значение 0
, блок можно не устанавливать.
Для некоторых свойств CSS разрешена отрицательная длина.
Существует два типа единиц длины: абсолютных и относительных .
Абсолютные длины
Абсолютные единицы длины являются фиксированными, и длина, выраженная в любой из них, будет отображаться как точно такой же размер.
Единицы абсолютной длины не рекомендуется использовать на экране, потому что размеры экрана сильно различаются.Однако их можно использовать, если известно средство вывода, например что касается макета печати.
Установка | Описание |
---|---|
см | см Попытайся |
мм | миллиметров Попытайся |
дюйм | дюймов (1 дюйм = 96 пикселей = 2,54 см) Попытайся |
пикселей * | пикселей (1 пиксель = 1/96 часть 1 дюйма) Попытайся |
пт | баллов (1pt = 1/72 от 1in) Попытайся |
шт | пик (1 шт. = 12 пт) Попытайся |
* Пикселей (пикселей) относительно устройства просмотра.Для устройств с низким разрешением 1 пиксель — это один пиксель (точка) дисплея устройства. Для принтеров и высокого разрешения экраны 1px подразумевает несколько пикселей устройства.
Относительная длина
Единицы относительной длины определяют длину относительно другого свойства длины. Относительные единицы длины лучше масштабируются между различными средами визуализации.
Установка | Описание | |
---|---|---|
выс. | Относительно размера шрифта элемента (2em означает 2-кратный размер текущего шрифта) | Попробовать |
бывш. | Относительно высоты текущего шрифта по оси x (используется редко) | Попробовать |
шасси | Относительно ширины «0» (нуля) | Попробовать |
rem | Относительно размера шрифта корневого элемента | Попробовать |
VW | Относительно 1% ширины области просмотра * | Попробовать |
vh | Относительно 1% высоты области просмотра * | Попробовать |
vmin | Относительно 1% меньшего размера области просмотра * | Попробовать |
vmax | Относительно 1% большего размера области просмотра * | Попробовать |
% | Относительно родительского элемента | Попробовать |
Совет: Единицы em и rem идеально подходят для создания идеальных
масштабируемый макет!
* Viewport = размер окна браузера.Если область просмотра 50 см
широкий, 1vw = 0,5 см.
Поддержка браузера
Числа в таблице указывают первую версию браузера, полностью поддерживающую единица длины.
Блок длины | |||||
---|---|---|---|---|---|
em, ex,%, px, cm, mm, in, pt, pc | 1,0 | 3,0 | 1,0 | 1,0 | 3,5 |
шасси | 27.0 | 9,0 | 1,0 | 7,0 | 20,0 |
rem | 4,0 | 9,0 | 3,6 | 4,1 | 11,6 |
vh, vw | 20,0 | 9,0 | 19,0 | 6,0 | 20,0 |
vmin | 20,0 | 12,0 | 19,0 | 6.0 | 20,0 |
vmax | 26,0 | 16,0 | 19,0 | 7,0 | 20,0 |
CSS-единиц для font-size: px | em | rem | Диксита Ганатра
Фото Александра Эндрюса на Unsplash Когда я начал копаться в CSS, я нашел различные единицы для font-size
. Было немного непонятно, какой из них использовать, когда, где и почему. Потратив некоторое время, я нашел три устройства, которые решил использовать в своих проектах — px
, em
и rem
.
Пиксели — это самый простой способ измерения. Но есть загвоздка. Допустим, мы использовали пиксели по всему нашему сайту, и мы также управляли медиа-запросами. Что, если пользователь изменит размер шрифта по умолчанию браузера (или устройства)? Размер шрифта вашего заголовка (скажем, 20 пикселей) останется 20 пикселей. Следовательно, настройки шрифта пользователя не будут отражены. Что не очень удобно для пользователей. Таким образом, пиксели могут хорошо справляться с интервалом и макетом, но не подходят для размера шрифта. На помощь приходят em s и rem s.
em
равно вычисленному размеру шрифта родительского элемента. Например, если есть элемент div
, определенный с размером шрифта : 16px
, то для этого div
и для его дочерних элементов 1em = 16px
.
Если размер шрифта не определен явно, этот элемент унаследует его от родительского элемента. Таким образом между предками происходит наследование до корневого элемента. Размер шрифта по умолчанию для корневого элемента предоставляется браузером.
Вот пример для em.
Здесь вы можете видеть, что мы дали font-size: 20px от
до .parent
и font-size: 1.5em от
до .child
. Вычисленные размеры шрифта для .child
( #outerChild
и #innerChild
) различаются. #outerChild
использует размер шрифта из родительского .parent
. Итак, вычисленный размер шрифта #outerChild
будет 1,5 * 20 пикселей = 30 пикселей. А #innerChild
использует размер шрифта из своего родительского #outerChild
(для которого уже вычислен размер шрифта 30 пикселей).Следовательно, вычисленный размер шрифта вложенного .child
будет 1,5 * 30 пикселей = 45 пикселей.
Если вы хотите использовать на
для своих юнитов, будьте осторожны с компоновкой. При использовании em
в вашем проекте рекомендуется не определять размер шрифта явно, за исключением корневого элемента.
em
отлично работает с макетом, таким как меню боковой панели, где вы хотите, чтобы элементы подменю постепенно имели меньший размер шрифта. Вот пример этого.
Вы также можете использовать em
с медиа-запросами.Вот отличная статья, которая мне очень помогла.
rem
значений относятся к корневому элементу html
, а не к родительскому элементу. То есть, если размер шрифта корневого элемента составляет 16 пикселей, то 1 rem = 16 пикселей для всех элементов. Если размер шрифта не определен явно в корневом элементе, то 1rem будет равен размеру шрифта по умолчанию, предоставленному браузером (обычно 16 пикселей).
Когда дело доходит до интервала и размера шрифта, я предпочитаю использовать rem
. Начиная с rem
использует размер шрифта корневого элемента вместо размера шрифта его родительского элемента.
Предположим, font-size: 10px
установлено для корневого элемента, что делает 1rem = 10px везде на нашей веб-странице. Поскольку 1px = 0.1rem, вычисления просты. Но установка размера корневого шрифта в пикселях будет иметь ту же проблему, что я упоминал в разделе пикселей .
Решение этой проблемы — процентов . Обычно размер шрифта браузера по умолчанию составляет 16 пикселей. Установка font-size: 100%
сделает 1rem = 16px. Но это немного затруднит расчеты.Лучше установить font-size: 62,5%
. Потому что 62,5% от 16 пикселей составляет 10 пикселей. Таким образом, 1rem = 10px.
Вот пример кода в SCSS:
Вы можете увидеть результаты, изменив размер шрифта в браузере, а также попытавшись увеличить или уменьшить масштаб.
em s и rem s решили проблемы, с которыми я столкнулся при использовании пикселей. Я использую rem
в интервале (поля, отступы и т. Д.) И размере шрифта. И я использую em
для макетов, таких как меню.Если вы знаете другие варианты использования em и rem, дайте мне знать в твиттере.
В чем разница между PX, EM, REM,%, VW и VH?
При проектировании с помощью Elementor вы можете заметить, что у некоторых элементов есть параметры для выбора размера, позволяющие выбрать PX, EM, REM,%, VW, или VH . Но что на самом деле означают эти параметры и когда следует использовать один вместо другого?
Начнем с основ.
В CSS вы можете указать размеры или длину элементов, используя различные единицы измерения.Единицы измерения, которые вы найдете в некоторых вариантах Elementor, включают PX, EM, REM,%, VW и VH , хотя в CSS доступно несколько других. Не каждый элемент Elementor предлагает все эти единицы. Elementor представляет только те параметры, которые наиболее подходят для данного элемента.
Самый важный аспект, который нужно знать о различных единицах измерения, заключается в том, что некоторые единицы, такие как PX, являются абсолютными, а некоторые — относительными.
Абсолютные единицы
PX : пиксели (пиксели) считаются абсолютными единицами, хотя они относятся к DPI и разрешению устройства просмотра.Но на самом устройстве блок PX зафиксирован и не меняется ни на каком другом элементе. Использование PX может быть проблематичным для отзывчивых сайтов, но они полезны для поддержания согласованного размера некоторых элементов. Если у вас есть элементы, размер которых нельзя изменять, то хорошим выбором будет использование PX.
Относительные единицы
EM : относительно родительского элемента
REM : относительно корневого элемента (тег HTML)
% : относительно родительского элемента
VW : относительно ширины окна просмотра
VH : относительно высоты окна просмотра
В отличие от PX, относительные единицы, такие как%, EM и REM, лучше подходят для адаптивного дизайна, а также помогают соответствовать стандартам доступности.Относительные единицы лучше масштабируются на разных устройствах, поскольку их можно увеличивать и уменьшать в соответствии с размером другого элемента.
Рассмотрим простой пример.
В большинстве браузеров размер шрифта по умолчанию составляет 16 пикселей. Относительные единицы рассчитывают размер на основе этой базы. Если вы измените эту базу, установив базовый размер для HTML-тега с помощью CSS, тогда он станет основой для вычисления относительных единиц на всей остальной странице. Аналогичным образом, если пользователь изменяет размер шрифта, это становится основой для вычисления относительных единиц.
Итак, что означают эти единицы при работе со значением по умолчанию 16 пикселей?
Указанное вами число умножит это число на размер по умолчанию.
1em = 16 пикселей (1 * 16)
2em = 32 пикселя (2 * 16)
. 5em = 8 пикселей (0,5 * 16)
1рем = 16 пикселей
2rem = 32 пикс.
.5rem = 8 пикселей
100% = 16 пикселей
200% = 32 пикс.
50% = 8 пикселей
Хорошо, отлично, но что, если вы или пользователь измените размер по умолчанию? Поскольку это относительные единицы, окончательные значения размера будут основаны на новом базовом размере.Хотя значение по умолчанию — 16 пикселей, если вы или пользователь измените его на 14 пикселей, то рассчитанные размеры будут равны:
.1em = 14 пикселей (1 * 14)
2em = 28 пикселей (2 * 14)
. 5em = 7 пикселей (0,5 * 14)
1рем = 14 пикселей
2rem = 28 пикселей
.5rem = 7px
100% = 14 пикселей
200% = 28 пикселей
50% = 7 пикселей
Это дает пользователю возможность настраивать размер шрифта браузера по умолчанию, сохраняя при этом относительный масштаб каждого элемента, который вы указали.
В чем разница между EM и REM?
Глядя на диаграмму выше, видно, что EM и REM выглядят совершенно одинаково. Так чем же они отличаются?
Проще говоря, они различаются по наследству. Как уже упоминалось, REM основан на корневом элементе (HTML). Каждый дочерний элемент, использующий REM, будет затем использовать корневой размер HTML в качестве точки вычисления, независимо от того, заданы ли для родительского элемента какие-либо другие размеры.
EM, с другой стороны, основан на размере шрифта родительского элемента.Если размер родительского элемента отличается от размера корневого элемента, расчет EM будет основан на родительском элементе, а не на корневом элементе. Это означает, что вложенные элементы, которые используют EM для определения размеров, иногда могут иметь размер, которого вы не ожидали. С другой стороны, он дает вам более детальный контроль, если вам нужно указать размер определенной области страницы.
Так что насчет%, VW и VH? О чем они все?
В то время как PX, EM и REM в основном используются для изменения размера шрифта,%, VW и VH в основном используются для полей, отступов, интервалов и ширины / высоты.
Повторюсь, VH означает «высота области просмотра», которая является видимой высотой экрана. 100VH будет представлять 100% высоты области просмотра или полную высоту экрана. И, конечно же, VW означает «ширина области просмотра», то есть видимая ширина экрана. 100VW будет представлять 100% ширины области просмотра или полную ширину экрана. % отражает процентную долю размера родительского элемента, независимо от размера области просмотра.
Давайте посмотрим на несколько примеров, когда Elementor предоставляет параметры%, VW и VH.
Ширина столбца : если вы редактируете макет столбца Elementor, вы заметите, что доступна только одна единица измерения ширины -%. Ширина столбцов работает хорошо и гибко только при использовании процентов, поэтому других вариантов не предусмотрено.
Поля : Поля раздела могут быть указаны в формате PX или%. Использование% обычно предпочтительнее, чтобы поля не превышали размер содержимого, например, при уменьшении масштаба для мобильного устройства. При использовании процента от ширины устройства ваши поля останутся относительно размера содержимого, что почти всегда предпочтительнее.
Padding : заполнение раздела может быть указано в PX, EM или%. Как и в случае с полями, часто предпочтительнее использовать либо EM, либо%, чтобы отступы оставались относительными по мере увеличения размера страницы.
Размер шрифта : если вы измените типографику элемента, например заголовка, вы увидите четыре варианта: PX, EM, REM и VH
.Вы когда-нибудь создавали большой заголовок и восхищались тем, как хорошо он выглядит на настольном компьютере, только чтобы понять, что он слишком велик на мобильном устройстве? (Признание вины: неоднократно).
Ключом к элегантному решению этой проблемы является использование EM, REM или VW вместо PX. Что вы выберете, зависит от вашей конкретной ситуации. Я обычно выбираю EM, потому что хочу, чтобы размер был относительно родительского заголовка. Но если вы предпочитаете, чтобы размер был относительно размера корня (HTML), выберите вместо этого REM. Или вы можете установить его относительно ширины области просмотра (VW), если это лучше для вашего случая.
Обратите внимание, что вы также можете установить определенные значения PX размера шрифта для каждого устройства, используя значки устройств, чтобы указать размер для настольных компьютеров, планшетов и мобильных устройств.Но это по-прежнему накладывает ограничения на скорость отклика и доступность, так что имейте это в виду, если вы выберете PX.
Подробнее о VW и VH
Единицы окна просмотра представляют собой процент от текущего окна просмотра браузера (текущий размер браузера). Хотя это похоже на единицы измерения%, есть разница. Единицы области просмотра рассчитываются как процент от текущего размера области просмотра браузера. С другой стороны, процентные единицы рассчитываются как процент от родительского элемента, который может отличаться от размера области просмотра.
Рассмотрим пример области просмотра мобильного экрана размером 480 x 800 пикселей.
1 VW = 1% ширины области просмотра (или 4,8 пикселя)
50 VW = 50% ширины области просмотра (или 240 пикселей)
1 VH = 1% высоты окна просмотра (или 8 пикселей)
50 VH = 50% высоты области просмотра (или 400 пикселей)
Если размер области просмотра изменяется, размер элемента изменяется соответственно.
Когда следует использовать одно устройство вместо другого?
В конце концов, на этот вопрос нет однозначного ответа.В общем, часто лучше выбрать одну из относительных единиц вместо PX, чтобы ваша веб-страница имела наилучшие шансы на рендеринг красивого адаптивного дизайна. Однако выберите PX , если вам нужно гарантировать, что размер элемента никогда не изменится в любой точке останова и останется неизменным независимо от того, выбрал ли пользователь другой размер по умолчанию. Устройства PX обеспечивают стабильные результаты, даже если они не идеальны.
EM относительно размера шрифта родительского элемента, поэтому, если вы хотите масштабировать размер элемента на основе размера его родителя, используйте EM.
REM относительно размера шрифта корневого (HTML), поэтому, если вы хотите масштабировать размер элемента на основе размера корня, независимо от размера родительского элемента, используйте REM. Если вы использовали EM и обнаружили проблемы с размером из-за большого количества вложенных элементов, REM, вероятно, будет лучшим выбором.
VW полезен для создания элементов полной ширины (100%), заполняющих всю ширину области просмотра. Конечно, вы можете использовать любой процент ширины области просмотра для достижения других целей, например, 50% для половины ширины и т. Д.
VH полезен для создания элементов полной высоты (100%), которые заполняют всю высоту области просмотра. Конечно, вы можете использовать любой процент высоты окна просмотра для достижения других целей, например, 50% для половины высоты и т. Д.
% похож на VW и VH, но его длина не связана с шириной или высотой области просмотра. Вместо этого это процент от ширины или высоты родительского элемента. Например, процентные единицы часто используются для установки ширины полей.
Elementor позволяет легко выбрать вариант, который лучше всего подходит для вашего дизайна. В конце концов, это ваш выбор.
html — Должен ли я использовать единицы значений px или rem в моем CSS?
Я хотел бы похвалить ответ josh4736 за предоставление отличного исторического контекста. Несмотря на то, что он хорошо сформулирован, ландшафт CSS изменился за почти пять лет, прошедших с того момента, как был задан этот вопрос. Когда был задан этот вопрос, пикселей
было правильным ответом, но сегодня это уже не так.
tl; dr: использовать rem
Обзор устройства
Исторически пикселей
единиц обычно представляли один пиксель устройства. С устройствами, имеющими все более и более высокую плотность пикселей, это больше не актуально для многих устройств, например, с дисплеем Retina от Apple.
rem
единиц представляют размер r oot em . Это размер шрифта
для всего, что соответствует : root
. В случае HTML это элемент
; для SVG это элемент
.Размер шрифта по умолчанию
в каждом браузере * равен 16px
.
При использовании
пикселей
В большинстве примеров CSS в Интернете используются значения пикселей и
, потому что они были стандартом де-факто. 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 * X = 20
И решите для X
:
X = 20/16
Х = 1,25
Х = 125%
: root {
размер шрифта: 125%;
}
Если вы используете размер шрифта по умолчанию, у меня высота 20 пикселей.
Делать все, кратное 20
, не так уж и хорошо, но общее предложение — сделать видимый размер rem
равным 10px
.Магическое число для этого — 10/16
, что равно 0,625
или 62,5%
.
: root {
размер шрифта: 62,5%;
}
Если вы используете размер шрифта по умолчанию, у меня высота 10 пикселей.
Проблема теперь в том, что ваш размер шрифта по умолчанию
для остальной части страницы установлен слишком малым, но для этого есть простое решение: установите размер шрифта
на body
, используя rem
:
: root {
размер шрифта: 62.5%;
}
тело {
размер шрифта: 1.6rem;
}
Я размер шрифта по умолчанию
Важно отметить, что с этой настройкой кажущееся значение rem
равно 10px
, что означает, что любое значение, которое вы могли бы записать в px
, можно преобразовать напрямую в rem
, ударив десятичный разряд.
отступ: 20 пикселей;
превращается в
набивка: 2рем;
Видимый размер шрифта, который вы выбираете, зависит от вас, поэтому, если вы хотите, нет причин, по которым вы не можете использовать:
: root {
размер шрифта: 6.25%;
}
тело {
размер шрифта: 16rem;
}
и 1rem
равно 1px
.
Итак, у вас есть простое решение, учитывающее пожелания пользователей и позволяющее избежать чрезмерного усложнения вашего CSS.
Подожди, а в чем прикол?
Я боялся, что вы спросите об этом. Как бы я ни хотел притвориться, что rem
— волшебство и решает все проблемы, все же есть некоторые важные проблемы. Ничего особенного в , на мой взгляд, , но я позвоню им, чтобы вы не могли сказать, что я вас не предупреждал.
Media Queries (используйте
em
) Одна из первых проблем, с которыми вы столкнетесь с rem
, связана с медиа-запросами. Рассмотрим следующий код:
: root {
размер шрифта: 1000 пикселей;
}
@media (min-width: 1rem) {
:корень {
размер шрифта: 1px;
}
}
Здесь значение rem
изменяется в зависимости от того, применяется ли медиа-запрос, а медиа-запрос зависит от значения rem
, так что же, черт возьми, происходит?
rem
в медиа-запросах использует начальное значение font-size
и не должно (см. Раздел Safari) учитывать любые изменения, которые могли произойти с размером шрифта
элемента : root
.Другими словами, очевидное значение — , всегда 16px
.
Это немного раздражает, потому что это означает, что вам нужно выполнить или дробных вычислений, но я обнаружил, что в большинстве распространенных медиа-запросов уже используются значения, кратные 16.
| px | rem |
+ ------ + ----- +
| 320 | 20 |
| 480 | 30 |
| 768 | 48 |
| 1024 | 64 |
| 1200 | 75 |
| 1600 | 100 |
Кроме того, если вы используете препроцессор CSS, вы можете использовать миксины или переменные для управления медиазапросами, которые полностью замаскируют проблему.
Safari К сожалению, в Safari есть известная ошибка, при которой изменения размера шрифта : root
действительно изменяют вычисленные значения rem
для диапазонов медиа-запросов. Это может вызвать очень странное поведение, если размер шрифта элемента : root
изменяется в медиа-запросе. К счастью, решение простое: используйте em
единиц для медиа-запросов.
Переключение контекста
Если вы переключаетесь между разными проектами, вполне возможно, что видимый размер шрифта rem
будет иметь разные значения.В одном проекте вы можете использовать видимый размер 10px
, тогда как в другом проекте видимый размер может быть 1px
. Это может сбивать с толку и вызывать проблемы.
Моя единственная рекомендация — придерживаться 62,5%
, чтобы преобразовать rem
в видимый размер 10px
, потому что, по моему опыту, это было более распространено.
Общие библиотеки CSS
Если вы пишете CSS, который будет использоваться на сайте, который вы не контролируете, например, для встроенного виджета, на самом деле нет хорошего способа узнать, какой видимый размер будет иметь rem
.Если это так, не стесняйтесь продолжать использовать пикселей
.
Если вы все еще хотите использовать rem
, рассмотрите возможность выпуска версии таблицы стилей Sass или LESS с переменной, чтобы переопределить масштабирование для видимого размера rem
.
* Я не хочу никого отпугивать от использования rem
, но я не смог официально подтвердить, что каждый браузер использует по умолчанию 16px
. Видите ли, существует множество браузеров, и для одного браузера не так уж сложно было бы хоть немного разойтись, скажем, до 15px
или 18px
.Однако при тестировании я не видел ни одного примера, где бы браузер, использующий настройки по умолчанию в системе с настройками по умолчанию, имел любое значение, отличное от 16px
. Если найдете такой пример, поделитесь, пожалуйста, со мной.
Размер в CSS: px vs em vs rem
Мы уже знакомы с использованием пикселей для изменения размера в CSS, но зачем использовать em или rem ? Создавая доступные веб-сайты, вы должны учитывать их включение. Когда вы используете пикселей , вы не ставите предпочтения пользователя во главу угла.Когда пользователь увеличивает масштаб или изменяет настройку шрифта браузера, веб-сайты должны настраиваться в соответствии с настройками пользователя. пикселей
не масштабируются, но масштабируются em
и rem
.
Как продолжение этого, рекомендуется устанавливать размер шрифта элемента html в процентах. Предполагая, что размер шрифта браузера установлен на 16 пикселей (т. Е. По умолчанию), установка размера шрифта элемента html (корневого) на 62,5% будет по умолчанию 1rem равным 10 пикселей.
Вы могли какое-то время использовать em
и rem
CSS, но разница между ними все еще нечеткая.В этой статье я расскажу о различиях и о том, когда использовать конкретный модуль, чтобы избежать создания веб-сайтов с непропорциональным размером.
Разница
пикселей ( пикселей,
) — это обычно используемая единица CSS на веб-сайтах. пикселей
не масштабируется, это абсолютная единица измерения. Изменение значения другого элемента не влияет на значение абсолютных единиц. Присваиваемое значение фиксируется независимо от настройки пользователя.
( em
) и корневой элемент ( rem
) — это адаптивные единицы, интерпретируемые браузером в эквивалентные единицы пикселей
.Это относительные единицы. Изменение значения родительского или корневого элемента влияет на значение относительных единиц. Они масштабируются вместе с устройством. Итак, что отличает их друг от друга? Разница заключается в том, как значения выводятся браузером. Чтобы просмотреть вычисленные значения, откройте Инструменты разработчика Chrome и перейдите на вкладку Computed .
Вычисленное значение пикселя em
единица равно относительно размера шрифта элемента, для которого применяется стиль . На это также влияют унаследованные значения от родительских элементов, если они явно не переопределены единицей пикселей
, которая не подлежит наследованию.
Вычисленное значение пикселя rem
единиц относительно размера шрифта корневого (html) элемента . Однако на это влияет параметр размера шрифта в браузере в результате наследования, если он не переопределен единицей пикселей
, которая не подлежит наследованию.
Использование em
С единицей em
вычисленное значение пикселя выводится из размера шрифта стилизованного элемента с учетом унаследованных (родительских и прародительских) значений.Использование блока em
может оказаться сложным. em
единиц следует использовать для обеспечения масштабируемости в контексте конкретного элемента дизайна, например установка отступов, полей и высоты строки пунктов меню для использования значений em
хорошо работает для правильного масштабирования пунктов меню навигации.
Unit = Размер шрифта стилизуемого элемента x Заданное значение стилизуемого элемента
Для элемента раздела
с размером шрифта 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.
Unit = Размер шрифта корневого элемента html x Заданное значение стилизуемого элемента
Дана веб-странице с корневым элементом, которому назначен размер шрифта 18 пикселей
, а свойству поля присвоено значение 2rem
. Расчетное значение маржи составит 36 пикселей
(18 x 2 = 36).
html {
размер шрифта: 18 пикселей;
маржа: 2бэр;
}
html {
размер шрифта: 18 пикселей;
нижнее поле: 36 пикселей;
маржа слева: 36 пикселей;
поле справа: 36 пикселей;
маржа сверху: 36 пикселей;
}
Влияние наследования на единицу
Когда наследование применяется к em
CSS-единицам, метод вычисления эквивалентного пикселя меняется.С на
дочерний элемент наследует значение своего родителя и вплоть до прародителя. Это изменяет предполагаемое значение пикселя, поскольку унаследованное значение принимается во внимание.
Единица = Размер шрифта стилизуемого элемента x Размер шрифта родительского и родительского элементов (если есть) x Заданное значение стилизуемого элемента
<раздел>
Бабушка и дедушка
Родитель
Ребенок
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) x размер шрифта раздела (page-wrapper) x размер шрифта div (контейнера) x значение заполнения
Это будет равно 57,6 пикселей (16 x 1,5 x 1,5 x 2 = 72).
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)
Родитель (24 x 1,5 = 36 пикселей)
Ребенок (36 x 1,5 = 54 пикселя)
При использовании em
рекомендуется определять размер шрифта в элементе html
вместо того, чтобы явно объявлять его для других элементов.
Влияние настроек браузера
Размер шрифта, установленный в браузере пользователем, может повлиять на значение, если в веб-приложении используется единица CSS rem
. Это касается em
единиц также в результате наследования.
Если для элемента html не задано значение шрифта
В примере ниже
html {
размер коробки: рамка-рамка;
}
.page-wrapper {
размер шрифта: 2rem;
}
размер шрифта элемента с именем класса page-wrapper
будет зависеть от настроек браузера, поскольку для корневого элемента размер шрифта не установлен.По умолчанию размер шрифта браузера установлен на 16 пикселей
и наследуется корневым элементом. Если пользователь изменяет размер шрифта браузера через настройки, страница будет отображаться в соответствии с настройками. Предполагая, что пользователь устанавливает размер шрифта по умолчанию на 14 пикселей, вычисленное значение размера шрифта для page-wrapper
будет равно 28 пикселей (14 x 2 = 28).
Когда значение шрифта em или rem установлено в элементе html
Когда значение шрифта em
или rem
установлено в элементе html с пользовательской настройкой браузера, вычисленное значение пикселя будет кратным настройке размера шрифта браузера с указанным размером шрифта.
Например, если элемент html веб-сайта имеет свойство font-size, равное 1.5em, а размер шрифта браузера установлен на 14px, вычисленное значение пикселя корневого элемента будет 1.5 x 14 = 21px.
Рекомендуемая настройка
Рекомендуется установить размер шрифта элемента html в процентах. Это решает проблему.
Предполагая, что размер шрифта браузера установлен на 16 пикселей (т. Е. По умолчанию), установка размера шрифта корневого элемента html на 100% будет по умолчанию 1rem равным 16 пикселей.Это все еще не оптимальное решение. Лучше использовать 62,5%. Это будет равняться 1 бэр на 10 пикселей. Начиная с этого, поскольку база упрощает расчеты.
html {
размер шрифта: 62,5%;
}
тело {
маржа: 0;
размер шрифта: 1.6rem;
}
.Заголовок страницы {
размер шрифта: 3,2 бэр;
}
Для браузеров, которые не поддерживают использование rem, вы можете использовать миксин SCSS или предоставить запасной вариант.
html {
размер шрифта: 62,5%;
}
тело {
маржа: 0;
размер шрифта: 16 пикселей;
размер шрифта: 1.6рем;
}
.Заголовок страницы {
размер шрифта: 32 пикселя;
размер шрифта: 3,2 бэр;
}
Заключительные записи
- Используйте препроцессоры для абстрагирования вычислений с помощью функции преобразования пикселей в rem
- Используйте
em
только для изменения размера, который необходимо масштабировать на основе размера шрифта элемента, отличного от html (корневого) элемента. - Используйте
rem
для элементов, масштабируемых в зависимости от настроек размера шрифта браузера пользователя. Используйтеrem
в качестве единицы для большей части стоимости вашего имущества. - Для сложной компоновки используйте процент (%).
Размеры шрифта: пиксели = значения Rem
Если вы установили последнюю версию платформы тем Genesis, вы заметите, что файл style.css теперь включает значения размера шрифта как в rem, так и в пикселях.
То же самое и с новой темой Twenty Twelve по умолчанию для WordPress.
Новое значение единицы измерения размера шрифта - rem с резервным пикселем для поддержки всех браузеров.
Пример:
{размер шрифта: 16 пикселей; размер шрифта: 1 бэр; }
Размер установлен таким образом, что 1 rem = 16 пикселей.
Следовательно, $ rembase составляет 16
html {
размер шрифта: 100%; / * Браузер по умолчанию 16 пикселей * /
}
Вот таблица, которая включена в Бытие 1.9 таблица стилей
12/16 = 0,75 бэр
14/16 = 0,875 бэр
16/16 = 1 бэр
18/16 = 1,125 бэр
20/16 = 1,25 бэр
24/16 = 1,5 бэр
30/16 = 1,875 бэр
36 / 16 = 2,25 бэр
48/16 = 3 бэр
Изменение значения REM (базовое)
Базовое значение единицы rem можно изменить следующим образом:
html {размер шрифта: 62,5%; / * 10px браузер по умолчанию * /
}
В данном случае значение 1 rem = 10 pix
Не рекомендуется изменять значение базы rem вашей темы, если вы не знаете, что делаете.Это изменит значения всех размеров шрифта с использованием значений rem по всему сайту.
Изменение размера шрифта в различных темах
Вам нужно выяснить, какой размер шрифта используется в теме относительно корня html. Не все темы будут использовать 100% размер шрифта, то есть 1 rem не всегда будет равен 16 пикселям.
Когда вы меняете размер шрифта для пикселей, вам нужно будет также изменить размер rem.
Twenty Twelve Theme Rem База
Последняя тема по умолчанию Twenty Twelve использует rembase 14
Вот несколько примеров из таблицы стилей 2012 года
/ * Twenty Twelve Theme Rem Values
-------------------------------------------------- ------------
В этой таблице стилей используются значения rem с резервным пикселем.Рем
значения (и высоты строк) рассчитываются с использованием двух переменных:
$ rembase: 14;
$ line-height: 24;
---------- Примеры
* Используйте значение пикселя с запасным вариантом rem для font-size, padding, margins и т. Д.
отступ: 5px 0;
заполнение: 0.357142857rem 0; (5 / $ перекомпоновка)
* Установите размер шрифта, а затем установите высоту строки в зависимости от размера шрифта
размер шрифта: 16 пикселей
размер шрифта: 1.142857143rem; (16 / $ перекомпоновка)
высота строки: 1,5; ($ линия-высота / 16)
---------- Вертикальный интервал
Вертикальный интервал между большинством элементов должен составлять 24 или 48 пикселей.
для поддержания вертикального ритма:
.my-new-div {
маржа: 24px 0;
маржа: 1.714285714rem 0; (24 / $ перебазировка)
}
Рем лучше пикселей?
Я думаю, что причина, по которой разработчики тем сейчас начинают использовать rem, заключается в масштабировании для мобильных устройств. Вдобавок ко всему, вы получаете дополнительную поддержку браузера при использовании обоих шрифтов.
Очевидно, что не все темы используют одну и ту же базу rem.
Как насчет вас?
Вы используете rem или пиксели?
Подробнее о размере шрифта
em, px, pt, cm, дюйм…
См. Также указатель всех подсказок.
На этой странице:
см
, пикселей
, пикселей
, см
, дюймов
… CSS предлагает несколько различных единиц для выражения длины.
Некоторые из них имеют свою историю в типографике, например point ( pt
) и pica ( pc
), другие известны из
повседневное использование, например, сантиметр ( см,
) и дюйм
( из
). А еще есть «магический» юнит, который был
придумано специально для CSS: пикселей
.Это
Значит, разным свойствам нужны разные блоки?
Нет, единицы не имеют ничего общего с недвижимостью, но все, что есть на носителе: экран или бумага.
Нет никаких ограничений на то, какие единицы можно использовать и где. Если
свойство принимает значение в пикселей
(поле :
5px
) также принимает значение в дюймах или сантиметрах.
( поле: 1,2 дюйма; поле: 0,5 см
) и наоборот.
Но в целом вы бы использовали другой набор единиц для отображать на экране, чем при печати на бумаге.Следующая таблица дает рекомендуемое использование:
Рекомендуется | Периодическое использование | Не рекомендуется | |
---|---|---|---|
Экран | em, пикс,% | пр. | pt, cm, mm, in, pc |
Печать | em, см, мм, дюйм, пт, шт,% | пикселей, бывш. |
Соотношение между абсолютными единицами измерения выглядит следующим образом: 1 дюйм = 2.54 см = 25,4 мм = 72 точки = 6 шт.
Если у вас под рукой есть линейка, вы можете проверить точность вашего устройства.
это: вот коробка высотой 1 дюйм (2,54 см): ↑
72pt
↓
Так называемые абсолютных единиц ( см
, мм
, в
, pt
и pc
) в CSS означают то же самое, что и везде, , но только
если ваше устройство вывода имеет достаточно высокое разрешение. на
лазерный принтер, 1 см должен быть ровно 1 сантиметр.Но на
устройства с низким разрешением, такие как экраны компьютеров, CSS не
требуют этого. И действительно, результат имеет тенденцию отличаться от одного
устройство к другому и от одной реализации CSS к другой. Это
лучше зарезервировать эти блоки для устройств с высоким разрешением и в
особенно для печатной продукции. На экранах компьютеров и портативных
устройств, вы, вероятно, не получите того, чего ожидаете.
В прошлом CSS требовал, чтобы реализации отображали абсолютные единицы корректно даже на экранах компьютеров.Но поскольку количество неправильных реализаций больше, чем правильных, и ситуация не улучшилась, CSS отказался от этого требования в 2011 году. В настоящее время абсолютные единицы должны корректно работать только на печатная продукция и на устройствах с высоким разрешением.
CSS не определяет, что означает «высокое разрешение». Но как бюджетный принтеры в настоящее время начинаются с 300 точек на дюйм, а экраны высокого класса - с 200dpi, обрезка, вероятно, находится где-то посередине.
Есть еще одна причина избегать использования абсолютных единиц для других целей.
чем печатать: вы смотрите на разные экраны с разного расстояния.1 см на экране рабочего стола выглядит маленьким. Но то же самое на мобильном телефоне
прямо перед вашими глазами выглядит большим. Лучше использовать
относительные единицы, например em
.
Блоки em
и ex
зависят от
шрифт и может быть разным для каждого элемента в документе. В em
- это просто размер шрифта. В элементе с 2-дюймовым
font, 1em, таким образом, означает 2in. Выражение размеров, например полей и
paddings, в em
означает, что они связаны со шрифтом
размер, и если у пользователя большой шрифт (например.г., на большом экране) или
мелкий шрифт (например, на портативном устройстве), размеры будут в
пропорция. Объявления, такие как text-indent: 1.5em
и margin: 1em
чрезвычайно распространены в CSS.
Блок ex
используется редко. Его цель -
выразить размеры, которые должны быть связаны с x-высотой шрифта. В
x-height - это, грубо говоря, высота строчных букв, таких как a, c, m, или o. шрифтов одинакового размера (и
таким образом, тот же em
) может сильно отличаться по размеру
их строчные буквы, и когда важно, чтобы какое-то изображение,
е.g., соответствует высоте x, блок ex
соответствует
имеется в наличии.
Блок пикселей
- это волшебная единица CSS. Нет
связаны с текущим шрифтом и обычно не связаны с физическим
сантиметры или дюймы тоже. Определен блок пикселей и
пикселей.
быть маленьким, но видимым и таким, чтобы горизонтальная линия шириной 1 пиксель
может отображаться с резкими краями (без сглаживания). Что такое
резкий, мелкий и видимый - зависит от устройства и от того, как оно расположено
используется: вы держите его близко к глазам, как мобильный телефон, на
длина вытянутой руки, как монитор компьютера, или где-то посередине, как
читалка электронных книг? Таким образом, пикселей
не определяется как
постоянной длины, но как то, что зависит от типа
устройство и его типичное использование.
Чтобы составить представление о внешнем виде px
, представьте
компьютерный монитор с ЭЛТ 1990-х годов: самая маленькая точка, которую он может
дисплей измеряет около 1/100 дюйма (0,25 мм) или немного
более. Блок пикселей
получил свое название от этого экрана.
пикселей.
В настоящее время существуют устройства, которые в принципе могут отображать
более мелкие острые точки (хотя вам может потребоваться лупа, чтобы увидеть
их). Но документы прошлого века, которые использовали пикселей
в CSS, по-прежнему выглядят одинаково, независимо от устройства.В частности, принтеры могут отображать четкие линии с гораздо меньшим
детали, чем 1 пиксель, но даже на принтерах линия в 1 пиксель выглядит очень
так же, как это выглядело бы на мониторе компьютера. Смена устройств,
но пикселей
всегда имеет одинаковый внешний вид.
Фактически, CSS требует, чтобы 1px
было точно
1/96 дюйма на всей распечатываемой продукции. CSS считает, что
принтеры, в отличие от экранов, не должны иметь разные размеры для пикселей
для печати четких линий.В печатных СМИ
px, таким образом, не только имеет одинаковый внешний вид с одного устройства на
другой, но на самом деле он в значительной степени то же самое.
CSS также определяет, что растровые изображения (например, фотографии)
по умолчанию, отображается с отображением одного пикселя изображения на 1 пиксель. Фото
с разрешением 600 на 400 пикселей будет 600 пикселей в ширину и 400 пикселей в высоту. В
пиксели на фотографии, таким образом, не сопоставляются с пикселями устройства отображения.
(который может быть очень маленьким), но сопоставьте пикселей с
единицами.Что
позволяет точно выровнять изображения по другим элементам
документ, если вы используете пикселей
единиц в своем стиле
лист, а не пт
, см
и т. д.
Используйте
em
или пикселей
для размера шрифта . CSS унаследовал от типографики единицы pt
(point) и pc
(pica). Принтеры традиционно
использовали те и аналогичные агрегаты вместо см
или из
.В CSS нет причин использовать pt
, используйте ту единицу, которая вам больше нравится. Но там это хороший
причина использовать ни pt
, ни какой-либо другой абсолютный
unit и используйте только em
и px
.
Вот несколько линий разной толщины. Некоторые или все они могут выглядеть резкими, но по крайней мере линии 1px и 2px должны быть резкие и заметные:
0.5pt, 1px, 1pt, 1,5 пикс., 2 пикс.
Если первые четыре строки выглядят одинаково (или если 0.Линия 5pt отсутствует), вы, вероятно, смотрите на монитор компьютера, не может отображать точки меньше 1 пикселя. Если линии появляются увеличения толщины, вы, вероятно, смотрите на эту страницу на качественный компьютерный экран или на бумаге. И если 1pt выглядит толще чем 1.5px, у вас, вероятно, портативный экран.
Волшебная единица CSS, пикселей
, часто бывает хорошей
единицы измерения, особенно если стиль требует выравнивания текста по
изображения, или просто потому, что все, что имеет ширину 1 пиксель или кратное
1px гарантированно будет выглядеть резким.
Но для размеров шрифта еще лучше использовать em
.
Идея состоит в том, чтобы (1) не устанавливать размер шрифта элемента BODY (в
HTML), но используйте размер устройства по умолчанию, потому что это
размер, удобный для чтения; и (2) экспресс-шрифт
размеры остальных элементов в em
: h2 {font-size:
2.5em}
, чтобы h2 в 2,5 раза больше обычного, body
шрифт.
Единственное место, где вы можете использовать pt
(или см
или в
) для установки размера шрифта, находится в
таблицы стилей для печати, если вам нужно убедиться, что напечатанный шрифт
точно определенного размера.Но даже там, используя размер шрифта по умолчанию
обычно лучше.
Таким образом, блок пикселей
защищает вас от необходимости знать
разрешение устройства. Будет ли выход 96 точек на дюйм,
100, 220 или 1800 точек на дюйм, длина, выраженная целым числом пикселей
всегда выглядит хорошо и очень похоже на всех
устройств. Но что, если вы и хотите узнать разрешение
устройства, например, чтобы узнать, безопасно ли использовать 0.Линия 5px
? Ответ - проверить разрешение через Media Queries.
Объяснение медиа-запросов выходит за рамки этой статьи, но
вот небольшой пример:
div.mybox {border: 2px solid} @media (минимальное разрешение: 2dppx) { / * Медиа с 2 или более точками на пиксель * / div.mybox {border: 1.5px solid} }
Больше единиц в CSS
Чтобы еще проще было писать правила стиля, зависящие только от
размер шрифта по умолчанию, CSS с 2013 года имеет новую единицу: rem
. rem
(от «root em») - это шрифт
размер корневого элемента документа. В отличие от em
, который может быть разным для каждого элемента, rem
постоянен во всем документе. Например, дать P
и элементы h2 с одинаковым левым полем, сравните этот стиль до 2013 года.
простынь:
p {margin-left: 1em} h2 {размер шрифта: 3em; margin-left: 0,333em}
с новой версией:
p {margin-left: 1rem} h2 {размер шрифта: 3em; margin-left: 1rem}
Другие новые блоки позволяют указывать размеры относительно окно читателя.