px, em, rem и другие
В этом очерке я постараюсь не только рассказать о различных единицах измерения, но и построить общую картину – что и когда выбирать.
Пиксель px
– это самая базовая, абсолютная и окончательная единица измерения.
Количество пикселей задаётся в настройках разрешения экрана, один px
– это как раз один такой пиксель на экране. Все значения браузер в итоге пересчитает в пиксели.
Пиксели могут быть дробными, например размер можно задать в 16.5px
. Это совершенно нормально, браузер сам использует дробные пиксели для внутренних вычислений. К примеру, есть элемент шириной в 100px
, его нужно разделить на три части – волей-неволей появляются 33.333...px
. При окончательном отображении дробные пиксели, конечно же, округляются и становятся целыми.
Для мобильных устройств, у которых много пикселей на экране, но сам экран маленький, чтобы обеспечить читаемость, браузер автоматически применяет масштабирование.
Достоинства
- Главное достоинство пикселя – чёткость и понятность
Недостатки
- Другие единицы измерения – в некотором смысле «мощнее», они являются относительными и позволяют устанавливать соотношения между различными размерами
Существуют также «производные» от пикселя единицы измерения: mm
, cm
, pt
и pc
, но они давно отправились на свалку истории.
Вот, если интересно, их значения:
1mm
(мм) =3.8px
1cm
(см) =38px
1pt
(типографский пункт) =4/3 px
1pc
(типографская пика) =16px
Так как браузер пересчитывает эти значения в пиксели, то смысла в их употреблении нет.
В реальной жизни сантиметр – это эталон длины, одна сотая метра. А пиксель может быть разным, в зависимости от экрана.
Но в формулах выше под пикселем понимается «сферический пиксель в вакууме», точка на «стандартизованном экране», характеристики которого описаны в спецификации.Поэтому ни о каком соответствии cm
реальному сантиметру здесь нет и речи. Это полностью синтетическая и производная единица измерения, которая не нужна.
1em
– текущий размер шрифта.
Можно брать любые пропорции от текущего шрифта: 2em
, 0.5em
и т.п.
Размеры в em
– относительные, они определяются по текущему контексту.
Например, давайте сравним px
с em
на таком примере:
<div> Страусы <div>Живут также в Африке</div> </div>
24
пикселей – и в Африке 24
пикселей, поэтому размер шрифта в
одинаков.
А вот аналогичный пример с em
вместо px
:
<div> Страусы <div>Живут также в Африке</div> </div>
Так как значение в em
высчитывается относительно текущего шрифта, то вложенная строка в 1. 5
раза больше, чем первая.
Выходит, размеры, заданные в em
, будут уменьшаться или увеличиваться вместе со шрифтом. С учётом того, что размер шрифта обычно определяется в родителе, и может быть изменён ровно в одном месте, это бывает очень удобно.
Что такое «размер шрифта»? Это вовсе не «размер самой большой буквы в нём», как можно было бы подумать.
Размер шрифта – это некоторая «условная единица», которая встроена в шрифт.
Она обычно чуть больше, чем расстояние от верха самой большой буквы до низа самой маленькой. То есть, предполагается, что в эту высоту помещается любая буква или их сочетание. Но при этом «хвосты» букв, таких как р
, g
могут заходить за это значение, то есть вылезать снизу. Поэтому обычно высоту строки делают чуть больше, чем размер шрифта.
В спецификации указаны также единицы ex и ch, которые означают размер символа "x"
и размер символа "0"
.
Эти размеры присутствуют в шрифте всегда, даже если по коду этих символов в шрифте находятся другие значения, а не именно буква "x"
и ноль "0"
. В этом случае они носят более условный характер.
Эти единицы используются чрезвычайно редко, так как «размер шрифта» em
обычно вполне подходит.
Проценты %
, как и em
– относительные единицы.
Когда мы говорим «процент», то возникает вопрос – «Процент от чего?»
Как правило, процент будет от значения свойства родителя с тем же названием, но не всегда.
Это очень важная особенность процентов, про которую, увы, часто забывают.
Отличный источник информации по этой теме – стандарт, Visual formatting model details.
Вот пример с %
, он выглядит в точности так же, как с em
:
<div> Страусы <div>Живут также в Африке</div> </div>
В примере выше процент берётся от размера шрифта родителя.
А вот примеры-исключения, в которых %
берётся не так:
margin-left
- При установке свойства
margin-left
в%
, процент берётся от ширины родительского блока, а вовсе не от егоmargin-left
. line-height
- При установке свойства
line-height
в%
, процент берётся от текущего размера шрифта, а вовсе не отline-height
родителя. Детали поline-height
и размеру шрифта вы также можете найти в статье Свойства font-size и line-height. width/height
- Для
width/height
обычно процент от ширины/высоты родителя, но приposition:fixed
, процент берётся от ширины/высоты окна (а не родителя и не документа). Кроме того, иногда%
требует соблюдения дополнительных условий, за примером – обратитесь к главе Особенности свойства height в %.
Итак, мы рассмотрели:
px
– абсолютные, чёткие, понятные, не зависящие ни от чего.em
– относительно размера шрифта.%
– относительно такого же свойства родителя (а может и не родителя, а может и не такого же – см. примеры выше).
Может быть, пора уже остановиться, может этого достаточно?
Э-э, нет! Не все вещи делаются удобно.
Вернёмся к теме шрифтов. Бывают задачи, когда мы хотим сделать на странице большие кнопки «Шрифт больше» и «Шрифт меньше». При нажатии на них будет срабатывать JavaScript, который будет увеличивать или уменьшать шрифт.
Вообще-то это можно сделать без JavaScript, в браузере обычно есть горячие клавиши для масштабирования вроде Ctrl++, но они работают слишком тупо – берут и увеличивают всю страницу, вместе с изображениями и другими элементами, которые масштабировать как раз не надо. А если надо увеличить только шрифт, потому что посетитель хочет комфортнее читать?
Какую единицу использовать для задания шрифтов? Наверно не px
, ведь значения в px
абсолютны, если менять, то во всех стилевых правилах. Вполне возможна ситуация, когда мы в одном правиле размер поменяли, а другое забыли.
Следующие кандидаты – em
и %
.
Разницы между ними здесь нет, так как при задании font-size
в процентах, эти проценты берутся от font-size
родителя, то есть ведут себя так же, как и em
.
Вроде бы, использовать можно, однако есть проблема.
Попробуем использовать этот подход для <li>
.
Протестируем на таком списке:
<ul> <li>Собака <ul> <li>бывает <ul> <li>кусачей <ul> <li>только <ul> <li>от жизни <ul> <li>собачей</li> </ul> </li> </ul> </li> </ul> </li> </ul> </li> </ul> </li> </ul>
Пока это обычный вложенный список.
Теперь уменьшим размер шрифта до 0.8em
, вот что получится:
<style> li { font-size: 0.8em; } </style> <ul> <li>Собака <ul> <li>бывает <ul> <li>кусачей <ul> <li>только <ul> <li>от жизни <ul> <li>собачей</li> </ul> </li> </ul> </li> </ul> </li> </ul> </li> </ul> </li> </ul>
Проблема очевидна. Хотели, как лучше, а получилось… Мелковато. Каждый вложенный <li>
получил размер шрифта 0.8
от родителя, в итоге уменьшившись до нечитаемого состояния. Это не совсем то, чего мы бы здесь хотели.
Можно уменьшить размер шрифта только на одном «корневом элементе»… Или воспользоваться единицей rem
, которая, можно сказать, специально придумана для таких случаев!
Единица rem
задаёт размер относительно размера шрифта элемента <html>
.
Как правило, браузеры ставят этому элементу некоторый «разумный» (reasonable) размер по умолчанию, который мы, конечно, можем переопределить и использовать rem
для задания шрифтов внутри относительно него:
<style> html { font-size: 14px; } li { font-size: 0.8rem; } </style> <div><button>Кликните, чтобы увеличить размер шрифта</button></div> <img src="https://js.cx/clipart/angry_dog. png"> <ul> <li>Собака <ul> <li>бывает <ul> <li>кусачей <ul> <li>только <ul> <li>от жизни <ul> <li>собачей</li> </ul> </li> </ul> </li> </ul> </li> </ul> </li> </ul> </li> </ul> <script> let html = document.documentElement; up.onclick = function() { // при помощи JS увеличить размер шрифта html на 2px html.style.fontSize = parseInt(getComputedStyle(html, '').fontSize) + 2 + 'px'; }; </script>
Получилось удобное масштабирование для шрифтов, не влияющее на другие элементы.
Элементы, размер которых задан в rem
, не зависят друг от друга и от контекста – и этим похожи на px
, а с другой стороны они все заданы относительно размера шрифта <html>
.
Единица rem
не поддерживается в IE8-.
Во всех современных браузерах, исключая IE8-, поддерживаются новые единицы из черновика стандарта CSS Values and Units 3:
vw
– 1% ширины окнаvh
– 1% высоты окнаvmin
– наименьшее из (vw
,vh
), в IE9 обозначаетсяvm
vmax
– наибольшее из (vw
,vh
)
Эти значения были созданы, в первую очередь, для поддержки мобильных устройств.
Их основное преимущество – в том, что любые размеры, которые в них заданы, автоматически масштабируются при изменении размеров окна.
Этот текст написан с размером `5vh`.
Вы сможете легко увидеть, как работает vh
, если поменяете высоту окна браузера. Текст выше будет расти/уменьшаться.
Мы рассмотрели единицы измерения:
px
– абсолютные пиксели, к которым привязаны и потому не нужныmm
,cm
,pt
иpc
. Используется для максимально конкретного и точного задания размеров.em
– задаёт размер относительно шрифта родителя, можно относительно конкретных символов:"x"
(ex
) и"0"
(ch
), используется там, где нужно упростить масштабирование компоненты.rem
– задаёт размер относительно шрифта<html>
, используется для удобства глобального масштабирования: элементы которые планируется масштабировать, задаются вrem
, а JS меняет шрифт у<html>
.%
– относительно такого же свойства родителя (как правило, но не всегда), используется для ширин, высот и так далее, без него никуда, но надо знать, относительно чего он считает проценты.vw
,vh
,vmin
,vmax
– относительно размера экрана.
Единицы измерения в CSS | Techrocks
Хочешь знать больше про веб?
Подпишись на наш телеграм-канал TechRocks WEB-разработка?
Подписаться
×
Перевод статьи «Units in CSS (em, rem, pt, px, vw, vh, vmin, vmax, ex, ch, …)».
В CSS есть разные единицы измерения. Больше всего известны пиксели, но есть и другие – не такие популярные, но весьма удобные в некоторых случаях.
В этой статье мы рассмотрим относительные и абсолютные единицы измерения, а также единицы измерения области просмотра (viewport-единицы).
Относительные единицы измерения
Размеры в CSS можно указывать не только в абсолютных единицах, таких как пиксели, поинты или сантиметры, но и в относительных – в процентах, em или rem. Использование относительных единиц измерения также помогает придерживаться стандартов доступности.
В большинстве браузеров по умолчанию установлен размер шрифта 16px. Это значение можно использовать при расчетах (например, 16px равны 1em, 1rem или 100%).
Давайте рассмотрим, какие же относительные единицы измерения у нас есть.
- % – измерение в процентах.
- em – размер шрифта относительно обычного, т. е., если шрифт имеет размер 2.5em, значит, он в 2,5 раза больше обычного шрифта.
- rem – размер шрифта относительно корневого элемента документа.
- ch – ширина символа «0». В моноширинных шрифтах, где все символы имеют одинаковую ширину, 1ch это ширина одного символа.
- ex – x-высота текущего шрифта, измеряется в высоте символа «х» в нижнем регистре.
See the Pen CSS Relative Units by Matthias (@fullstack-to) on CodePen.
Чем отличаются em и rem?
Разница между этими единицами в наследовании. Значение rem основывается на корневом элементе (html). Каждый дочерний элемент в качестве основы для вычислений использует размер шрифта элемента html.
А в единицах em вычисления основаны на размере шрифта родительского элемента.
rem очень упрощает вычисления размеров шрифтов. Если размер шрифта в элементе не зависит от размера шрифта родителя, это очень удобно, например, для вложенных элементов или даже нескольких вложенных элементов, таких как списки. Единицы rem всегда вычисляются относительно размера шрифта в теге html.
Различные семейства шрифтов
Все представленные на картинке шрифты имеют один размер (18pt), но благодаря красной линии видно, что x-высота (ex) у этих шрифтов разная.
На этой картинке шрифты имеют все тот же одинаковый размер (18pt). Но они отличаются шириной, т. е., их размер в единицах ch будет разным. Символы моноширинных шрифтов имеют одинаковую ширину, а в serif или sans-serif символы отличаются по ширине (например, «i» будет уже, чем «o»).
Абсолютные единицы измерения
Абсолютные единицы измерения имеют фиксированный размер (нельзя же принять какой-то свой размер сантиметра). Если в вашем случае требуется указать точную длину, вам нужны абсолютные единицы измерения. Например, это подходит для элементов, размер которых не должен меняться. Также абсолютные единицы могут быть полезны, если вы хотите определить ограничения для каких-то областей, чтобы они не могли стать слишком широкими или слишком узкими. Те элементы, размеры которых вы задаете в абсолютных величинах, не меняются в зависимости от размеров экрана, ориентации в пространстве и прочих вещей.
- cm – сантиметры. 1 cm = 1 cm
- mm – миллиметры. 10 mm = 1 cm
- in – дюймы (inches). 1 in = 96px = 2.54 cm
- px – пиксели. 1 px = 1/96 от 1 in
- pt – поинты (points). 1 pt = 1/72 от 1 in
- pc – пайки (пики, англ. pica). 1pc = 12 pt
See the Pen CSS Absolute Units by Matthias (@fullstack-to) on CodePen.
Единицы измерения области просмотра (viewport-единицы)
Viewport-единицы представляют собой процентное отношение к текущей величине области просмотра браузера. От простого выражения в процентах viewport-единицы отличаются тем, что они всегда высчитываются на основе текущего размера области просмотра. А размер, выраженный просто в процентах, вычисляется по отношению к родительскому элементу.
- vw – 1% от ширины области просмотра (50% это половина ширины области просмотра).
- vh – 1% от высоты области просмотра (50% это половина высоты области просмотра).
- vmin – 1% от меньшего размера ширины или высоты области просмотра (т. е., если ширина меньше высоты, то vmin рассчитывается от ширины, при этом 1 vmin = 1 vw).
- vmax – 1% от большего размера ширины или высоты области просмотра (т. е., если высота больше ширины, то vmax рассчитывается от высоты, при этом 1 vmax = 1 vh).
See the Pen Viewport Units by Matthias (@fullstack-to) on CodePen.
vmin и vmax могут изменяться в зависимости от изменения размера окна браузера или смены ориентации мобильного телефона.
Единицы измерения CSS: rem vs em
18 февраля, 2022 11:40 дп 73 views | Комментариев нетDevelopment | Amber | Комментировать запись
В CSS есть множество удобных и полезных единиц измерения. Относительные единицы в современном мире адаптивного дизайна (такие как em или rem) дают нам адаптируемость и гибкость прямо «из коробки», позволяя определять размеры элемента на основе размера шрифта, определенного выше в разметке.
Читайте также: Какие бывают единицы измерения в CSS
Вероятно, вы уже пользовались единицами измерения em и rem ранее, но, возможно, еще не вполне разобрались, в чем разница между ними и какая единица лучше подходит для ваших случаев. Давайте коротко рассмотрим эту разницу.
Резюме: единица em в свойстве font-size относится к размеру шрифта родительского элемента. В остальных свойствах em относится к размеру шрифта текущего элемента. Единица rem всегда относится к размеру шрифта корневого элемента html.
Единица измерения em
em заимствована из мира типографики. Это единица, которая позволяет установить размер шрифта элемента относительно размера шрифта его родителя.
Возьмем этот простой пример:
.parent { font-size: 18px; } .child { font-size: 1.5em; }
В этом примере дочерний элемент будет иметь размер шрифта 27 пикселей (1,5 * 18 пикселей = 27 пикселей).
Если родительский элемент не указывает значение для размера шрифта, значение будет искаться выше в дереве DOM. Если размер шрифта не указан вплоть до корневого элемента (<html>), то используется стандартное значение браузера – 16px.
Довольно просто и ясно, верно? Однако единицы em можно использовать не только для установки размера шрифта – они подходят практически везде (для определения отступов, полей, ширины, высоты, максимальной ширины и т.д.) Если единица em используется для других свойств, а не для font-size, значение относится к собственному размеру шрифта элемента.
Добавим к нашему приведенному выше примеру:
.parent { font-size: 18px; } .child { font-size: 1.5em; padding: 2em 1em; }
- Отступы сверху и снизу на .child будут составлять 54 пикселя. Это в 2 раза больше размера шрифта нашего текущего элемента (2 * 27 пикселей).
- Отступы слева и справа .child будут иметь размер 27 пикселей. Это в 1 раз больше размера шрифта элемента.
Помните: когда единица em используется в свойстве font-size, размер определяется относительно размера шрифта родителя. При использовании в других свойствах значение зависит от размера шрифта самого элемента.
Недостаток em
С единицей em бывают проблемы – эта единица может компоноваться с одного уровня на другой.
Давайте взглянем на такой базовый пример:
.parent { font-size: 15px; } .child { font-size: 2em; }
Теперь мы попробуем использовать его в нашей разметке следующим образом:
<div> I'm 15px <div> I'm 30px, as expected <div> I'm 60px, trouble starts! <div> I'm 120px, now we're really in trouble! </div> </div> </div> </div>
Вот что получится:
I’m 15px
I’m 30px, as expected
I’m 60px, trouble starts!
I’m 120px, now we’re really in trouble!
Итак, как вы можете видеть, эффект единиц em может нарастать, если несколько элементов с размером шрифта em находятся внутри друг друга. Это может стать проблемой и привести к непредвиденным результатам.
Именно эта проблема и стала причиной для создания модуля rem.
Единица измерения rem
Единица rem, сокращенно от root em, является относительной единицей, значение которой всегда основывается на значении размера шрифта корневого элемента, <html>. И если элемент <html> не имеет конкретного размера шрифта, используется значение браузера по умолчанию, 16 пикселей.
Это означает, что при использовании rem значения родительских элементов игнорируются, во внимание принимается только значение root.
Давайте рассмотрим пример кода с rem:
.html { font-size: 16px; } .parent { font-size: 15px; } .child-rem { font-size: 2rem; }
Применим его:
<div> I'm 15px <div> I'm 32px, as expected <div> I'm 32px, yep! <div> I'm 32px, like clockwork! </div> </div> </div> </div>
И получим:
I’m 15px
I’m 32px, as expected
I’m 32px, yep!
I’m 32px, like clockwork!
Как вы можете видеть, единица rem позволяет избежать «комбинированного эффекта» единицы em. С rem все последовательно основано на font-size или на корневом элементе, так что никаких сюрпризов ждать не приходится.
То же самое относится и к другим значениям помимо font-size (margin, padding и т.д.). Использование единиц rem в них по-прежнему будет относиться к размеру шрифта корневого элемента.
em vs rem: что лучше?
На самом деле нет лучшего варианта, все зависит от ваших личных предпочтений. Некоторым людям нравится проектировать все в единицах rem для согласованности и предсказуемости, в то время как другим нравится использовать единицы em в тех местах, где влияние ближайших родительских элементов имеет смысл. Какую единицу измерения использовать – решать вам.
Tags: CSSРазница между единицами em и rem в css
Наиболее используемая длина блока в CSS — это px, em и rem. Три различия:
Px — фиксированный пиксель, после установки его нельзя изменить из-за размера страницы.
Em и rem более гибкие, чем px, они являются относительными единицами длины, что означает, что длина не фиксирована, и она больше подходит для адаптивного макета.
Краткое изложение разницы между em и rem:em относительно родительского элемента, а rem относительно корневого элемента.
R in rem означает root, что не сложно понять.
em
- Их размер шрифта дочернего элемента относительно размера шрифта родительского элемента
- Ширина / высота / отступы / поля элемента относительно размера шрифта элемента в em
Код выше:
<div> Я родительский элемент div <p> Я дочерний элемент р <span> Я - элемент Солнечного Элемента </ span> </p> </div>
div { font-size: 40px; width: 10em; /* 400px */ height: 10em; border: solid 1px black; } p { font-size: 0.5em; /* 20px */ width: 10em; /* 200px */ height: 10em; border: solid 1px red; } span { font-size: 0.5em; width: 10em; height: 10em; border: solid 1px blue; display: block; }
Результаты следующие:
Тест на консолидацию: Можете ли вы определить размер шрифта и ширину пролета элемента Sun?
Ответ: Я думаю, вы бы сказали 10px, 100px, хаха, на самом деле логика верна, но если вы браузер Chrome, я должен сказать вам, что он должен быть 12px, 120px. Потому что хром устанавливает минимум
Размер шрифта составляет 12px, что означает, что размер шрифта ниже 12px будет по умолчанию равен 12px,Конечно, эта дилемма может быть решена с помощью css3, поэтому я не буду вдаваться в подробности здесь.
Размер шрифта по умолчанию для chrome равен 12px, то есть 1em по умолчанию равен 12px. Если самый внешний родительский элемент напрямую устанавливает размер шрифта равным 1.5em, то размер шрифта элемента составляет 18px (12 * 1.5).
rem
rem — это полная длина относительно корневого элемента, кто является корневым элементом? элемент <html>. Обычной практикой является установка размера шрифта для элемента html, а затем единицей длины других элементов является rem.
Код выше: (HTML-код такой же, как и выше, но единица длины элемента кода CSS изменена)
html { font-size: 10px; } div { font-size: 4rem; /* 40px */ width: 30rem; /* 300px */ height: 30rem; border: solid 1px black; } p { font-size: 2rem; /* 20px */ width: 15rem; height: 15rem; border: solid 1px red; } span { font-size: 1. 5rem; width: 10rem; height: 10rem; border: solid 1px blue; display: block; }
Так что вы можете сказать конкретное значение размера шрифта span?
При использовании rem в качестве адаптивного типа, непосредственно измените размер шрифта html в медиа, тогда размер элемента, использующего rem как единицу, изменится соответственно, что очень удобно.
Видя это, я думаю, что мы все глубже понимаем разницу между em и rem (разные ссылочные объекты).
резюме:
Какую длину единицы измерения использовать для выполнения проекта зависит от ваших потребностей, мне обычно нравится это:
Пиксель (px): используется для границы или позиционирования элемента.
em / rem: используется для создания адаптивных страниц, но я предпочитаю rem, поскольку ссылки на разные элементы em различны (оба являются родительскими элементами элемента), поэтому неудобно вычислять, напротив, rem Существует только один ссылочный объект (элемент html), который делает расчеты более понятными.
Интеллектуальная рекомендация
[Ytu] _2475 (C ++ Упражняет множественное наследство)
Описание Укажите класс учителей и класс Cadre (Cadres) и используйте множественные методы наследования, чтобы получить новый класс Class Teacher_cadre (учитель и кадра). Требовать: (1) Участники данны…
Сеть обнаружения Android — это нормальный код!
В разработке Android, если приложение необходимо подключиться к сетевому запросу, то лучше всего выяснить, следует ли определить, является ли сеть в Интернете. Сеть продолжит выполнять запрос, если в …
Понять структуру данных
Программа = структура данных + алгоритм основная концепция Данные: опишите символ объективных вещей, является объектом, который можно управлять на компьютере, может быть идентифицирован компьютером и …
Глава 8 «Как работает Tomcat»: загрузчик классов
Основное содержание этой главы разделено на три части: первая часть рассказывает о «модели делегирования» jvm, вторая и третья части — это класс WebappLoader и класс WebappClassLoader. Мод…
Ява фонд
Во-первых, основной тип 1. Основные типы и виды упаковки 2. Основное введение Java не использует ключевое слово new для основных типов данных, но напрямую хранит переменные в стеке, что более эффектив…
Вам также может понравиться
Сопоставление метода настройки суперпараметров
В машинном обучении вы всегда будете сталкиваться с такими скучными и трудоемкими вещами, как настройка параметров. К счастью, существует множество библиотек и соответствующих методов, которые …
Springboot + Springsecurity + Keycloak Integration
Недавние проекты команды Доступ к KeyCloak Unified управляемые пользователи, а также аутентификацию входа в систему, и аутентификация независимо реализована каждым проектом. 1. Настройте клиент в KeyC…
ListView
<1> Введение ListView — часто используемый компонент в разработке для Android. Он отображает определенный контент в виде списка и может отображаться адаптивно в зависимости от длины данных. Для …
Безопасность Android [Базовые знания]
Android lifecycle: Android system file introduce: Activity lifecycle: App system file introduce: 1. Архитектура Android Уровень приложений Android: apk Уровень платформы Android: DEX Уровень ви…
Структура таблицы виртуальной функции C ++
Оригинальный анализ таблиц виртуальной функции C ++ Различные объекты одного класса имеют одну и ту же виртуальную функциональную таблицу. Любая функция указателя выводит непосредственно от Cout до 1,…
[Turn] Мощный EM в CSS
http://www.w3cplus.com/css/px-to-em
Прошло много времени с тех пор, как я использовал CSS, но я использовал «px» для установки соответствующих атрибутов веб-элементов, но я не смею использовать «em». Основная причина в том, что я мало что знаю об этом. Я знаю только немного концептуальных вещей. Некоторое время назад я использовал «em» в качестве элемента настройки модуля в проекте. С небольшим пониманием, сегодня я специально организовал пост в блоге, чтобы поделиться с вами, надеясь немного помочь мальчикам.
Из этого туториала вы узнаете, как использовать em для создания базовой гибкой разметки, чтобы научиться ее рассчитывать? Как использовать «em», чтобы эластично расширить слой? А как вы расширяете контент, такой как текст и изображения? Давайте начнем сегодняшнее путешествие с этими вопросами вместе.
Что такое гибкий макет?
Размер пользовательского текста и гибкое расположение
Размер текста по умолчанию в браузере пользователя равен «16px». Другими словами, размер текста «body» на веб-странице по умолчанию равен «16px» в браузере пользователя. Конечно, если пользователь желает, он может изменить эту настройку размера шрифта, пользователь можетЭлементы управления пользовательским интерфейсомЧтобы изменить размер шрифта по умолчанию в браузере.
Эластичный дизайн занимает ключевое местоВсе элементы на веб-странице используют значение единицы измерения «em», «Эм» этоотносительноРазмер, мы можем установить это так1em,0. 5em,1.5emПодождите, и «em» также можно указать с тремя десятичными разрядами, например, «1.365em». А «родственник» означает:
- Относительное вычисление неизбежно будет ссылкой, тогда относительное относится к относительному родительскому элементу элемента.font-size, Например: если в <div>Установить размер шрифтаЗначение «16px», на этот раз учебник для элемента-потомка для <div> будетНаследованиеЕго размер шрифта, если только повторно отображаются в его дочерних элементах. В настоящее время, если вы установите размер шрифта его дочерних элементов на «0,75em», то вычисленный размер шрифта будет эквивалентен «0,75 X 16px = 12px»;
- Если пользовательЭлементы управления пользовательским интерфейсомИзмените размер текста, тогда вся наша страница также будет увеличена (или уменьшена), так что пользователь изменит шрифт браузера и приведет к сбою всей страницы (я думаю, что с этим явлением сталкивались все, я вам не верю Просто попробуйте проект, который вы сделали сами, вы будете чувствовать себя очень страшно).
Вы можете проверить этоОбразец гибкого макета, В это время вы используете браузерЭлементы управления пользовательским интерфейсомИзмените размер текста или непосредственно «ctrl +» и «ctrl-», вы найдете этот пример гибкой компоновки, измените размер шрифта в браузере для просмотра, сделаете соответствующее увеличение и уменьшение и не повлияет на макет всей страницы. Примечание. Все HTML и CSS этого примера будут использованы в этом руководстве.
Что касается других примеров гибкого макета, вы можете просмотретьDan CederholmизSimplebitesИ измените размер текста для просмотра.
После опыта, вы думаете, что гибкий макет страницы очень гибок, и он также точен, как «px». Так что, пока мы осваиваем«Размер шрифта», «px» и «em»Имея базовые отношения между ними, мы можем быстро использовать CSS для создания точных макетов.
CSS Elastigirl представляет EM
Elastigirl»em«Он чрезвычайно мощный и гибкий. Он может рассчитать его значение независимо от размера шрифта: 12px, 16 или 60».
emНа самом деле является своего роданаборныйТестовый блок, и его происхождение также имеют небольшую историю, я не буду рассказывать вам об этой маленькой истории, потому что не все здесь, чтобы слушать мою историю, я думаю, что мне все еще нравится знать тех, кто в CSS вещь.
В CSS «em«Это на самом деле вертикальное измерение. ОдинemОн равен вертикальному пространству, требуемому буквами любого шрифта, и не имеет отношения к горизонтальному пространству, которое он занимает, поэтому:
Если размер шрифта составляет 16 пикселей, то 1em = 16 пикселей。
Начало работы
Прежде чем мы начнем понимать это «em» в CSS, нам нужно знать его размер шрифта по умолчанию в браузере. Это именно то, что мы делали раньше. Во всех современных браузерах размер шрифта по умолчанию — «16px». Поэтому настройки по умолчанию в браузере будут:
1em = 16px
Поэтому, когда написан селектор CSS, браузер имеет размер шрифта по умолчанию «16px». В настоящее время <body> на нашей веб-странице наследует этот «font-size: 16px;», если только вы явно не установите значение «font-size» для <body> в стиле CSS, чтобы изменить его унаследованное значение , Таким образом, «1em = 16px», «0. 5em = 8px», «10em = 160px» и т. Д., Затем мы также можем использовать «em», чтобы указать размер любого элемента.
Установить размер шрифта тела
Многие пожилые люди приобрели опыт многолетней практики: они предлагают установить размер шрифта, необходимый для основного текста в <body>, или установить его на «10px», что эквивалентно («0,625em или 62,5%»). Для того, чтобы облегчить расчет его дочерних элементов. Оба из них являются желательными. Но мы все знаем, что шрифтом по умолчанию для <body> является «16px», и мы также очень четко. Мы изменили его значение по умолчанию. Чтобы гибкий макет не сломался, нам нужно пересчитать и перенастроить. Итак, идеальная настройка:
body {font-size:1em;}
Но под IE, который никто не любит, возникнет проблема с «em». При настройке размера шрифта это также нарушает нашу гибкую компоновку, но, к счастью, есть способ решить эту проблему:
html {font-size: 100%;}
Формула преобразования-PXtoEM
Если вы первый, кто создал гибкий макет, лучше всего подготовить калькулятор рядом с вами, потому что сначала мы не можем пропустить много вычислений, поэтому он может быть уверен.
Пиксели для нас слишком близки, поэтому мы начнем отсюда. Сначала нам нужно вычислить соотношение между 1px и em, а затем мы знаем значение px, которое нам нужно. Из предыдущего введения все знают1em всегда равно размеру шрифта родительского элементаТаким образом, мы можем использовать следующую формулу для расчета:
1 ÷ размер шрифта родительского элемента × значение пикселя для преобразования = значение em
Вы можете обратиться к следующей таблице преобразования (значение, когда основной шрифт равен 16 пикселей)
Давайте вместе рассмотрим очень простой пример.Используйте CSS EM для создания эластичного макета шириной 960 пикселей”
HTML Markup
<body> <div> …</div> </body>
Конвертировать 960px в em
1 ÷ 16px × 960px = 60em
Необходимым условием для этого вычисляемого значения является «font-size: 16px» of <body>.
CSS Code
html { font-size: 100%; } body { font-size: 1em; } #container { width: 60em; }
Из приведенного выше примера, я думаю, вы можете понять это более образно, потому что есть примеры, которые можно спросить, на самом деле, мы можем преобразовать приведенную выше формулу расчета, это будет более удобно для вашего расчета:
Значение в пикселях для преобразования ÷ размер шрифта родительского элемента = значение em
Тогда наш приведенный выше пример «960px» может быть преобразован в значение «em» следующим образом
960px ÷ 16px = 60em
Выше мы были свидетелями метода вычисления преобразования «px» в «em» вместе, тогда давайте посмотрим на показанную выше продукциюОбразец гибкого макета, Ниже мы в основном собираемся вместе, чтобы осознать его шаг за шагом.
Построить гибкий контейнер
СоздатьОбразец гибкого макетаДля такого эффекта центрирования нам сначала нужно создать структуру HTML, я создам здесь <div> и назову его «wrap»
<body> <div> content here</div> </body>
Мы хотим, чтобы этот контейнер имел ширину 740 пикселей, подходящую для экземпляра дисплея «800 пикселей × 600 пикселей». Так сколько «em» будет равно «740px»? Это то, что нам нужно заботиться, давайте посмотрим:
1、Преобразуйте «740px» в «em» и установите его в наш контейнер «div # wrap»:Все мы знаем, что родительский элемент <body> элемента «div # wrap» устанавливает шрифт на «16px», поэтому, когда в это время не выполняется никаких других настроек отображения, его дочерний элемент <div id = «wrap»> будет наследовать шрифт -size «value, чтобы мы могли легко получить:» отношение между 1px и 1em «
1em = 16px означает 1px = 1 ÷ 16 = 0,0625em
Таким образом, наш «740px» может быть легко преобразован в «em»
0. 0625em × 740 = 46.25em
Конечно, вы также можете конвертировать в соответствии с формулами расчета, которые мы перечислили ранее, чтобы у вас было более концептуальное мышление, и было бы нелегко совершать ошибки:
1 ÷ 16 × 740 = 46,25em (1 ÷ размер шрифта родительского элемента × значение пикселя для преобразования = значение em)
Таким образом,Вы можете использовать приведенную выше формулу для вычисления значения «em» любой ширины или высоты, которые вам нужны, вам нужно только знать, что «1px равно числу em», а другое — это значение «px», которое вы хотите преобразовать с этими параметрами Вы можете получить желаемое значение «em».
2、Создайте стиль CSS:Теперь мы можем написать стили для «div # wrap»,Образец гибкого макетаОчевидно, скажите нам, что мы установили ширину центра «740px» для «div # wrap», с полем «24px» сверху и снизу и с эффектом границы «1px». Вычислите соответствующее значение «em» и запишите его в стиле CSS:
html {font-size: 100%;} body {font-size: 1em;} #wrap { width: 46. 25em;/*740px ÷ 16 = 46.25em */ margin: 1.5em auto;/*24px ÷ 16 = 1.5em*/ border: 0.0625em solid #ccc;/*1px ÷ 16 = 0.0625em*/ }
Теперь мы легко создали гибкий контейнер с контентом:Образец гибкого макета。
Стиль текста и их
Сначала мы вставляем <h2> и <p> в <div id = «wrap»> </ div>, созданный ранее:
<div> <h2>...</h2> <p>...</p> </div>
вОбразец гибкого макетаВ примере наш заголовок использует «18px», а абзацу задается шрифт «12px», а высота строки — «18px».18px будет для нас важной ценностью для достижения гибкой компоновки, вы можете использовать их для изменения пропорций.(Существует типографское введение о заголовке и абзаце, если вы заинтересованы, вы можете нажатьRichard Rutterизbasic leadingиvertical rhythmиchapter on vertical motionСвязанное введение).
По словамНаследование CSSСкажем так, мы не указали явно размер шрифта в контейнере содержимого «div # wrap», чтобы весь «div # wrap»НаследованиеШрифт его родительского элемента «body» — «16px».
1、Стиль абзаца:— шрифт «12px», высота строки «18px» и значение поля
отНаследование CSSМы можем выучить все наши параграфыНаследованиеMsgstr «Font-size: 16px» его родительского элемента «div # wrap». В то же время, мы узнали из предыдущего введения1px = 1 ÷ 16 = 0.0625em, Чтобы мы могли легко узнать, сколько «em» равно «12px»
0.0625em × 12 = 0.750em
Так что мы можем стилизовать абзац p:
p {font-size: 0.75em;/*0.0625em × 12 = 0.750em */}
Для расчета высоты строки и «поля», требуемого абзацем как «18px», необходимоRichard Rutterсказатьbasic leadingТогда нам нужно рассчитать следующий метод и:
18 ÷ 12 = 1.5em
Используйте нужное значение высоты строки «18px», чтобы напрямую разделить на «размер шрифта 12px», чтобы получить значение «line-height» абзаца «p». В этом примере высота строки равна «1,5» над шрифтом, а затем мы добавляем стили «line-height» и «margin» к абзацу «p»
p{ font-size: 0. 75em;/*0.625em × 12 = 0.750em */ line-height: 1.5em;/*18px(line-height) ÷ 12(font-size) = 1.5em */ margin: 1.5em;/*18px(margin) ÷ 12(font-size) = 1.5em */ }
2、Установите размер шрифта 18px для заголовка
Заголовок «h2» имеет тот же принцип, что и параграф «p», так же как и онНаследование»Font-size» для «16px» его родительского элемента «div # wrap», поэтому мы можем вычислить его «em» таким же образом
0.0625em × 18 = 1.125em
Мы можем записать полученное значение в таблицу стилей CSS
h2 { font-size: 1.125em;/*0.625em × 18 = 1.125em*/ }
Также сохранитьRichard RutterSaidvertical rhythmМы также установили «line-height» и «margin» заголовка «h2» в «18px», используя метод, описанный ранее. Их значение «em» легко получить как «1em»:
h2 { font-size: 1.125em; /*0.625em × 18 = 1.125em*/ line-height: 1em; /*18px(line-height) ÷ 18px(font-size) = 1em */ margin: 1em; /*18px(margin) ÷ 18px(font-size) = 1em */ }
Установите размер изображения — используйте их
СделатьОбразец гибкого макетаТакой результат, нам также нужно вставить изображение в HTML:
<body> <div> <h2>. ...</h2> <p><img src="90.png" alt="" /> Lorem...</p> </div> </body>
Наше изображение имеет ширину и высоту «90px», правое поле и нижнее поле «18px», и оно также плавает влево. Давайте посмотрим, как добиться этих стилевых эффектов картинок:
Из структуры HTML мы четко знаем, что изображение является подэлементом абзаца «p». Из предыдущего введения вы знаете, что значение «font-size» этого абзаца «p» определено как «12px», поэтому мы При вычислении значения атрибута изображения его нельзя вычислить с помощью «1px = 0,0625em» или «1em = 16px», нам нужно использовать самую старую формулу для расчета:
1 ÷ размер шрифта родительского элемента × значение пикселя для преобразования = значение em
Таким образом, согласно приведенной выше формуле, мы можем рассчитать размер картинки:
1 ÷ 12 × 90 = 7.5em
Теперь вы можете записать вычисленное значение в стиль:
p img { width: 7.5em; / * 1 ÷ 12 (размер шрифта родительского элемента) × 90 пикселей (ширина изображения) = 7,5em * / height: 7. 5em; / * 1 ÷ 12 (размер шрифта родительского элемента) × 90px (высота изображения) = 7,5em * / }
Из абзаца мы знаем, что «18px» — это «1em», и теперь мы также используем его в стиле рисунка:
p img { width: 7.5em; / * 1 ÷ 12 (размер шрифта родительского элемента) × 90 пикселей (ширина изображения) = 7,5em * / height: 7.5em; / * 1 ÷ 12 (размер шрифта родительского элемента) × 90px (высота изображения) = 7,5em * / margin: 0 1.5em 1.5em 0; float: left; }
Итак, мы делаем суммуОбразец гибкого макетаТот же эффект. Я надеюсь, что такой пример поможет вам понять, как использовать «em» для создания гибкого метода размещения. Конечно, вы все еще можете беспокоиться об использовании «em» для создания гибкого макета, который не может быть таким же точным, как «px». Если вы действительно понимаете этот урок, я думаю, у вас не будет такой идеи.
Сводная формула гибкого макета
Наконец, я думаю, что у всех будет такая же идея, как и у меня, то есть, как значение «px» соответствующего параметра успешно и правильно преобразуется в значение «em». После изучения выше я наконец суммирую формулу:
Если размер самого элемента не задан, преобразование ширины, высоты, высоты строки, поля, отступов, границы и других значений элемента преобразуется в соответствии со следующей формулой:
1 ÷ размер шрифта родительского элемента × значение пикселя для преобразования = значение em
Давайте посмотрим на пример:
<body> <div>test</div> </body>
Размер шрифта по умолчанию для нашего тела равен «16px», а значения соответствующих параметров «div # wrapper» должны быть следующими:
#wrapper { width: 200px; height: 100px; border: 5px solid red; margin: 15px; padding: 10px; line-height: 18px; }
Затем мы конвертируем параметры по приведенной выше формуле:
#wrapper { width: 12.5em;/ * 1 ÷ 16 × 200 = значение 12,5em * / height: 6.25em;/ * 1 ÷ 16 × 100 = значение 6,25 мкм * / border: 0.3125em solid red;/ * 1 ÷ 16 × 5 = 0,3125em значение * / margin: 0. 9375em;/ * 1 ÷ 16 × 15 = 0,9375em значение * / padding: 0.625em;/ * 1 ÷ 16 × 10 = 0,625em значение * / line-height: 1.125em;/ * 1 ÷ 16 × 18 = значение 1,125em * / }
Давайте посмотрим на рассчитанное значение:
Далее мне нужно, чтобы все посмотрели на эффект. Это очень важно. Посмотрите внимательно.Исходя из тех же параметров, добавьте маленький элемент для установки размера шрифта: 14px;, Вы можете сказать, что это очень просто, просто добавьте его в соответствии с предыдущей формулой, а затем я добавлю его в соответствии с расчетом, который вы сказали сейчас:
#wrapper { font-size: 0.875em;/ * 1 ÷ 16 × 14 = значение 0,875em * / width: 12.5em;/ * 1 ÷ 16 × 200 = значение 12,5em * / height: 6.25em;/ * 1 ÷ 16 × 100 = значение 6,25 мкм * / border: 0.3125em solid red;/ * 1 ÷ 16 × 5 = 0,3125em значение * / margin: 0.9375em;/ * 1 ÷ 16 × 15 = 0,9375em значение * / padding: 0.625em;/ * 1 ÷ 16 × 10 = 0,625em значение * / line-height: 1. 125em;/ * 1 ÷ 16 × 18 = значение 1,125em * / }
Давайте посмотрим на расчетное значение макета под firebug
Чтобы лучше объяснить проблему, я установил размер шрифта самого элемента и размер шрифта самого элемента, оба из которых рассчитываются в firebug:
Основная цель моего скриншота — проиллюстрировать проблему, заключающуюся в том, что если для самого элемента задан размер шрифта, формула расчета не такая, как указано выше, нам необходимо внести некоторые изменения:
1. Формула расчета шрифта остается прежней
1 ÷ размер шрифта родительского элемента × значение пикселя для преобразования = значение em
2. Формула расчета других атрибутов должна быть заменена на
1 ÷ размер шрифта элемента × значение пикселя для преобразования = значение em
Итак, давайте посчитаем это сейчас:
#wrapper { font-size: 0.875em;/ * 1 ÷ 16 × 14 = значение 0,875em * / width: 14. 2857em;/ * 1 ÷ 14 × 200 = 14,2857em значение * / height: 7.1429em;/ * 1 ÷ 14 × 100 = 7,1429em значение * / border: 0.357em solid red;/ * 1 ÷ 14 × 5 = 0,357em значение * / margin: 1.071em;/ * 1 ÷ 14 × 15 = значение 1,071em * / padding: 0.714em;/ * 1 ÷ 14 × 10 = 0,714em значение * / line-height: 1.2857em;/ * 1 ÷ 14 × 18 = 1,2857em значение * / }
Мы смотрим на расчетное значение один раз:
резюме
В длинной истории много статей, единственное, что я хочу вам сказать, это следующие пункты
1. Размер шрифта по умолчанию для браузера составляет 16 пикселей
2. Если сам элемент не устанавливает размер шрифта, то все значения атрибутов на самом элементе, такие как «boder, width, height, padding, margin, line-height» и т. Д., Мы можем рассчитать по следующей формуле
1 ÷ размер шрифта родительского элемента × значение пикселя для преобразования = значение em
3. Такие вещи нужно понимать медленно, иначе их легко спутать со вторым пунктом. Если для элемента задан размер шрифта, преобразование размера шрифта по-прежнему рассчитывается по второй формуле:
1 ÷ размер шрифта родительского элемента × значение пикселя для преобразования = значение em
Затем элемент устанавливает размер шрифта, и другие атрибуты этого элемента, такие как вычисление «border, width, height, padding, margin, line-height», должны быть рассчитаны по следующей формуле:
1 ÷ собственный размер шрифта элемента × значение пикселя для преобразования = значение em
Таким образом, я не знаю, понимаете ли вы это. Если вы этого не понимаете, вы можете вернуться и посмотреть на пример выше.
Чтение чтения
Если вы все еще не знаете, что я говорю, вы можете нажать на соответствующую запись в блоге ниже:
- W3C»The amazing em unit》
- typophile.com»The Em》
- Webtypography»The Elements of Typographic Style Applied to the Web》
- CSS2Font-size
- CSS2: Assigning property values, Cascading, and Inheritance
- Mike Cherim»CSS Layouts: The Fixed. The Fluid. The Elastic》
- Roger Johansson»Fixed or fluid width? Elastic!》
- Patrick Griffiths»Elastic Design》
Наконец, в конце этого урока, давайте поблагодаримДжон ЧенПринесите нам такой хороший учебник «The Incredible Em & Elastic Layouts with CSS》。
Единицы измерения в CSS em, rem, pt, px, vw, vh, vmin, vmax, ex, ch, и другие . Основы CSS
На этой странице
Единицы измерения в CSS
В CSS применяется несколько единиц измерения. Самая известная единица измерения – пиксели , но есть и другие единицы , которые не так популярны , но очень удобны в некоторых случаях использования .
Таблица рекомендуемых единиц в CSS
Media | Рекомендуемые | Редкое использование | Нечастое использование | Не рекомендуется |
---|---|---|---|---|
Экран | em, rem, % | px | ch, ex, vw, vh, vmin, vmax | cm, mm, in, pt, pc |
Для печати | em, rem, % | cm, mm, in, pt, pc | ch, ex | px, vw, vh, vmin, vmax |
Относительные единицы
В отличие от абсолютных единиц , таких как пиксели , поинты или сантиметры , вы также можете определять размеры в относительных единицах , таких как процент , em или rem . Относительные единицы также соответствуют стандартам доступности .
В большинстве браузеров размер шрифта по умолчанию равен 16px , вы можете использовать это значение в качестве основы для вычислений (например , 16 пикселей равно 1em , 1rem или 100%).
Ед. изм | Описание |
---|---|
% | Проценты |
em | Размер шрифта элемента (например, 2,5em означает, что шрифт в 2,5 раза больше обычного шрифта) |
rem | Размер шрифта корневого элемента документа |
ch | Ширина символа «0» в монофонических шрифтах, где все символы имеют одинаковую ширину, 1 канал равен 1 символу |
ex | x — Высота текущего шрифта, измеренная по высоте нижнего регистра x |
Содержимое файла style.css
@charset "utf-8" @media screen and (max-width: 767px) { body { max-width: 767px; height auto; } } body { font-family: 'Fira Code', monospace; } h3 { font-family: "Verdana" font-size: 1. 8rem; color: blue; } div { box-sizing: border-box; color: black; margin-bottom: 4px; padding: 4px; width: 400px; } .percent { font-size: 200%; } .em { font-size: 1em; } .rem { font-size: 1rem; } .ch { font-size: 1ch; } .ex { font-size: 1ex; }
Содержимое файла index.html
<!doctype html> <html lang="ru"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Относительные единицы CSS</title> <link rel="stylesheet" type="text/css" href="style.css"> </head> <body> <h3>Относительные единицы CSS</h3> <div>font-size: 200%</div> <div>font-size: 1em</div> <div>font-size: 1rem</div> <div>font-size: 1ch</div> <div>font-size: 1ex</div> </body> </html>
Открыть пример в новом окне
Подключения стилей CSS.Различие между em и rem
Различие заключается в наследовании . rem — Значение основано на корневом элементе (html). Каждый дочерний элемент использует html размер шрифта в качестве основы для расчета.
em — Зависит от размера шрифта родительского элемента .
rem — Значительно упрощает расчет размера шрифта. При использовании вложенных элементов или даже нескольких вложенных элементов (например, списков) размер шрифта больше не нужно рассчитывать по отношению к размеру шрифта родительского элемента. rem всегда вычисляет размер шрифта относительно html тега.
Абсолютные единицы
Абсолютные единицы фиксированы в его размере , длину сантиметра не обсудить . Если у вас есть случай , когда требуется точная длина , вы должны использовать абсолютные единицы (например , для компонентов , размер которых не следует изменять) . Они также могут быть полезны, если вы хотите определить ограничения , чтобы области не стали слишком широкими или слишком узкими . Абсолютные единицы не меняются в зависимости от размера экрана , направления или других изменений .
Абсолютные единицы
Ед. изм | Описание | Размер | cm | Сантиметры | 1 cm = 1 cm |
---|---|---|
mm | Миллиметры | 10 mm = 1 cm |
in | Дюймы | 1 in = 96px = 2.54 cm |
px | Пиксель | 1 px = 1/96th of 1 in |
pt | Пункт | 1 pt = 1/72 of 1 in |
pc | Пика | 1pc = 12 pt |
Содержимое файла style.css
@charset "utf-8" @media screen and (max-width: 767px) { body { max-width: 767px; height auto; } } body { font-family: 'Fira Code', monospace; } h3 { font-family: "Verdana" font-size: 1.8rem; color: blue; } .cm { background: purple; height: 1cm; } . mm { background: blue; height: 10mm; } .in { background: orange; height: 1in; } .pt { background: green; height: 72pt; } .px { background: deepskyblue; height: 96px; } .pc { background: lightcoral; height: 6pc; }
Содержимое файла index.html
<!doctype html> <html lang="ru"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Абсолютные единицы</title> <link rel="stylesheet" type="text/css" href="style.css"> </head> <body> <h3>Абсолютные единицы</h3> <div><strong>Cантиметры:</strong>height = 1cm (1cm = 1cm)</div> <div><strong>Миллиметры:</strong>height = 10mm (10mm = 1cm)</div> <div><strong>Дюймы:</strong>height = 1in (1in = 2.54cm)</div> <div><strong>Пункт:</strong>height: 72pt (72pt = 1in = 2.54cm)</div> <div><strong>Пиксель:</strong>height: 96px (96px = 1in = 2. 54cm)</div> <div><strong>Пика:</strong>height: 6pc (6pc = 1in = 2.54cm)</div> </body> </html>
Открыть пример в новом окне
Подключения стилей CSS.Смотрите также источник.
CSS em, rem, vh, vw и другие, объяснение
Многие свойства CSS, такие как width
, margin
, padding
и font-size
, принимают длину, а в CSS есть много разных способов выразить длину.
В CSS длина — это число без пробелов. Например, 5px
, 0.9em
и так далее.
Существует два основных вида единиц измерения длины и размера в CSS: абсолютные и относительные.
Абсолютные единицы длины
Абсолютные единицы длины основаны на фактических физических единицах и обычно считаются одинаковыми на всех устройствах. Однако в зависимости от размера и качества вашего экрана или настроек вашего браузера или операционной системы могут быть некоторые исключения.
Вот некоторые распространенные единицы абсолютной длины в CSS:
px
Пиксели или px
— одни из самых распространенных единиц длины в CSS.
В CSS 1 пиксель формально определяется как 1/96 дюймов. Все остальные единицы абсолютной длины основаны на этом определении пикселя.
Но когда этот стандарт был изначально сформулирован, большинство мониторов имели разрешение 1024 x 768 и DPI (точек на дюйм) 96. long может не иметь точного размера 1 дюйм, в зависимости от устройства.
Несмотря на то, что размер в пикселях может различаться на разных устройствах, обычно считается, что для экранов лучше использовать пиксели.
Если вы знаете, что ваша страница будет напечатана на высококачественном принтере, вы можете использовать другую единицу измерения, например см
или мм
.
Подробнее об истории единицы пикселя и о том, почему дюйм CSS не всегда соответствует физическому дюйму, можно прочитать в этой статье.
см
см.
В CSS 1 см
составляет примерно 37,8 пикселя или примерно 25,2/64 дюйма.
мм
Миллиметры.
В CSS 1 мм
составляет примерно 3,78 пикселя или 1/10 сантиметра.
дюйма
дюйма.
В CSS 1in
составляет примерно 96 пикселей или около 2,54 см.
балла
балла.
В CSS 1pt
составляет примерно 1,3333 пикселя или 1/72 дюйма.
шт.
Пика.
В CSS 1pc
составляет примерно 16 пикселей или 1/6 дюйма.
Единицы относительной длины
Единицы относительной длины относятся к размеру или настройкам другого элемента. Например, относительный размер шрифта элемента может быть рассчитан с использованием размера шрифта родительского элемента.
Вот некоторые распространенные единицы относительной длины:
em
Единица CSS em
получила свое название от типографской единицы. В типографике термин em «первоначально был ссылкой на ширину заглавной буквы M в используемом шрифте и размер ».
При использовании со свойством font-size
, em
наследует font-size
от своего родительского элемента:
.container { размер шрифта: 16px; } .контейнер р { размер шрифта: 1em; } .контейнер h3 { размер шрифта: 3em; } .контейнер h4 { размер шрифта: 2em; }
В этом примере размер шрифта
из p
равен 16px
(16 * 1). Между тем, размер шрифта
из h3
равен 48px
(16 * 3), а 32px
для h4
(16*2).
Если em
используется с другим свойством, таким как width
, em
вычисляется с использованием размера целевого элемента.
рем
Корень эм
. На эту относительную единицу не влияет размер или настройка родительского элемента, а вместо этого она основана на корне документа. Для веб-сайтов корнем документа является элемент html
.
р { размер шрифта: 1.25rem; }
В большинстве браузеров размер шрифта по умолчанию равен 16, поэтому размер шрифта
из элементов html
равен 16px
. Таким образом, в этом случае p
равно 20px
(16 * 1,25).
Но если пользователь изменит размер шрифта по умолчанию в своем браузере, то размер шрифта
из p
соответственно увеличится или уменьшится.
%
Проценты или размер в процентах относительно размера родителя:
div { ширина: 400 пикселей; } делитель р { ширина: 75%; }
Так как ширина родителя составляет 400 пикселей
, ширина внутреннего абзаца составляет 300 пикселей
(400 * 0,75).
vw
Ширина обзора. 1vw
составляет 1% от ширины области просмотра.
Например:
тело { ширина: 100vw; }
Поскольку для элемента body
задано значение 100vw
, или 100% ширины области просмотра, он будет занимать всю доступную ему ширину. Поэтому, если вы измените размер окна браузера на 690 пикселей в ширину, то тело
займет все 690 пикселей в ширину.
vh
Высота обзора. 1vh
составляет 1% высоты области просмотра.
Например:
дел { высота: 50вх; }
div
заполнит 50% высоты области просмотра. Таким образом, если окно браузера имеет высоту 900 пикселей, высота
элемента div
будет равна 450 пикселям.
ex
CSS ex 9Единица 0004 получила свое название от x-height в типографике или «высоты буквы x в шрифте». Во многих шрифтах символ x в нижнем регистре обычно составляет примерно половину высоты самого большого символа.
В CSS 1ex
— это высота шрифта по оси x или половина от 1em
.
Но поскольку размер символа x в нижнем регистре может значительно различаться в зависимости от шрифта, единица CSS ex
используется редко.
ч
Символьная единица. Единица CSS ch
определяется как ширина символа 0 (ноль или U+0030) шрифта.
В то время как единица ch
работает как точное измерение для моноширинных шрифтов / шрифтов с фиксированной шириной, таких как Courier, она может быть непредсказуемой с пропорциональными шрифтами, такими как Arial.
Например, если ваш шрифт Courier и вы установили ширину элемента 60ch
, этот элемент будет иметь ширину 60 ровно 60 символов.
Но если ваш шрифт Arial и вы установили ширину элемента на 60ch
неизвестно, насколько широким будет элемент — символы могут переполнить контейнер или оказаться недостаточными.
Прочтите эту статью, чтобы получить подробное описание устройства ch
и посмотреть несколько примеров.
vmin
и vmax
Минимальные ( vmin
) и максимальные ( vmax
) единицы измерения основаны на значениях vw
и
3 vh 90.
1vmin
составляет 1% от наименьшего размера области просмотра, а 1vmax
составляет 1% от наибольшего размера области просмотра.
Например, представьте себе окно браузера шириной 1200 пикселей и высотой 600 пикселей. В этом случае 1vmin
равно 6px
(1% от vh
, что меньше на 600 пикселей). Между тем, 1vmax
равно 12px
(1% от vh
, что является большим значением при 1200 пикселях).
Научитесь программировать бесплатно. Учебная программа freeCodeCamp с открытым исходным кодом помогла более чем 40 000 человек получить работу в качестве разработчиков. Начать
Что такое единица Em в CSS?. И как это связано с типографикой. | by Nainy Sewaney
И как это связано с типографикой.
ЭМ в УСБ. Иллюстрация автора.Как веб-разработчик, вполне возможно, что вы сталкивались с единицей em в CSS.
Это одна из наиболее часто используемых единиц для адаптивного дизайна.
Некоторые говорят, что это сбивает с толку, некоторые являются преданными поклонниками, а других это вообще не волнует. Я нашел их загадочными и решил отправиться на поиски.
Поиски понимания "Что такое ems и откуда они взялись?"
Чтобы найти ответы на свои вопросы, я решил отправиться в прошлое.
Истоки em восходят к типографике, когда в процессах печати использовались деревянные и металлические блоки для создания букв на бумаге.
Каждое письмо имело заранее определенный контейнер из металла или дерева вокруг него.
Этот контейнер имел фиксированную высоту и разную ширину в зависимости от шрифта.
Дизайнер шрифта определил размеры контейнера. Этот контейнер назывался Ящик Эм (Эфемерный) .
Каждая буква в своем почтовом ящике. Фото Fabio Santaniello Bruun на UnsplashХорошо, но какое отношение все это имеет к ним?
Эм, мой друг, это не что иное, как высота коробки.
Итак, 1em = высота блока em (каким бы числом это ни было).
Круто. Так что же это означает для цифровых шрифтов в наших браузерах?
Давайте перейдем к нашей следующей остановке, будущему, чтобы понять его.
В наше время мы не используем металлические или деревянные блоки для цифровых шрифтов, но поле em все еще существует.
Каждая буква цифрового шрифта окружена воображаемой рамкой em.
И высота этого поля em определяется размером вашего шрифта.
Джорджия и Фаустина установлены с одинаковым размером шрифта. Иллюстрация автора.Например, здесь у нас есть два шрифта, Georgia и Faustina.
Несмотря на одинаковый размер в пикселях, вы можете заметить разницу в размерах буквы A для обоих шрифтов.
Вот в чем загвоздка.
Размер шрифта, который вы устанавливаете при использовании ems, представляет собой не высоту символа шрифта, а высоту поля em.
Вот почему вы можете увидеть различия в размерах слов даже при одинаковом размере шрифта.
Georgia и Faustina отображают разные размеры, несмотря на одинаковый размер шрифта. Иллюстрация автора.Теперь, когда мы поняли значение em, давайте посмотрим на его использование в HTML.
В веб-мире em по-прежнему соответствует высоте поля em.
Но кто определяет высоту поля em для веб-шрифтов?
Высота поля em считается относительной и всегда зависит от размера шрифта, унаследованного от его прямого родителя.
Эээ... что?
Поскольку код говорит громче слов, давайте посмотрим на пару примеров кода.
Случай 1: Родительский элемент имеет размер шрифта по умолчанию
В приведенном выше примере кода у нас есть дерево DOM, состоящее из таких элементов, как:
→
→В этом дереве элемент div> — единственный элемент с указанным размером шрифта, равным 2em.
Его прямой родительский элемент, элемент
, не имеет явно установленного размера шрифта, равно как и элемент.Если вы помните, ранее мы говорили, что em — это относительная единица, которая зависит от наследования размера шрифта от его прямого родительского элемента.
Размер шрифта для прямого родителя в этом случае не указан, по крайней мере явно.
Так что теперь?
В настоящее время элемент
наследует размер шрифта от элемента, который, в свою очередь, получает размер шрифта от настроек браузера по умолчанию.Обычно браузер по умолчанию имеет размер 16 пикселей (хотя вы всегда можете изменить его по мере необходимости).
Использование значений по умолчанию,
размер шрифта элемента
= размер шрифта по умолчанию для прямого родителя * 2
= размер шрифта по умолчанию для
* 2= 16 пикселей * 2
= 32 пикселя
1 Оглядываясь назад, элемент
Давайте посмотрим, что произойдет, если прямому родительскому элементу будет задан размер шрифта.
Случай 2: Родительский элемент имеет явно установленный размер шрифта
Продолжая предыдущий пример кода, наше дерево элементов DOM остается таким же, как
→
→С элементами
иВы можете заметить, что тот же
размер шрифта элемента
= размер шрифта родителя * 2
= размер шрифта
* 2= размер шрифта * 2 * 2 (размер шрифта
= размер шрифта * 2)= 16 пикселей (по умолчанию в браузере) * 4
= 64 пикселя
Ага, размер шрифта для элемента
Вот почему содержимое элемента
Вот тут-то и начинаются проблемы.
Как вы видели в предыдущих примерах кода, размер текста был увеличен путем простого увеличения размера шрифта его родительского элемента.
Вы можете представить сценарий, в котором у нас есть дерево элементов DOM, и для каждого элемента в дереве указан размер шрифта.
Эффекты изменения размера не займут много времени, чтобы снежный ком скатился вниз по дереву, что привело к огромному размеру шрифта для последнего элемента.
Чтобы противостоять этим эффектам, у нас есть спаситель — рем.
Rem сокращение от Root em или Root Ephemeral — это относительная единица, указывающая размер шрифта для корневого элемента, который представляет собой не что иное, как элемент.
Если для самого элемента размер шрифта не указан явно, то используется размер шрифта браузера по умолчанию.
Элементы в дереве DOM игнорируют размер шрифта своего родителя, а корневой элемент служит точкой взаимодействия для всех элементов.
Давайте посмотрим на пример кода, чтобы получить больше ясности.
В приведенном выше примере кода дерево DOM остается прежним
→
→Элемент
имеет значение 3rem, а элемент — 1rem.Угадайте, какой теперь будет размер шрифта для элемента
Учитывая размер шрифта браузера по умолчанию, равный 16px,
1rem = 16px
Таким образом,
размер шрифта элемента
= размер шрифта корневого элемента () * 2
= 32px
Ага. Несмотря на то, что прямой родительский элемент элемента
Теперь, когда мы лучше понимаем em и rem, пришло время узнать, когда какой из них использовать.
Не существует универсального подхода к использованию em и rem. Использование обоих этих блоков зависит от ваших целей.
Если все, что вам нужно, это масштабирование дочерних элементов по мере изменения размеров их родительских элементов, используйте em.
Используйте rem, если вы хотите, чтобы фиксированная точка отсчета для дочерних элементов масштабировалась и сохраняла предсказуемое поведение.
Em и rem — это разные единицы измерения, но их объединяет то, что они помогут вам добавить в ваш дизайн чувствительность к разным разрешениям.
Вы можете попробовать поэкспериментировать с обоими этими устройствами, а затем решить, какое из них лучше всего подходит для вас. В конце концов, все сводится к личным предпочтениям.
Вот так, ребята. Я надеюсь, что это новообретенное понимание em и rem поможет вам лучше их использовать и поддержит вас в создании адаптивных дизайнов.
Если у вас есть какие-либо вопросы, комментарии или предложения, не стесняйтесь оставлять их в комментариях ниже.
А пока удачного программирования!
References:
On Web Typography — Jason Santa Maria
The Em Box
Em vs. Rem
The Power of em Units in CSS
HTML & CSS
- CSS
Поделиться
С каждой сложной функцией в CSS у вас всегда будет поворотный момент, когда вы увидите, насколько действительно мощной является эта функция. И, хотите верьте, хотите нет, но мой личный поворотный момент в ems наступил спустя много времени после того, как я написал наполненное каламбуром введение в предмет.
Хотя к тому моменту я довольно хорошо понимал ems, я действительно начал понимать, насколько они эффективны, когда прочитал пост Simurai на Medium под названием Sizing (Web) component.
Так что в этом посте я оседлаю его фалды. Здесь вы найдете краткое введение в единицы em, за которым следует живая демонстрация техники, которую он описывает.
Что такое ems в CSS?
В CSS единица em равна вычисленной размеру шрифта
для элемента, к которому применяется em. Когда единицы em объявлены для дочерних элементов, которые не имеют font-size
, они наследуют свой font-size
от своего родителя или от другого элемента-предка, возможно, возвращаясь к корневому элементу документа.
Посмотрите на следующий CSS:
.example { размер шрифта: 20px; }
В этом случае 1em на этом элементе или на его дочерних элементах (при отсутствии других определений font-size
) будет равно 20px. Итак, если мы добавим строку:
. example { размер шрифта: 20px; радиус границы: .5em; }
Это значение border-radius
, равное .5em
, вычисляется как 10px (т.е. 20*.5). Аналогично:
.example { размер шрифта: 20px; радиус границы: .5em; набивка: 2эм; }
Значение отступа 2em
равно 40px (20*2). Как уже упоминалось, этот тип вычислений также будет применяться к любым дочерним элементам, если только какой-либо из этих дочерних элементов не имеет явно определенного значения font-size
, и в этом случае значение em будет рассчитываться на основе этого. Если размер шрифта нигде не определен в CSS, единица em будет равна размеру шрифта браузера по умолчанию для документа, который обычно составляет 16 пикселей.
Я думаю, это должно прояснить, как работает ems. Теперь давайте посмотрим, как эту технику можно использовать для создания легко изменяемых веб-компонентов, как обсуждалось Simurai в оригинальной статье на Medium. Я разовью его идею и предоставлю демонстрацию, чтобы увидеть это в действии.
Когда использовать em в CSS
Единицы Em хорошо работают с модульными методами CSS, такими как стилизация на уровне компонентов или инкапсулированные участки кода в целом. Например, их можно использовать для обеспечения того, чтобы все элементы компонента (например, карты) имели размер относительно друг друга и позволяли легко изменять его размер.
Техника в основном работает следующим образом: свойство font-size
используется, как называет его Simurai, как «троянский конь», создавая основу для различных элементов внутри нашего компонента или модуля. Поскольку единицы em, как описано выше, рассчитываются на основе определяемого корнем размера шрифта
родительского элемента, это позволяет легко изменять размер всего компонента, просто изменяя размер шрифта
родительского элемента.
Давайте посмотрим на это в действии в демо CodePen:
См. Pen Использование ems для компонентов с изменяемым размером от SitePoint (@SitePoint) на CodePen.
Этот глупый маленький модуль состоит из четырех основных элементов. Ничего особенного, просто пример, иллюстрирующий эту технику. Переместите ползунок диапазона в верхней части демонстрационной страницы , чтобы изменить размер модуля. Вы также можете протестировать его в полноэкранном режиме. Ползунок диапазона привязан к одному значению корневого элемента компонента: значение размера шрифта
.
Здесь следует отметить, что цель изменения размера компонента с помощью этого единственного свойства CSS не обязательно состоит в том, чтобы пользователь мог это сделать. В основном это делается для того, чтобы разработчик, поддерживающий модуль, мог быстро вносить коррективы, не возясь с различными значениями во всех частях компонента.
Как описано в предыдущем разделе, при изменении размера шрифта это распространяется на все значения em, установленные для этого родительского элемента, а также для всех его дочерних элементов, делая все части компонента пропорционально гибкими.
Если вы изучите CSS, вы заметите следующее:
- Все внутри компонента имеет размер в ems, кроме внешней границы (которую мы хотим всегда иметь 2 пикселя) и изображения, которое я может изменить размер, если мы этого захотим, но я доволен тем, что его размер является статическим для этого случая.
- Каплевидная штука в правом верхнем углу — это псевдоэлемент, который также выигрывает от базового
размера шрифта
родителя. - CSS также включает два медиа-запроса, которые корректируют размер шрифта
размер шрифта
.
Некоторые примечания, недостатки и т. д.
Как видно из использования ползунка диапазона в демонстрации, этот тип гибкого изменения размера не всегда является тем, что вам нужно. Это может быть несколько ограничивающим.
Возможно, вам придется настроить некоторые значения em, чтобы получить их так, как вам нравится, и, как в случае с родительской границей в демонстрации, вы можете не захотеть, чтобы возможность изменения размера применялась ко всем элементам. Вы можете легко преодолеть это, просто избегая ems на элементах, которые вы хотите пропустить.
Как описано в обсуждении оригинальной статьи Simurai, вам не нужно использовать единицы px для установки размера шрифта . Вы также можете использовать em для этого, но просто помните, что он будет унаследован таким же образом от своего родителя, возможно, исходя из значения документа по умолчанию для
размер шрифта
.
А как насчет Ремса и Сасса?
Единица rem в CSS всегда наследует свое значение от настройки размера базового шрифта в корневом элементе документа, независимо от вычисленного размера шрифта. В HTML корневым элементом всегда является элемент html
. Таким образом, вы можете использовать rems, но это будет означать, что вам придется управлять всеми компонентами на странице, используя размер шрифта для этого элемента. Это может работать в определенных проектах, но я думаю, что этот метод лучше всего работает, когда фокусируется изменение размера на изолированном компоненте, а не на всем документе.
Что касается использования препроцессора, такого как Sass, я думаю, что это второстепенный момент. В конечном счете, ваша скомпилированная таблица стилей будет использовать любые единицы, которые вы используете в своем коде Sass, и наследование будет работать точно так же.
Заключение
Как уже упоминалось, Simurai заслуживает похвалы за широкое распространение этой техники. Конечно, как он упоминает, в этом нет ничего нового, и многие опытные разработчики уже много лет используют базовую концепцию, но, возможно, не так часто в контексте веб-компонентов или модулей.
Как говорит Симурай, я думаю, что это хороший метод для использования при создании структуры CSS или библиотеки компонентов, и, по крайней мере, я думаю, что этот метод действительно помогает понять, насколько мощными являются единицы em.
Если у вас есть отзывы или опыт работы с подобной техникой, или есть идеи по улучшению этой концепции, буду рад услышать ваши комментарии. Поделиться этой статьей Он ведет блог в Impressive Webs и курирует Web Tools Weekly, информационный бюллетень для фронтенд-разработчиков, в основном посвященный инструментам.
css modulescss remem unitмодульные cssoocsweb компоненты
CSS Units — px, em, cm, vw, in, ex, pt, pc — TutorialBrain
Единицы CSS
Единицы CSS содержат различные единицы, которые являются способами выражения длины.
The properties like width , height , font-size , margin , padding , border , color , background-size etc must have a valid unit to describe its length .
На более высоком уровне единицы могут иметь –
- Числовые значения – Длина имеет номер, за которым следует единица измерения, например 10px , 5 мм , 8 дюймов и т. д. Между 9011 не должно быть пробела. число и единица измерения, т. е. 4 px , неверны, потому что между 4 и px есть пробел нижний уровень, единиц состоит из –
- Абсолютная длина — Фиксированное значение длины
- Относительная длина — Длина относительно устройства
Давайте разберемся с обоими подробно.
1. Абсолютная длина
Абсолютные длины — это те единицы длины, значение которых фиксировано для всех устройств.
Эти длины не подходят для экранов с низким разрешением, таких как компьютеры, поскольку большинство компьютеров имеют относительно низкое разрешение, и в идеале вам следует избегать их использования на своем веб-сайте (кроме «px», который является приличной единицей длины)
The widely used absolute length units are –
- px – Stands for Pixels
- pt – Full form is Points
- pc – Shorthand for Picas
- in – Подставки для дюймов
- см – Полная форма для сантиметров
- мм – Сокращенная форма для миллиметров q
23 Четверть миллиметра (Редко используется на веб-сайтах)
Предупреждение/Примечание/Информация
Абсолютные единицы, такие как pt , pc , дюймов , см , мм и q могут немного отличаться на экранах с низким разрешением (менее 200 точек на дюйм), но они не будут отличаться на экранах с высоким разрешением ( более 200 dpi).
В то время как пикселей специально разработан для размера шрифта CSS, и это исключение в абсолютной длине. Его длина зависит от типа устройства, поэтому он подходит для отображения, например, на экранах компьютеров.
Подписаться на @tutorial_brain
Длина пикселей (px)
px означает пикселов . Это в основном разработано для CSS, и это одна из наиболее часто используемых абсолютных длин.
Хотя это относится к абсолютной длине, ее длина зависит от типа устройства, и по этой причине даже W3C рекомендует использовать единицу измерения пикселей для экрана дисплея. В некоторых случаях вы также можете использовать его для устройств печати, таких как принтеры.
96px = 1in
Синтаксис длины «px»:
property_type: mpx ;
Где « м» может быть любым числовым значением с десятичной или без десятичной точки.
Например:
ширина: 5 пикселей;
высота: 10 пикселей;
поле: 3 пикселя;
Пример длины в пикселях (px)
. p-px { размер шрифта: 15px; цвет:зеленый; }
Длина в (очках)pt
pt означает точек .
W3C не рекомендует единицу длины в пунктах для экрана дисплея, но рекомендует ее для устройств печати, таких как принтеры.
12pt = 1pc
Синтаксис длины «pt»:
property_type: xpt ;
Где « x» может быть любым числовым значением с десятичной или без десятичной точки.
Например:
ширина: 72pt;
высота: 12pt;
Пример длины в пунктах (pt)
.p-pt { размер шрифта: 20pt; цвет:зеленый; }
Длина в пиках (шт.)
шт. означает пика или пика.
W3C не рекомендует использовать единицу длины Pica/s для экрана дисплея, но рекомендует ее для устройств печати, таких как принтеры.
1 шт. = 12 пунктов
6 шт. = 2,54 см
6 шт. = 1 дюйм
Синтаксис длины ‘ПК’:
property_type: npc ;
Где « n» может быть любым числовым значением с десятичной или без десятичной точки.
Например:
ширина: 6 шт.;
высота: 1 шт.;
Пример длины в Pica(pc)
.p-pica { размер шрифта: 3 шт.; цвет:зеленый; }
Длина в сантиметрах (см)
см означает см . Он широко используется в повседневных целях, но реже используется при разработке веб-сайтов.
W3C не рекомендует единицу измерения длины в сантиметрах для экрана дисплея, но рекомендует ее для устройств печати, таких как принтеры.
1 см = 10 мм
2,54 см = 1 дюйм
Синтаксис длины «см»:
property_type: acm ;
Где « a» может быть любым числовым значением с десятичной или без десятичной точки.
Например:
ширина: 3см;
высота: 2,5 см;
Пример длины в сантиметрах (см)
. п-см { размер шрифта: 1 см; цвет:зеленый; }
Длина в миллиметрах (мм)
мм означает мм . Это 1/10 сантиметра.
W3C не рекомендует единицу измерения длины миллиметра для экрана дисплея, но рекомендует ее для устройств печати, таких как принтеры.
10 мм = 1 см
25,5 мм = 1 дюйм
Синтаксис длины в мм:
property_type: bmm ;
Где « b» может быть любым числовым значением с десятичной или без десятичной точки.
Например:
ширина: 20 мм;
высота: 15 мм;
Пример длины в миллиметрах (мм)
.p-мм { размер шрифта: 4 мм; цвет:зеленый; }
Длина в дюймах (дюймах)
в означает дюймов .
W3C не рекомендует единицу измерения в дюймах для экрана дисплея, но рекомендует ее для устройств печати, таких как принтеры.
1 дюйм = 96 пикселей
1 дюйм = 2,54 см
Синтаксис длины «in»:
property_type: zin ;
Где « z » может быть любым числовым значением с десятичной запятой или без нее.
Например:
ширина: 0,5 дюйма;
ширина границы: 0,1 дюйма
Пример длины в дюймах (дюймах)
.p-in { размер шрифта: 0,5 дюйма; цвет:зеленый; }
Соотношение между дюймами, см, мм, pt, pt и px
1 дюйм = 2,54 см = 25,4 мм = 72 точки = 6 шт. = 96 пикселей
2. Относительная длина
Как следует из названия, Относительные единицы длины — это те длины, которые относятся к другой длине.
Относительная длина — это те единицы длины, значения которых НЕ фиксированы для всех устройств.
Относительная длина подходит для экранов с низким разрешением, таких как экраны компьютеров.
Широко используемые единицы относительной длины –
- em — относительно размера шрифта текущего элемента
- ex – относительно высоты x шрифта .
- % – Относительно окружающего родительского элемента в процентах
- ch – Относительно ширины цифры «0»
- rem — Break it like r + em т.е. Root em . Относительно размера шрифта корневого элемента документа HTML
- vw — относительно 1% ширины окна просмотра (размер браузера)
- vh — Относительно 1% высоты области просмотра (размер браузера)
- vmin — Относительно 1% ширины или высоты области просмотра, в зависимости от того, что меньше между vw и vh
- vmax — относительно 1% ширины или высоты окна просмотра, в зависимости от того, что больше между vw и vh
Единица CSS em
em не имеет полной формы. Это единица измерения относительно размера шрифта текущего элемента, поэтому она может быть разной для каждого элемента HTML-документа.
Допустим, у вас есть элемент с размером шрифта 2см, тогда 1em для этого элемента будет 2см. Точно так же, если у вас есть другой элемент с размером шрифта 3 дюйма, то 1em для этого элемента будет равен 3 дюймам.
Для больших экранов размер шрифта будет выглядеть больше, а для меньших экранов размер шрифта будет относительно меньше.
Это единственный блок, который W3C рекомендует для экрана дисплея, а также для устройств печати, таких как принтеры.
Единица em обычно используется с padding , margin , text-indent и т. д.
Где « a » может быть любым числовым значением с десятичной запятой или без нее.
Например:
отступ текста: 3em;
поле: 2 в
Пример единицы 'em'
div { размер шрифта: 40px; фон: красный; } . а { размер шрифта: 1em; ширина: 8em; фон: желтый; } .б { размер шрифта: 0.5em; фон: синий; }
Предупреждение/Примечание/Информация Если вы не закодируете размер шрифта для вашего текущего элемента, то 1 см будет приблизительно равен 2,37 em, т.е. 1 см = 2,37 em и 1 em = 16 пикселей (по умолчанию)
Пример единицы 'em', когда размер шрифта текущего элемента не установлен
.p-cm { размер шрифта: 1 см; цвет:зеленый; } .п-эм { размер шрифта: 2,37 em; цвет:зеленый; } .p-px { размер шрифта: 37,92 пикселя; /*2,37 * 16 пикселей */ цвет:зеленый; }
CSS ex length
Единица измерения ex относится к x-высоте шрифта.
Высота x равна высоте строчных букв, таких как x, a, c, m, или или одного размера.
Это редко используется, и W3C не рекомендует это для экранов дисплеев, а также для принтеров.
Синтаксис «ex» length:
property_type: bex ;
Где «b » может быть любым числовым значением с десятичной или без десятичной точки.
Например:
ширина: 2ex;
Пример длины 'ex'
p { высота строки: 16 пикселей; размер шрифта: 40px; поле: 15 пикселей; } отметка { размер шрифта: 1ex; } охватывать { размер шрифта: 2ex; }
Длина в процентах (%)
Единица % относится к окружающему родительскому элементу в процентах.
Допустим, ширина родительского элемента текущего элемента составляет 100 пикселей. Теперь, если вы определите ширину текущего элемента как 80%, тогда значение ширины будет 0,8*100 пикселей = 80 пикселей.
вы можете использовать этот блок в нескольких свойствах CSS, так как нет фиксированного правила, но одно место, где он используется чрезмерно, — это %keyframes анимации.
Синтаксис длины ‘%’:
property_type: x% ;
Где « x» может быть любым числовым значением с десятичной или без десятичной точки.
Например:
ширина: 20%;
Пример длины '%'
. parent { размер шрифта: 50px; фон: желтый; } .ребенок { размер шрифта: 60%; фон: зеленый; }
Канал CSS Единица измерения
Единица ch относится к ширине числа «0».
Синтаксис длины ‘ch’:
property_type: ych ;
Где « y » может быть любым числовым значением с десятичной запятой или без нее.
Например:
ширина: 2ч;
Пример 'ch' Unit
body { размер шрифта: 40px; фон: серый; } .а { размер шрифта: 1ch; фон: зеленый; } .б { размер шрифта: 2ch; фон: синий; } .с { размер шрифта: 3ch; фон: оранжевый; }
CSS rem
Блок rem является корневым em . Это относительно размера шрифта по умолчанию корневого элемента HTML-документа.
Итак, если размер шрифта корневого элемента равен 18px, то 1rem = 18px , что будет одинаковым для всех элементов, определенных с помощью rem единиц.
Он стал частью CSS в 2013 году и даже лучше, чем em , но некоторые старые браузеры не поддерживают его.
В ближайшие годы это будет самая популярная единица измерения, так как она напрямую зависит от базового размера шрифта.
Синтаксис единицы «рем»:
тип свойства: крем ;
Где « k » может быть любым числовым значением с десятичной запятой или без нее.
Например:
ширина: 5рем;
Пример единицы «рем»
html { размер шрифта: 18px; фон: желтый; } .а { размер шрифта: 1rem; фон: зеленый; } .б { размер шрифта: 2rem; фон: синий; } .с { размер шрифта: 3rem; фон: оранжевый; }
Предупреждение/Примечание/Информация Если вы не закодируете размер шрифта для своего корневого элемента, то 1rem будет примерно равен 16px, т.е. 1rem = 16px
Пример 'rem', когда размер шрифта корня не установлен
.a { размер шрифта: 1rem; } . б { размер шрифта: 16 пикселей; } .с { размер шрифта: 2rem; } .д { размер шрифта: 3rem; }
CSS vw length
Единица vw — это относительная единица, которая составляет 1% от ширины области просмотра, а область просмотра — это размер окна браузера. Он отличается от браузеров к браузерам.
Проще говоря, это 1/100 ширины окна просмотра.
Это означает, что значение единицы vw будет продолжать изменяться, пока вы продолжаете изменять ширину окна браузера.
Синтаксис длины «vw»:
property_type: xvw ;
Где « x » может быть любым числовым значением с десятичной запятой или без нее.
Например:
ширина: 10vw;
Пример длины 'vw'
.p-vw { размер шрифта: 8vw; цвет:зеленый; }
vh length
Единица измерения vh — это относительная единица, равная 1% высоты окна просмотра (размер окна браузера).
Проще говоря, это 1/100 высоты окна просмотра.
vh не поддерживается в некоторых старых браузерах.
Синтаксис длины vh:
property_type: xvh ;
Где " x " может быть любым числовым значением с десятичной запятой или без нее.
Например:
ширина: 10вх;
Пример длины 'vh'
.p-vh { размер шрифта: 14vh; цвет:зеленый; }
vmin и vmax length
vmin — это относительная длина, которая будет минимальной из vw и vh , поэтому она будет составлять 1% от ширины области просмотра ( vw) 3 v w
меньше vh , иначе это будет 1 % от высоты области просмотра ( vh ).4, если
4
Аналогично, vmax — это относительная длина, которая будет максимальной из vw и vh , поэтому она будет составлять 1% от ширины окна просмотра ( vw) , если vw больше, чем vh , иначе это будет 1% высоты области просмотра ( vh ).
Синтаксис длины vmin:
property_type: avmin ;
Синтаксис длины vmax:
property_type: bvmax ;
Где « a », и « b » могут быть любыми числовыми значениями с десятичной запятой или без нее.
Например:
ширина: 10vmin;
высота: 10vmax;
Пример длины 'vmin' и 'vmax'
.vmin { размер шрифта: 6vmin; цвет:зеленый; } .vmax { размер шрифта: 6vmax; высота строки: 12 пикселей; }
безразмерная длина
Вы можете пропустить единицу, если длина может быть безразмерной.
Например:
Если вы хотите установить отступ как 0 пикселей или 0 см и т. д., вы можете пропустить единицу измерения и установить прямо 0, например padding: 0 или margin: 0 .
Аналогично, для line-height:1,8 означает, что высота текста будет в 1,8 раза больше размера шрифта, т. е. 1,8*размер шрифта.
Примечание о том, какой блок использовать
Не существует фиксированного правила, согласно которому вы должны использовать абсолютные или относительные единицы измерения, но W3C рекомендует ниже:
- Для экранов дисплея . Вы также можете иногда использовать ex.
- Для устройств печати – W3c рекомендует использовать Иногда вы также можете использовать px , ex .
Фейсбук Твиттер Гугл плюс
em, rem и px — Коди Лойд
Опубликовано в CSS
У вас есть много вариантов, когда дело доходит до единиц внутри CSS. Вы можете сбить с толку, какие единицы измерения использовать, и в Интернете полно несколько противоречивых советов по этой теме. Здесь я изложу свои мысли по этому поводу.
Начну с вывода: по большей части не имеет значения, что вы используете, но лично я предпочитаю использовать rem для размеров шрифта и px для почти всего остального. В этой статье я объясню почему.
определения
Из трех единиц, которые мы рассматриваем, px является наиболее распространенным.
CSS-пиксель , обозначаемый в CSS с суффиксом
MDN https://developer.mozilla.org/en-US/docs/Glossary/CSS_pixelpx
, представляет собой единицу длины, которая примерно соответствует ширине или высоте одиночной точки, которую человеческий глаз может без труда увидеть, но в противном случае как можно меньше. По определению, это физический размер одного пикселя при плотности пикселей 96 точек на дюйм, расположенного на расстоянии вытянутой руки от глаз зрителя.
Как бы то ни было, 1 пиксель не обязательно равен ровно одному физическому пикселю на дисплее. Особенно сегодня, когда технология мониторов постоянно совершенствуется, настройки программного обеспечения могут резко изменить размер одного «пикселя». использовал их много.
em
— это относительная единица, которая относится к размеру шрифта родительского элемента. Итак, если размер шрифта родителя равен 16px, то 1em
будет 16px
, а 2em
будет 32px
. Важно понимать, что при использовании em
при изменении размера шрифта элемента меняется и значение em
. Таким образом, если вы установите размер шрифта некоторого элемента равным 2em
, а один из его дочерних элементов также будет иметь размер 2em
, вычисленное значение этих двух размеров шрифта не будет одинаковым. Ребенок будет в два раза больше родителя.
rem
очень похож на em
, за исключением того, что вместо того, чтобы всегда ссылаться на родительский элемент, он всегда ссылается на размер шрифта корневого HTML-элемента. Итак, в предыдущем примере, если и родитель, и потомок получают 2rem
, вычисленное значение будет одинаковым.
Очевидно, что существует больше вариантов, чем просто em, rem и px, и есть веские причины, по которым вы можете рассмотреть возможность использования других единиц в определенных ситуациях. Эта статья конкретно о трех в названии. (эта статья mdn — хороший краткий обзор всех вариантов) Во-вторых, мне 9 лет.0113 в основном рассказывая здесь о наиболее распространенных способах использования этих единиц в типичном пользовательском интерфейсе: определение размеров шрифта, полей, отступов, высоты и ширины. Мои мысли и советы могут быть применимы и в других случаях, но я не пытаюсь указать конкретное правило, которому нужно следовать в каждой ситуации.
последствия
Одной из основных причин, по которой кто-то захочет использовать относительную единицу вместо более абсолютной px
, является доступность. Многие пользователи по разным причинам меняют размер шрифта по умолчанию в своем браузере, чтобы улучшить читаемость. Длины, которые определены либо в em
или rem
изменятся, а значения px
останутся неизменными.
Итак, если вы хотите, чтобы ваши пользователи могли увеличить размер шрифта в своем браузере и чтобы это повлияло на ваш веб-сайт, вы должны использовать либо em
, либо rem
. Однако это не означает, что было бы целесообразно кодировать 90 113 каждой длины 90 114 как относительную единицу.
Кроме того, в наши дни гораздо проще увеличить масштаб веб-сайта в большинстве современных браузеров. При масштабировании масштабируются даже абсолютные значения в пикселях. По этой причине один убедительный (хотя и слегка устаревший) ответ о переполнении стека предполагает, что использование относительных единиц не стоит усилий. Разумеется, за ним следует более новый и еще более подробный ответ, говорящий об обратном. Масштабирование очень хорошо работает в современных браузерах. Обычно увеличение масштаба эмулируется с использованием меньшего экрана, поэтому, если вы достаточно увеличите масштаб, браузер вызовет ваши медиа-запросы и отобразит мобильную версию сайта.
поведение масштабирования в chromeпредложения
Мое личное мнение таково, как я сказал выше: используйте rem
для размера шрифта и px
для всего остального. На мой взгляд, em
сбивает с толку больше, чем оно того стоит, и может привести к запутанным ошибкам, связанным с размером. Думает ли кто-то из Stack Overflow, что люди могут изменить размер шрифта в своем браузере, также в значительной степени не имеет значения. Если опция есть, мы должны кодировать таким образом, чтобы учитывать пожелания пользователя, поэтому, по крайней мере, для размера шрифта я рекомендую использовать рем
. Однако решение использовать rem
или px
для таких вещей, как поля и отступы, зависит от предпочтений дизайна. Рассмотрим следующее:
В приведенном выше клипе обе карты используют rem
для определения размера шрифта. Левая карта использует rem
для определения отступов/полей, а правая карта использует px. Очевидная разница в том, что все отступы и поля масштабируются внутри соответствующей карты вместе со шрифтом. Лично я предпочитаю эффект карты пикселей справа. Относительная карта более точно имитирует увеличенное изображение, но я предпочитаю, чтобы пиксельная карта сохраняла пространство, не увеличивая пробелы вокруг текста. Вы можете поиграть с этим примером здесь.
Одна из возможных проблем при совместном использовании px
и rem
заключается в том, что масштабирование может нарушить некоторые макеты. Это зависит от того, как вы все настроили, но если (например) ваш макет заголовка сломается, если текст внутри него выйдет за пределы или перенесется на вторую строку, вы можете не захотеть использовать эту опцию. В этой ситуации моя первая рекомендация — сделать все возможное, чтобы ваши макеты были достаточно гибкими, чтобы учитывать такие вещи, как обтекание текстом и переполнение. Если это невозможно, то лучше просто использовать px
для всего. Размеры вашего шрифта не изменятся в зависимости от настроек пользователя, но они по-прежнему смогут использовать функцию масштабирования своего браузера, которая нарушит макеты только в том случае, если вы не выполнили никаких адаптивных стилей.
Итак, чтобы повторить мой вывод: я определенно предпочитаю использовать относительные единицы для определения размера шрифта, чтобы вы могли уважать настройки пользователя, но я лично не думаю, что это имеет большое значение, если ваш макет достаточно сложен, что вы не можете его поддерживать . Если вы используете rem
для шрифтов, тогда я немного предпочитаю использовать пиксели для таких элементов, как поля и отступы, но нет ничего плохого в использовании для этого rem
, если вы предпочитаете эффект масштабирования.
В любом случае, важно рассмотреть эти детали и принять сознательное решение в любом случае. Бессистемное применение этих концепций может сделать ваш сайт невосприимчивым и сложным для пользователей, которые полагаются на вспомогательные технологии.
Искусство заголовка Стива Джонсона на Unsplash
rem vs em Единицы в CSS. У нас есть много хороших вариантов, когда дело доходит до… | Хоссам Хилал
У нас есть много хороших вариантов, когда дело доходит до единиц измерения в CSS. В современном мире адаптивного дизайна относительные единицы, такие как единицы em или rem, дают нам адаптируемость и гибкость прямо из коробки, что позволяет определять размеры на основе размеров шрифта, определенных выше в разметке.
Возможно, вы уже некоторое время используете единицы измерения em и rem, но вам может быть интересно узнать, в чем разница между ними и какая единица лучше
- Единицы измерения для свойства font-size будут относиться к размеру шрифта родительского элемента.
- единицы em для других свойств, кроме размера шрифта, будут относиться к размеру шрифта текущего элемента. Размеры единиц
- rem всегда будут относиться к размеру шрифта корневого элемента
html
. подходит для ваших вариантов использования. Разберем его как можно короче. - Используйте REM для размеров и интервалов.
- Используйте EM для медиа-запросов.
Пиксели (px) — это то, к чему мы все привыкли за эти годы. Все знают, что такое пиксель (хотя размер пикселя не всегда одинаков, но это в другой раз). Всем удобно использовать пиксели. Они легко переводимы. Дизайнеры, как правило, работают с пикселями, поэтому размеры можно брать непосредственно из Photoshop прямо для сборки.
Так что же не так с пикселями?
Я большой сторонник доступности в Интернете. В любой день я бы предпочел доступность «красивости».
Если вы устанавливаете все размеры шрифта, размеры элементов и интервалы в пикселях, вы неуважительно относитесь к конечному пользователю.
В большинстве браузеров пользователь может установить размер шрифта браузера по умолчанию, отличный от размера по умолчанию (обычно 16 пикселей). Если пользователь устанавливает значение по умолчанию 20 пикселей, все размеры шрифтов должны масштабироваться соответствующим образом.
Однако, если веб-сайт явно устанавливает размер шрифта в пикселях, заголовок, установленный на 30px, всегда будет 30px. Это может звучать здорово с точки зрения дизайнера/разработчика, но вы не пользователь, перестаньте делать сайты для себя.
К счастью, установка размера шрифта в пикселях не полностью нарушает доступность. Пользователь по-прежнему может увеличивать и уменьшать масштаб с помощью Ctrl Plus +/- (cmd вместо Ctrl в OS X). Однако мы можем добиться большего.
em заимствован из мира типографики, и это единица, которая позволяет установить размер шрифта элемента относительно размера шрифта его родителя.
Возьмем простой пример:
.parent { font-size: 18px; } .child { размер шрифта: 1.5em; }
.родительский {
размер шрифта: 18px;
} .child {
размер шрифта: 1,5 em;
}
В этом примере
дочерний элемент будет иметь размер шрифта 27 пикселей (1,5 * 18 пикселей = 27 пикселей).
Если родительский элемент не указывает значение для размера шрифта, значение будет искаться выше в дереве DOM. Если размер шрифта не указан вплоть до корневого элемента (
), то используется браузер по умолчанию 16 пикселей.
Довольно просто и понятно, верно? Однако единицы em можно использовать не только для установки размера шрифта, но и практически везде, где ожидаются единицы измерения:
- padding
- margin
- width
- height
- max-width
- …
Когда единицы em используются для других свойств, а не для собственного font-size элемента, значение зависит от свойства font-size.
Добавим к нашему примеру:
.parent {
размер шрифта: 18px;
}.child {
размер шрифта: 1.5em;
отступы: 2em 1em;
}
- Отступы сверху и снизу на
.child
будут равны 54px. Это в 2 раза больше размера шрифта нашего текущего элемента (2 * 27px) - Отступы слева и справа на
.child
будут иметь размер 27 пикселей. Это в 1 раз больше размера шрифта нашего элемента.
когда для размера шрифта используются единицы em, размер определяется относительно размера шрифта родителя. При использовании в других свойствах он зависит от размера шрифта самого элемента.
Пока все хорошо с использованием единицы em, но может возникнуть проблема из-за того, что единица может переходить с одного уровня на другой.
Сохраним аналогичный базовый пример:
.parent {
размер шрифта: 15 пикселей;
}.child {
размер шрифта: 2em;
}
Но давайте использовать его в нашей разметке следующим образом:
parent ">
I'm 15px
child ">
I'm 30px, как и ожидалось
< divld ih">child ">
У меня 60 пикселей, начинаются проблемы!
child ">
У меня 120px, теперь у нас действительно проблемы!
Итак, как видите, эффект единиц em может складываться, когда несколько элементов с размером шрифта em находятся внутри друг друга. Это может стать проблемой и привести к непредвиденным последствиям в ваших проектах.
Эта проблема является причиной создания модуля rem.
Единица rem, сокращенно от root em, является относительной единицей, которая всегда будет основываться на значении размера шрифта корневого элемента, которым является элемент
. А если
элемент не имеет указанного размера шрифта, используется браузер по умолчанию 16 пикселей.
Таким образом, это означает, что при использовании модуля rem значения родительских элементов игнорируются и принимается во внимание только значение корня.
Аналогичный пример, но в вещах:
.html {
размер шрифта: 16px;
}.parent {
размер шрифта: 15 пикселей;
}.child-rem {
размер шрифта: 2rem;
}parent ">
Я 15px
child-rem ">
У меня 32 пикселя, как и ожидалось
child-rem ">
У меня 32 пикселя, ага!
child-rem ">
У меня 32px, как по маслу!
Как видите, использование единиц rem позволяет нам избежать эффекта наложения единиц em.