Содержание
Значения свойств CSS — Изучение веб-разработки
Каждое свойство используемое в CSS имеет значение или набор значений которые допустимы для этого свойства, и изучение страниц MDN со свойствами поможет вам понять какие значения валидны для того или иного свойства. В этом уроке мы рассмотрим некоторые наиболее общие значения и единицы в использовании.
В спецификациях CSS и на страницах свойств здесь в MDN вы сможете определять (узнавать) значения, потому как они будут заключены в угловые скобки, например <color>
или <length>
. Если вы видите значение <color>
как действительное для определённого свойства это значит что вы можете использовать любой валидный цвет в качестве значение для этого свойства, как перечислено на странице <color>
.
Note: You’ll also see CSS values referred to as data types. The terms are basically interchangeable — when you see something in CSS referred to as a data type, it is really just a fancy way of saying value.
Note: Yes, CSS values tend to be denoted using angle brackets, to differentiate them from CSS properties (e.g. the color
(en-US) property, versus the <color> data type). You might get confused between CSS data types and HTML elements too, as they both use angle brackets, but this is unlikely — they are used in very different contexts.
В следующем примере мы установили цвет нашего заголовка используя ключевое слово и фон используя функцию rgb()
:
h2 {
color: black;
background-color: rgb(197,93,161);
}
Значение в CSS это путь определения коллекции допустимых под-значений. То есть если вы видите <color>
как применённый, то вам не надо озадачиваться какой из разных типов значения цвета может быть использован — ключевое слово, hex значение, функция rgb()
и т.д. Вы можете воспользоваться любым доступным значением <color>
при условии, что они поддерживаются вашим браузером. Страницы для всех значений на MDN дадут вам информацию о поддержке браузеров. Например, если вы посмотрите на страницу <color>
то вы увидите раздел совместимости браузеров в котором перечислены различные типы значений цвета и их поддержка.
Давайте посмотрим на некоторые типы значений и единиц с примерами чтобы вы могли опробовать различные возможные значения, с которыми вы можете часто сталкиваться.
Существуют различные типы числовых данных, которые вы можете использовать в CSS. Следующие типы классифицируются как числовые:
Тип данных | Описание |
---|---|
<integer> | <integer> (целое число) — целое число такое как 1024 или -55 . |
<number> |
|
<dimension> |
|
<percentage> |
|
Длины
Числовой тип, с которым вы будете сталкиваться чаще всего это <length>
(длина), например 10px
(пиксели) или 30em
. Существует два типа длин используемых в CSS — относительные и абсолютные. Важно знать разницу для того, чтобы понимать, насколько большими станут вещи.
Абсолютные единицы длины
Ниже приведены все единицы абсолютной длины — они не являются относительными к чему-либо и обычно считаются всегда одинакового размера.
Единицы | Название | Эквивалент |
---|---|---|
cm | Centimeters/Сантиметры | 1cm = 96px/2.54 |
mm | Millimeters/Миллиметры | 1mm = 1/10th of 1cm |
Q | Quarter-millimeters/Четверть-мм | 1Q = 1/40th of 1cm |
in | Inches/Дюймы | 1in = 2.54cm = 96px |
pc | Picas/Пики | 1pc = 1/16th of 1in |
pt | Points/Точки | 1pt = 1/72th of 1in |
px | Pixels/Пиксели | 1px = 1/96th of 1in |
Большинство из этих значений больше полезны при использовании печати, чем для вывода на экран. Например, мы обычно не используем cm
(сантиметры) на экране. Единственное значение которое вы в основном будете использовать это px
(пиксели).
Единицы относительной длины
Относительные единицы длин являются относительными к чему-то ещё, возможно к размеру родительского шрифта или к размеру окна просмотра. Преимущество использования относительных единиц состоит в том, что при тщательном планировании вы можете сделать так, чтобы размер текста или других элементов масштабировался относительно всего остального на странице. Некоторые наиболее используемые единицы веб-разработки перечислены в таблице ниже.
Единица | Относительна к |
---|---|
em | Размер шрифта родительского элемента. |
ex | x-высота шрифта элемента. |
ch | Предварительная мера (ширина) глифа «0» шрифта элемента. |
rem | Размер шрифта корневого элемента. |
lh | Высота строки элемента. |
vw | 1% от ширины окна просмотра. |
vh | 1% от высоты окна просмотра. |
vmin | 1% от меньшего измерения ширины окна просмотра. |
vmax | 1% от большего измерения ширины окна просмотра. |
Изучение на примере
В примере ниже вы можете увидеть, как некоторые относительные и абсолютные единицы длин ведут себя. Первый блок имеет width
(ширину) установленную в пикселях. Как абсолютная единица эта ширина будет оставаться такой же неважно что ещё измениться.
Второй блок имеет ширину, установленную в единицах vw
(ширина окна просмотра). Это значение относительно к ширине окна просмотра и таким образом 10vw это 10 процентов от ширины окна просмотра. Если вы измените ширину окна вашего браузера, размер блока должен измениться, однако этот пример встроен в страницу с использованием <iframe>
, поэтому это не сработает. Для того чтобы увидеть это в действии вы должны открыть этот пример в отдельной вкладке браузера.
Третий блок использует единицы em
. Они относительны к размеру шрифта. Я установил размер шрифта 1em
для содержимого <div>
, который имеет класс .wrapper
. Измените это значение на 1.5em
и вы увидите что, размер шрифта всех этих элементов увеличится, но только последний объект станет шире, поскольку его ширина относительна к тому размера шрифта.
После выполнения инструкция выше, попробуйте поиграть со значениями и посмотрите, что у вас получится.
em и rem
em
и rem
— две относительные длины, с которыми вы вероятное всего сталкиваетесь чаще при разметке чего-либо от блоков до текста. Стоит понимать как они работают, понимать различия между ними, особенно когда вы начинаете переходить к более сложным темам как стилизация текста или разметка CSS. Приведённый ниже пример показывает это.
HTML это набор вложенных списков — у нас имеется три списка в общей сложности и оба примера имеют одинаковый HTML. Единственное различие в том, что первый имеет класс ems, а второй класс rems.
Чтобы начать, мы установили 16px для размера шрифта элемента <html>
.
Повторим, единица em означает «размер шрифта родительского элемента». Элементы <li>
внутри <ul>
с классом ems
получают свои размеры от своего родителя. Так, каждый последующий уровень вложения становится прогрессивно больше, так как каждый имеет свой размер шрифта установленный на 1.3em
— 1.3 раза от размера шрифта родителя.
Повторим, единица rem означает «размер шрифта корневого элемента» (rem значит «root em». (root — корень)). Элементы <li>
внутри <ul>
с классом rems
получают свои размеры от корневого элемента (<html>
). Это значит, что каждый последующий уровень вложения не продолжает увеличиваться.
Однако, если вы измените font-size
(размер шрифта) <html>
в CSS, вы увидите что все остальное изменится относительно ему — и rem
— и em
-размеры текста
Проценты
Во многих случаях проценты обрабатываются таким же образом, как и длина. С процентами фишка в том, что они всегда устанавливаются относительно некоторого другого значения. Например, если вы установите font-size
элемента как проценты, то это будет процент от font-size
родительского элемента. Если вы используете процент для значения width
(ширина), то это будет процент от width
родителя.
В примере ниже два блока с размерами в процентах и два с размерами в пикселях имеющих одинаковые имена классов. Оба набора имеют ширину 200px и 40% соответственно.
Различие в том, что второй набор блоков находится внутри обёртки которая имеет ширину 400 пикселей. Второй блок шириной в 200px имеет ту же ширину что и первый, но второй 40 процентный блок теперь имеет 40% от 400px — намного уже чем первый.
Попробуйте изменить ширину обёртки (.wrapper) или процентное значение чтобы увидеть, как это работает.
В следующем примере размер шрифта установлен в процентах. Каждый <li>
имеет font-size
80%, поэтому элементы вложенного списка становятся прогрессивно меньше так как они наследуют свои размеры от родителя.
Обратите внимание, в то время как многие значения принимают как длину, так и проценты, существуют те, которые принимают только длину. Вы можете посмотреть какие значения допустимы на справочной странице свойств MDN. Если допустимые значения включают <length-percentage>
, тогда вы можете использовать и длину, и проценты. Если же допустимые значения включают только <length>
, то использование процентов невозможно.
Числа
Некоторые значения принимают числа без каких-либо единиц измерения. Примером свойства принимающего числа без единиц измерения может служить свойство opacity
, которое контролирует мутность элемента (настолько он прозрачен). Это свойство принимает числа между 0
(полностью прозрачное) и 1
(полностью мутное).
В примере ниже, попробуйте изменить значение opacity
на различные десятичные значения между 0
и 1
и посмотрите, как блок и его содержимое становится более и/или менее мутными.
Внимание: Когда вы используете числа в CSS в качестве значений, они не должны быть заключены в кавычки.
Существует много способов определения цвета в CSS, некоторые из которых реализованы довольно-таки недавно по сравнению с другими. Одинаковые значения цвета могут использоваться везде в CSS, определяете ли вы при этом цвет текста, цвет фона или цвет чего-либо ещё.
Стандартная система цветов доступная в современных компьютерах — это 24-битная система, которая позволяет отображать около 16.7 миллионов отдельных цветов через комбинацию различных красных, зелёных и синих каналов с 256 различными значениями каждого канала (256 x 256 x 256 = 16,777,216). Давайте взглянем на некоторые способы, с помощью которых мы можем определять цвет в CSS.
Внимание: В этом руководстве мы рассмотрим общие методы определения цвета, которые имеют хорошую поддержку браузерами; существуют и другие методы, но они не имеют столь же хорошей поддержки и являются менее общими.
Ключевые слова цвета
Довольно часто в примерах как здесь, так и на других страницах в MDN вы будете видеть использование ключевых слов цвета, поскольку это простой и понятный способ определения цвета. Существует определённое количество этих ключевых слов и некоторые их них имеют довольно занимательные имена! Полный список вы можете посмотреть на странице значений <color>
.
Попробуйте поиграть с разными значениями цвета на живом примере ниже, чтобы понять больше об идее как они работают.
Шестнадцатеричные RGB значения
Следующий тип значения цвета, с которым вы сталкиваетесь вероятнее всего — это шестнадцатеричные коды. Каждое hex-значение состоит из символа решётки (#) за которым следуют 6 шестнадцатеричных чисел, каждое из которых может принимать одно из 16 значений от 0 до f (представляющая 15) — то есть 0123456789abcdef
. Каждая пара значений представляет один из каналов — красного, зелёного или синего цветов — и позволяет нам определять любой из 256 доступных значений для каждого (16 x 16 = 256).
Эти значения являются немного более сложными и менее простыми для понимания, но они намного более универсальны чем ключевые слова — вы можете использовать hex-значения чтобы отобразить любой цвет, который вы хотите использовать в своей цветовой схеме.
И снова, попробуйте изменить значения, чтобы посмотреть, как варьируют цвета.
RGB и RGBA значения
Третья схема, о которой мы здесь поговорим это RGB. Значения RGB это функция — rgb()
— которой даётся три параметра представляющих каналы красного, зелёного и синего значений цветов, во многом так же, как hex-значения. Отличие с RGB является то, что каждый канал представлен не двумя hex-цифрами, а десятичным числом между 0 и 255 — что отчасти проще в понимании.
Давайте перепишем наш последний пример используя RGB цвета:
А также вы можете использовать цвета RGBA — что работает в точности, как и цвета RGB и то есть вы можете использовать любое значение RGB, однако существует четвёртое значение, которое представляет альфа канал цвета, которое контролирует мутность. Если вы установите это значение на 0
, то это сделает цвет полностью прозрачным, тогда как 1
сделает его полностью мутным. Значения между дают вам разные уровни прозрачности.
Внимание: Настройка альфа канала в цвете имеет одно ключевое различие в использовании свойства opacity
которое мы рассматривали ранее. когда вы используете мутность вы делаете элемент и все внутри него мутным, тогда как при использовании цвета RGBA вы делаете мутным только тот цвет который вы специфицируете.
In the example below I have added a background image to the containing block of our colored boxes. I have then set the boxes to have different opacity values — notice how the background shows through more when the alpha channel value is smaller.
In this example, try changing the alpha channel values to see how it affects the color output.
Note: At some point modern browsers were updated so that rgba()
and rgb()
, and hsl()
and hsla()
(see below), became pure aliases of each other and started to behave exactly the same. So for example both rgba()
and rgb()
accept colors with and without alpha channel values. Try changing the above example’s rgba()
functions to rgb()
and see if the colors still work! Which style you use is up to you, but separating out non-transparent and transparent color definitions to use the different functions gives (very) slightly better browser support and can act as a visual indicator of where transparent colors are being defined in your code.
HSL and HSLA values
Slightly less well-supported than RGB is the HSL color model (not supported on old versions of IE), which was implemented after much interest from designers. Instead of red, green, and blue values, the hsl()
function accepts hue, saturation, and lightness values, which are used to distinguish between the 16.7 million colors, but in a different way:
- Hue: The base shade of the color. This takes a value between 0 and 360, representing the angles round a color wheel.
- Saturation: How saturated is the color? This takes a value from 0–100%, where 0 is no color (it will appear as a shade of grey), and 100% is full color saturation
- Lightness: How light or bright is the color? This takes a value from 0–100%, where 0 is no light (it will appear completely black) and 100% is full light (it will appear completely white)
We can update the RGB example to use HSL colors like this:
Just as RGB has RGBA, HSL has an HSLA equivalent, which gives you the same ability to specify the alpha channel. I’ve demonstrated this below by changing my RGBA example to use HSLA colors.
You can use any of these color values in your projects. It is likely that for most projects you will decide on a color palette and then use those colors — and your chosen method of specifying color — throughout the whole project. You can mix and match color models, however for consistency it is usually best if your entire project uses the same one!
The <image>
data type is used wherever an image is a valid value. This can be an actual image file pointed to via a url()
function, or a gradient.
In the example below we have demonstrated an image and a gradient in use as a value for the CSS background-image
property.
Note: there are some other possible values for <image>
, however these are newer and currently have poor browser support. Check out the page on MDN for the <image>
data type if you want to read about them.
The <position>
data type represents a set of 2D coordinates, used to position an item such as a background image (via background-position
). It can take keywords such as top
, left
, bottom
, right
, and center
to align items with specific bounds of a 2D box, along with lengths, which represent offsets from the top and left-hand edges of the box.
A typical position value consists of two values — the first sets the position horizontally, the second vertically. If you only specify values for one axis the other will default to center
.
In the following example we have positioned a background image 40px from the top and to the right of the container using a keyword.
Play around with these values to see how you can push the image around.
Throughout the examples above, we’ve seen places where keywords are used as a value (for example <color>
keywords like red
, black
, rebeccapurple
, and goldenrod
). These keywords are more accurately described as identifiers, a special value that CSS understands. As such they are not quoted — they are not treated as strings.
There are places where you use strings in CSS, for example when specifying generated content. In this case the value is quoted to demonstrate that it is a string. In the below example we use unquoted color keywords along with a quoted generated content string.
The final type of value we will take a look at is the group of values known as functions. In programming, a function is a reusable section of code that can be run multiple times to complete a repetitive task with minimum effort on the part of both the developer and the computer. Functions are usually associated with languages like JavaScript, Python, or C++, but they do exist in CSS too, as property values. We’ve already seen functions in action in the Colors section — rgb()
, hsl()
, etc. The value used to return an image from a file — url()
— is also a function.
A value that behaves more like something you might find in a traditional programming language is the calc()
CSS function. This function gives you the ability to do simple calculations inside your CSS. It’s particularly useful if you want to work out values that you can’t define when writing the CSS for your project, and need the browser to work out for you at runtime.
For example, below we are using calc()
to make the box 20% + 100px
wide. The 20% is calculated from the width of the parent container .wrapper
and so will change if that width changes. We can’t do this calculation beforehand because we don’t know what 20% of the parent will be, so we use calc()
to tell the browser to do it for us.
This has been a quick run through of the most common types of values and units you might encounter. You can have a look at all of the different types on the CSS Values and units reference page; you will encounter many of these in use as you work through these lessons.
The key thing to remember is that each property has a defined list of allowed values, and each value has a definition explaining what the sub-values are. You can then look up the specifics here on MDN.
For example, understanding that <image>
also allows you to create a color gradient is useful but perhaps non-obvious knowledge to have!
Единицы измерения в 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 могут изменяться в зависимости от изменения размера окна браузера или смены ориентации мобильного телефона.
Единица измерения | Описание | Пример |
% | Устанавливает измерение в процентах относительно другого значения, как правило, охватывающего элемента. | div {width: 50%;} |
cm | Определяет измерение в сантиметрах. | p {padding-top: 1cm;} |
em | Относительное измерение высоты шрифта в em пространстве. Поскольку единица em эквивалентна размеру данного шрифта, то, если Вы укажите шрифт 12pt, каждый элемент «em» будет 12pt. Таким образом, 2em будет 24pt. | h2 {letter-spacing: 3em;} |
ex | Это значение устанавливает измерение относительно x-высоты шрифта. x-высота определяется высотой строчной буквы x шрифта. | p {letter-spacing: 7ex;} |
in | Определяет измерение в дюймах. | h3 {word-spacing: .10in;} |
mm | Устанавливает измерение в миллиметрах. | div {margin: .15mm;} |
pc | Определяет измерение в пиках. Пика эквивалентна 12 пунктам (12pt). | h4 {font-size: 10pc;} |
pt | Определяет измерение в типографских пунктах (твип), введённых компанией Adobe. Пункт равен 1/72 дюйма или 25,4/72 мм = 0,3528 мм. В странах СНГ, входящих в Таможенный союз, 1 пункт равен 0,376 мм. | table {font-size: 20pt;} |
px | Устанавливает измерение в пикселях экрана. | p {margin: 30px;} |
vh | Равен 1% высоты окна просмотра. | h2 {font-size: 2.0vh;} |
vw | Равен 1% ширины окна просмотра. | h3 {font-size: 2.0vw;} |
vmin | Равен 1vw или 1vh, в зависимости от того, что меньше. | div {font-size: 5vmin;} |
Что такое px, em, rem в CSS?
Многие люди путаются при работе с этими тремя единицами в CSS. Главной причиной этого является отсутствие понимания различий имеющихся между ними.
Для начала нужно усвоить базовое понимание этих единиц:
- Px (пиксель) – это единица измерения величины объектов относительно размера экрана.
- Em – это единица, основанная на размере шрифта родительского элемента (в пикселях).
- Rem – это единица,основанная на размере шрифта корневого элемента html (в пикселях).
Мы можем использовать эти единицы в различных свойствах CSS, таких как font-size, padding, margin, position.
Пиксели представляют собой неделимые объекты прямоугольной или круглой формы, размеры которых зависят от диагонали экрана устройства. Пиксель– это фиксированная единица, которая применяется к отдельным элементам там, где она определяется.
Пример:
div { font-size: 10px; padding: 10px; }
Эта строка кода CSS устанавливает размер шрифта в 10px и отступы размером в 10px со всех сторон.
Единицы измерения em зависят от размера шрифта родительского элемента. Это не фиксированные единицы, поскольку они зависят от базового размера. Когда изменяется размер родительского элемента, меняется и значение em.
Пример:
div { font-size: 10px; padding: 10em; }
Данный код CSS устанавливает размер шрифта в 10px, и отступы толщиной в 100px с каждой стороны, поскольку размер берётся из свойства font-size. В нем каждое значение принимается за 1em, то есть (10px = 1em, поэтому 10em = 10px * 10 = 100px).
Единица измерения rem зависит от размера шрифта, заданного в браузере по умолчанию, или размера шрифта, при именного к элементу html. Если базовый размер меняется, то значение rem также изменяется. Вы можете изменить размер шрифта, используемый по умолчанию, в настройках браузера.
Пример:
Допустим, размер шрифта, используемый по умолчанию в браузере – 14px.
div { font-size: 10px; padding: 10rem; }
Этот код установит размер шрифта в 10px и отступы в 140px с каждой стороны. При этом базовым будет размер шрифта по умолчанию, заданный в браузере, который берётся за 1rem. То есть: 14px = 1rem, поэтому 10rem = 14px * 10 = 140px.
Вопрос, который возникает при использовании этих единиц измерения: «Какие же единицы применять?» Особенно это касается em и rem. Какие элементы установить зависимыми от базового размера,а для каких применять динамические единицы измерения?
- Задача: задать размер элемента относительно размера шрифта, используемого по умолчанию на сайте, там, где не нужно менять размеры. В этом случае “rem” предпочтительнее.
- Чтобы использовать динамические единицы измерения там, где при уменьшении размера шрифта уменьшаются отступы или поля, применяйте “em”.
Для вложенных элементов используется только одна единица измерения – em. Если размеры шрифта или отступов дочернего элемента должны быть наполовину меньше, чем у родительского, тогда используйте em.
Пример:
div.parent { font-size: 10px; } div.parent div.child { font-size: 0.5em; }
Этот код установит размер шрифта родительского элемента в 10px, а шрифт дочернего элемента в 5px.Так как его размер зависит от значения font-size родительского элемента, которое принимается за 1em. То есть:10px = 1em, поэтому 0.5em = 10px / 2 = 5px.
Предположим, что размер шрифта, используемый по умолчанию в браузере,составляет 14px. Как это отразится на всех трёх единицах измерения?
Пример:
div.parent { font-size: 10px; padding: 10em; margin: 10rem;} div.parent div.child { font-size: 0.5em; padding: 10em; margin:10rem}
Для (div.parent)
- Размер шрифта = 10px.
- Внутренние поля с каждой стороны (10px = 1em, поэтому 10em * 10px) = 100px.
- Отступы с каждой стороны (14px = 1rem, поэтому 10rem * 14px) = 140px.
Для (div.child)
- Размер шрифта (0.5em = 10px / 2) = 5px.
- Внутренние поля с каждой стороны (5px = 1em, поэтому 10em * 5px) = 50px.
- Отступы с каждой стороны (14px = 1rem, поэтому 10rem * 14px) = 140px.
Ключевым для стилей дочернего элемента является свойство font-size, поскольку оно наследуетсяот родительского элемента.Для него размер шрифта задан в 10px, а в дочернем элементе он установлен в 0.5em. То есть, делится на два (как размер шрифта дочернего элемента).
Поля зависят от размера шрифта текущего элемента. За 1em принимается размер в 5px, (размер шрифта дочернего элемента).
Только отступы постоянны в обоих случаях. Они напрямую наследуются от корневого элемента html. Базовый размер шрифта в 14px неизменен, поэтому поля будут иметь размер 140px в обоих случаях.
Чтобы преодолеть эту путаницу в единицах измерения, нужно знать, какие элементы зависят от настроек браузера, а какие основаны на размере экрана пользовательского устройства.
Пожалуйста, опубликуйте ваши мнения по текущей теме материала. За комментарии, дизлайки, отклики, подписки, лайки низкий вам поклон!
Данная публикация является переводом статьи «Use of px, em, rem units in css, which one I have to use and when?» , подготовленная редакцией проекта.
Единицы измерения CSS для font-size: px, %, em, rem, vw, vh, vmin, vmax
Всем привет! Меня зовут Анна Блок, и сегодня мы поговорим про единицы измерения в CSS. Наверняка, многие из вас знают о таких единицах измерения, как px и %. Однако, по мимо всего прочего, мы разберем, как работают rem, em, vh, vw, vmax и vmin.
Cтатья получится большой, поэтому разобьем её на две части. Здесь мы поговорим о том, как эти единицы измерения влияют на размер шрифта, т.е на font-size. Во второй части затронем тему, насколько удобно использовать такие единицы измерения для того что бы управлять свойствами padding, margin, height, width и border-radius.
Специально для вас я создала интерактивную шпаргалку, где наглядно отображены основные единицы измерения. Вы можете менять значения по мере прочтения статьи, чтобы материал лучше усваивался.
Pixels
Давайте начнем с самого распространенного — px (c англ. pixels). Пиксель — это базовая, абсолютная и окончательная единица измерения. Пиксель в CSS — это то, что вы видите на экране. Именно он задает значение разрешению монитора. Все значения браузер при веб-разработке пересчитывает в пиксели.
Итак, давайте разберем разметку, которая у нас есть в интерактивной форме. Например, в первом блоке, есть класс box-px
за счет которого мы и будем стилизовать текст, который находится внутри.
<div> <h3>Pixels</h3> <p>font-size:16px</p> <p>font-size:8px</p> <p>font-size:32px</p> </div>
Обратите внимание, основные классы дублируются. На всю основную стилизацию влияет класс, который стоит после box
. Например, если просмотреть код CSS, то можно увидеть стилизацию .box-px .text-1
.
.box-px .text-1 { font-size:16px; }
В примере мы видим значение font-size:16px
, то есть то, что написано в классе text-n
, то и дублируется в CSS. Это сделано для наглядности. Вы должны понимать, что большинство браузеров по умолчанию имеют значение font-size: 16px
. Если убрать свойство .box-px .text-1
, то визуально ничего не изменится. При этом если мы вернем свойство назад, то тоже ничего не изменится, потому что это значение заложено по умолчанию в браузере. Однако, все что мы стилизуем далее — видоизменяется:
.box-px .text-2 { font-size:8px; } .box-px .text-3 { font-size:32px; }
Если мы используем значение меньше 16px, то наш текст уменьшается. И наоборот: если мы будем использовать значение больше, то текст увеличится. Звучит логично, не так ли? Но как работают другие единицы изменения? Давайте разбираться дальше.
Percent
Следующее значение, которое мы рассмотрим это проценты (%). Вы же помните, что браузер по умолчанию использует значение 16px? Это значит, что все относительные единицы, которые мы будем использовать в дальнейшем тоже будут преобразовываться в проценты. Но мы этого с вами не увидим, т.к. эти процессы будут проходить внутри браузера.
Значение процентов высчитывается относительно значения свойства родительского тега. Это значит, что если текст будет вложенным, то его значение будет меняться в зависимости от того тега, в который он вложен. Давайте рассмотрим это наглядно. Напишем, тег p
, внутри которого будет находиться тег span
,и внутри которого разместим еще один span
<p>Lorem <span>Lorem<span>Lorem</span></span></p>
Для тега p
добавим следующее:
p { font-size: 100%; }
Если бы мы были браузерами, то высчитали значение font-size: 16px
. Далее переходим к span
. Стилизуем его:
p>span { font-size: 50%; }
Мы увидим, что вложенный span
и тот span
, который находится внутри него, стали равнозначны значению 8px. Как мы это посчитали? Итак, font-size: 100% = 16px и если мы берем половину, то есть 50%, то половина этого значения и будет значение 8px.
Теперь давайте стилизуем еще большую вложенность:
p>span>span { font-size: 400%; }
Если бы мы указали здесь значение 200%, вышло бы, что мы взяли 2 раза по 8px, складываем 8px + 8px = 16px. Если мы укажем здесь 400%, то здесь у нас станет значение в два раза больше, то есть 16px * 2 = 32px.
Ознакомиться подробнее с HTML и CSS можно тут:
Em
Давайте снова вернемся к нашему первому шаблону и поговорим про такую единицу измерения, как em. Выясним, как будет вести себя данное значение, если вместо пикселей мы будем указывать относительную единицу em. Для этого создадим пример, в котором внутри box
будет содержаться два текста. Один будет обернут в div
, другой — во вложенном div
с классом post
.
<div> Lorem Ipsum <div>Lorem Ipsum</div> </div>
По умолчанию body равен font-size: 16px
. Далее стилизуем post
:
body { font-size: 16px; } .post { font-size: 1.2em; }
Чтобы вычислить значение post
, вы можете взять в руки калькулятор, либо (если вы используете систему macOS) набрать комбинацию CMD + пробел, открыть окно ввода для вычислений. Итак, нам необходимо умножить 16 на 1.2. Итого у нас получится 19.2. Это значит, что браузер выводит текст post
, как 19.2px. Такую относительную единицу измерения удобнее использовать, если вам нужно изменить значение в body, например, поставить значение 30px. И тогда значение в post
будет вычисляться автоматически, то есть умножаться на 1.2. При этом если бы вы работали с пикселями и написали бы в post
30px, а в body в дальнейшем написали бы 50px, то ничего бы у вас не изменилось в значении post
и соответственно вам бы пришлось вводить все это вручную.
Ознакомиться подробнее с HTML и CSS можно тут:
Давайте снова вернемся к интерактивной шпаргалке. Мы можем проверить, какие единицы измерения работают в связке с body. Например, если добавить в блоке CSS,
body { font-size: 30px; }
то мы сразу увидим, какие значения меняются. Например, пиксели не изменились совершенно, но при этом у нас изменился блок «проценты» и «em».
Единица измерения rem, не зависит от body, и это первое ее отличие от em.
Вложенность
Итак, пока мы полностью не перешли к теме rem, давайте рассмотрим еще один пример связанный со вложенностями. Самый удобный пример, связанный с вложенностями — это списки, поэтому давайте будем работать с ними.
<ul> <li> Первый уровень <ul> <li> Второй уровень <ul> <li> Третий уровень <ul> <li>Четвертый уровень</li> </ul> </li> </ul> </li> </ul> </li> </ul>
Давайте для тега ul
, зададим значение 0.8em:
ul { font-size: 0.8em; }
Первая проблема, которую мы видим, — каждая последующая вложенность становится меньше и кратна значению родителя. При этом, если мы используем значение больше единицы, например 1.8em, то каждая последующая вложенность увеличивается относительно предыдущего уровня. Эту проблему можно решить, но этот метод не совершенен:
ul { font-size: 0.8em; } ul ul { font-size: 1em; }
В этом случае каждый последующий уровень выравнивается в значениях, но это лучше всего его решать при помощи единицы измерения rem. Именно о ней мы и будем дальше говорить.
Rem
Итак, как вы уже поняли, это значение не взаимодействует с body, оно взаимодействует с основным корневым тегом html
. У корневого узла есть особый селектор псевдокласса, который записывается как :root
. В данном случае rem это и есть сокращение от слов «root em», то есть «корневой em». Если вы работаете с rem, то вы должны помнить, что его значения относительны не к текущему элементу, а к корневому. В данном случае совершенно не важно, где вы используете значение rem, оно никак не будет влиять на остальные значения.
Если мы вернемся к предыдущему примеру с вложенностями, то в данном случае, если мы напишем rem, эта проблема отпадёт. Вы так же можете использовать значения больше единицы, и при этом остальные уровни никак не видоизменятся. Они используют те же значения, что и первый элемент.
Ознакомиться подробнее с HTML и CSS можно тут:
Если вернуться к примеру где мы рассматривали em, то мы можем скопировать box
и написать box-rem
, что сделать небольшое отличие в классах:
<div> Lorem Ipsum <p>Lorem Ipsum</p> </div>
Если в стилях запишем
.box-rem .post { font-size: 1.2rem; }
то увидим, что это значение никак не видоизменится, т.к. первый «Lorem Ipsum» записан вне тегов. Он меняется по отношению к body, но при этом, если мы запишем селектор :root
:root { font-size: 50px; }
то мы увидим, что значение post
меняется относительно этого сектора.
Ознакомиться подробнее с HTML и CSS можно тут:
Давайте создадим еще один пример и поговорим о некоторых тонкостях с использованием rem. Давайте снова создадим box
, внутри которого будет содержаться тег h3
и p
<div> <h3>Home</h3> <p>Does your lorem ipsum text long for something a little fishier? Give our generator a try… it’s fishy!</p> </div>
То, что я сейчас покажу — это анти-пример и я не советую применять на своих проектах. И в конце я объясню почему.
Итак, запишем селектор :root
.
Заодно давайте поговорим о том, как вычислить 10px с точки зрения em. Для этого открываем калькулятор. Что бы вычислить, сколько будет 10px, мы делим 10 на тот размер, который у нас установлен по умолчанию, то есть на 16px. Итого у нас получается значение 0.625. Давайте запишем:
:root { font-size: 0.625em; /*=10px */ }
Далее давайте будем стилизовать h3
. Начнем вычислять font-size
с точки зрения rem для этого нам необходимо 14 разделить на 10 и выходит 1.4rem
h3 { font-size: 1.4rem; /* =14px */ }
Этот метод удобен тем, что нам не потребуется прибегать к вычислениям. Всё это возможно вычислить в уме. Но я предлагаю сделать заголовок сделать все-таки чуть больше, например, 24px. В rem значении это будет 2.4rem.
h3 { font-size: 2.4rem; /* =24px */ }
Как вы видите, по умолчанию, если я не буду стилизовать p
, либо какие-то другие элементы, которые будут появляться на странице, например:
<ul><li>Lorem</li><li>Lorem</li><li>Lorem</li></ul>
то все они автоматом будут иметь размер шрифта 10px. Это слишком маленький размер шрифта и на экранах он будет нечитабельным, а это значит, что вам придется для каждого элемента добавлять значение font-size
, из-за чего файл документа CSS значительно увеличится. В данном случае приходиться чем-то жертвовать и как мне кажется, использовать такой метод нецелесообразно.
Если вы не хотите использовать размер шрифта 10px по умолчанию, то вы можете использовать другое значение — 14px. Чтобы вычислить, сколько это будет в rem, для этого нужно 14px / 16px. Итог: 0.875rem
:root { font-size: 0.875em; /*=14px */ }
Теперь мы видим, что текст по умолчанию стал читабельным. Заголовок увеличился, потому что 2.4rem это уже не 24px. А сколько? Давайте посчитаем: 24px / 14px = 1.71rem. Давайте запишем:
h3 { font-size: 1.71rem; /* =24px */ }
В таком случае размер заголовка у нас стал таким же, как тогда когда у нас font-size
составлял 10px. Конечно же, такое значение не вычислить в уме, однако работы с кодом по итогу будет значительно меньше.
Давайте предположим, что мы работаем с media-запросами. Например, размер шрифта нам нужно сделать чуть большедля планшетов и ПК устройств. То есть если мы будем использовать media-запросы то внутри мы можем записать min-width: 768px
и внутри media мы запишем селектор :root с значением font-size: 1em, то есть 16px:
@media (min-width:768px) { :root { font-size: 1em; } }
Таким образом, при увеличении экрана у нас размер шрифта становится больше, заголовок тоже автоматически становится больше, при этом, если вам нужно его подкорректировать вы это тоже можете сделать в media запросе, но в целом много стилей вам менять не потребуется. И это на самом деле удобнее, чем, если бы вы работали с простыми пикселями. Потому что если бы вы работали с пикселями, то вам потребовалось бы менять каждое значение, чтобы сохранить соотношение.
Ознакомиться подробнее с HTML и CSS можно тут:
VW / VH
Теперь давайте перейдем к следующим значениям. Это единицы измерения которые относятся к размеру экрана устройства. Все те значения, которые начинаются с буквы V, имеют в себе сокращение слова с английского «viewport» (пер. на русский «область просмотра»). Итак:
- vh = 1/100 высоты области просмотра
- vw = 1/100 ширины области просмотра
- vmin = 1/100 наименьших высоты или ширины области просмотра
- vmax = 1/100 наибольших высоты или ширины области просмотра
Последние два значения, еще не так хорошо поддерживаются браузерами, поэтому будьте осторожны, если захотите использовать их на своих проектах.
Итак, если рассмотреть пример, который мы видим здесь, и начать уменьшать экран, то можно увидеть, как vw уменьшается по ширине. При этом vh зависит от высоты, поэтому его значения никак не меняются. Если менять высоту экрана, то можно увидеть, что значения в блоке vh меняются в зависимости от высоты, а vw совершенно никак не реагирует. Запись
.box-vw .text-1 { font-size: 2vw; }
значит, что на экране монитора, у которого будет значение 1200px, элемент будет равен 24px. Откуда берется это значение? Это 2% от 1200px, то есть 1200px * 0.02 = 24px. При этом если взять, например, планшет, который в среднем составляет ширину 768px, то размер шрифта составит примерно 15px, то есть это 2% от 768px.
Значения vmin
и vmax
не применимы к font-size
поэтому их уже рассмотрим в следующей части, но знайте, что эти значения есть и они работают в связке с vw и vh, однако их можно использовать не всегда, а только в том случае если они необходимы. И не забывайте про поддержку этих значений.
Я надеюсь, эта статья тебе помогла разобраться с тем, для чего используется каждая единица измерения в CSS.
Не забывай задавать свои вопросы по вёрстке или фронтенд разработке у профессионалов на FrontendHelp в режиме онлайн.
Смотреть видео:
Размер шрифта CSS. Единицы измерения px, em, проценты — учебник CSS
Для обозначения размера шрифта в CSS необходимо указать соответствующее свойство и его значение. Размер шрифта определяется свойством font-size
, для которого может быть установлен один из нескольких вариантов значений. Можно задать размер шрифта в пикселях, процентах, с помощью ключевых слов и т. д. Все это мы рассмотрим далее в этой подглаве, а сейчас взгляните на примеры задания размера шрифта:
/* в процентах: */ h2 { font-size: 100%; } /* в единицах измерения em: */ h3 { font-size: 1em; } /* в пикселях: */ h4 { font-size: 18px; } /* с помощью ключевого слова: */ p { font-size: small; }
Размер шрифта в пикселях
Наиболее простой и понятный способ задать размер шрифта – использовать единицу измерения px
. Вы сами указываете высоту шрифта. Допустим, вам необходим шрифт размером 24 пикселя. Для этого запишите стиль CSS:
font-size: 24px;
Размер шрифта в процентах
Вы наверняка уже сталкивались с ситуацией, когда размер шрифта в CSS не задан, вследствие чего браузеру приходится определять размер шрифта «по своему усмотрению». Если точнее, берется предустановленное значение по умолчанию. Именно от него зависят установленные в процентах значения. Например, базовый размер основного текста p
, как правило, равняется 16 пикселям. Значение 100%
эквивалентно базовому размеру шрифта, который предустановлен в браузере. Поэтому:
p { font-size: 100%; } /* ...то же самое, что и значение в браузере по умолчанию: */ p { font-size: 16px; }
Если же в этом случае задать размер шрифта 50%
, то он будет равен половине базового размера. Значение 200%
, наоборот, увеличит шрифт в два раза.
Важно: процентные значения размера шрифта наследуются. Например, если для родительского тега задан размер шрифта 150%, то все вложенные в него теги также унаследуют это значение.
Единица измерения em
По принципу работы единица измерения em
похожа на проценты. Значение 1em
эквивалентно 100%
и соответствует базовому размеру шрифта по умолчанию. Соответственно, 0.6em
= 60%
, 3em
= 300%
и так далее. Пример записи:
font-size: 0.9em; /* перед точкой можно опустить ноль: */ font-size: .9em;
Значения размеров шрифтов, указанные в em
, наследуются (как и проценты). Это создает некоторые трудности при работе с CSS. Например, если для родительского элемента div
задан размер шрифта 2em
, то для вложенного в него такого же элемента div
шрифт будет увеличен еще в два раза. Наглядный пример можно увидеть на скриншоте:
Скриншот: наследование значений размеров шрифтов
В качестве альтернативы можно воспользоваться новой единицей измерения, введенной в CSS3 – rem
, которая всегда отталкивается от базового размера шрифта. Если в нашем примере изменить значение div
с 2em
на 2rem
, то размер шрифта вложенного элемента div
станет таким же, так у родительского. Недостатком единицы измерения rem
является то, что она не поддерживается некоторыми браузерами, а именно Internet Explorer версии 8 (и ранее), а также Opera Mini 8.
Ключевые слова
Задать размер текста CSS можно и с помощью специальных ключевых слов, которые также зависят от базового размера шрифта в браузере. Если ориентироваться на стандартный размер шрифта для основного текста (16 пикселей) и не брать во внимание случаи, когда базовый размер был изменен, то таблица ниже показывает соответствие между ключевым словом и размером шрифта в пикселях:
Ключевое слово | Размер в пикселях |
---|---|
xx-small | 9px |
x-small | 10px |
small | 13px |
medium | 16px |
large | 19px |
x-large | 24px |
xx-large | 32px |
Как видим, значение medium
соответствует базовому размеру шрифта 16px
. Использование ключевых слов ограничивает возможности и лишает гибкости, поэтому профессиональные разработчики не применяют их.
Завершение
В этой подглаве вы узнали, как задать размер шрифта в CSS. Также мы рассмотрели те единицы измерения, которые наиболее часто используются для установки размера шрифта в таблицах стилей. Для этих целей могут сгодиться и другие единицы измерения CSS, такие как дюймыin, сантиметрыcm, миллиметрыmm. Но они не слишком хорошо подходят для определения размера текста на веб-страницах, отображаемых на мониторе.
Читайте далее: как установить жирный шрифт и курсив в CSS.
В чем разница между единицами CSS em и ch?
Я просмотрел все ответы, а также ваши комментарии к ним, и у меня сложилось впечатление, что вы хотите использовать em
и ch
единиц в основном для width
или height
свойств.
[…] тогда они не подходят для установки ширины поля?
И с моей точки зрения, я бы не рекомендовал этого делать.
СН-Единицы
Во — первых, я никогда раньше не работал с ch
, и, честно говоря, я не вижу для него никакой реальной пользы — возможно, input
за год, так что всегда есть ширина для четырех чисел, но не больше, — потому что он никогда не говорит вам точно, насколько широким будет элемент.
Я передумал и теперь вижу хорошее реальное применение ch
. 🙂
Пример input
для года, так что всегда есть ширина для четырех чисел, будет сохраняться. Но ch
также очень полезен для правильного определения ширины текста абзаца.
С пикселями, относительными или процентными значениями очень трудно — особенно для адаптивного дизайна — установить идеальную ширину текста на строку, включая интервал для абзаца. Однако это может быть ответственностью за пользовательский опыт на веб-сайте. Абстракция от Atlassian Design идеально подходит:
Установите среду чтения в соответствии с требованиями читателя. Широкие строки текста трудно читать, и людям труднее сосредоточиться. Хотя нет правильного способа измерить идеальную ширину текста, хорошая цель состоит в том, чтобы стремиться к 60-100 символам на строку, включая интервал. Установка оптимальной длины строки разбивает содержимое на легко усваиваемые блоки.
Источник: Atlassian Design
Именно здесь ch
может быть идеально использован в качестве единицы измерения. Для лучшего обзора вы можете посмотреть примеры в конце.
Но теперь, наконец, к определению ch
😉
Как часто говорилось, ch
относится к ширине символа 0
в соответствии с размером шрифта.
Например: тело имеет font-size: 16px
, а символ 0
имеет ширину 10px
из выбранного семейства шрифтов, тогда 1ch
равно 10px
. И даже это все еще неточно, потому что, например, italic
или bold
могут изменить ширину символа.
EM — & REM-единиц
Как также часто говорят, em
— и чтобы привлечь еще одного игрока — также rem
относятся к font-size
.
Где rem
всегда относительно корневого элемента font-size
, em
относительно font-size
собственного элемента или последнего родительского элемента (также может быть корневым элементом) с font-size
.
Как пример em
: только body
имеет font-size: 16px;
, а сам элемент не получил font-size
, тогда 1em
равно 16px
. Если родитель элемента или сам элемент получил font-size: 20px;
, то 1em
равно 20px
. em
единиц также могут размножаться сами по себе.
Как пример rem
: body
имеет font-size: 16px;
, тогда 1rem
равно 16px
. Даже если сам элемент или родительский элемент получил font-size: 20px;
, 1rem
все равно равен body
настройкам 16px
.
[…]
, если ch имеет размер ‘0’ в шрифте, почему em не имеет размера ‘M’ в шрифте […]
em
первоначально был основан на типографском измерении текущего символа шрифта M
, но он уже устарел. Как вы можете видеть сейчас, он всегда ссылается на «fixed start-value», а не на ширину символа.
Рекомендуемое использование
Как я уже сказал, с моей точки зрения , я бы не рекомендовал использовать ch
, em
или rem
для свойств width
или height
. Эти единицы измерения более полезны для свойств «textual».
Некоторые примеры:
- Все
h3
должны быть в четыре раза больше текста:font-size: 4rem;
- Все
p
всегда должны иметьmargin
из половины строки:margin-bottom: 0.5em;
-
line-height
элементов должно быть 20% больше, чемfont-size
:line-height: 1.2em;
- A
input
за год всегда должен иметьwidth
из четырех чисел:width: 4ch;
- Ширина текста
p
всегда должна иметь ширину 80 символов на строку, включая интервал:width: 80ch;
но пиксели не являются гибкими при работе с различными устройствами
Для этого, в качестве вывода, я бы посоветовал вам просто работать с процентами width: 80%;
или шириной видового экрана и высотой видового экрана height: 100vh; width: 100vw;
. Или, по крайней мере, всегда с максимальным значением: width: 1000px; max-width: 100%;
.
Вот несколько фрагментов — только для примеров со свойствами width
— для лучшего понимания:
em
— Относительно размера шрифта собственного элемента или последнего родительского элемента с размером шрифта
body {
font-size: 16px;
}
p {
font-weight: bold;
}
div {
width: 1em;
height: 50px;
background: lightgray;
}
.em-0-5 {
width: 0.5em;
}
.em-10 {
width: 10em;
}
.fs-10 {
font-size: 10px;
}
.parent {
font-size: 0.5em;
}
.parent div {
width: 10em;
}
<p>1em (body font-size * 1 = 16px)</p>
<div></div>
<p>0.5em (body font-size * 0.5 = 8px)</p>
<div></div>
<p>10em (body font-size * 10 = 160px)</p>
<div></div>
<p>10em from 10px own element font-size (element font-size * 10 = 100px)</p>
<div></div>
<p>10em from 0.5em parent font-size (body font-size * parent font-size * 10 = 80px)</p>
<span>
<div></div>
</span>
rem
— Относительно размера шрифта корневого элемента
body {
font-size: 16px;
}
p {
font-weight: bold;
}
div {
width: 10rem;
height: 50px;
background: lightgray;
}
.parent {
font-size: 20px;
}
.parent div {
width: 5rem;
}
<p>10rem (body font-size * 10 = 160px)</p>
<div></div>
<p>5rem in a parent element with font-size 20px (body font-size * 5 = 80px)</p>
<span>
<div></div>
</span>
ch
— Относительно ширины «0» (ноль)
body {
font-size: 16px;
}
p {
font-weight: bold;
}
input {
width: 4ch;
}
div {
width: 20ch;
background: lightgray;
word-wrap: break-word;
}
.ch-1 {
width: 1ch;
}
.ch-5 {
width: 5ch;
font-size: 32px;
}
<p>4ch (space of 4x zero character)</p>
<input type="text" value="2018" />
<p>20ch (space of 20x zero characters)</p>
<div>0000000000000000000000000</div>
<p>Also 20ch (space of 20x zero characters)</p>
<div>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et </div>
<p>1ch (space of 1x zero character)</p>
<div>00000</div>
<p>5ch from font-size 32px (space for 5x zero characters with a font-size of 32px)</p>
<div>0000000000000000000000000</div>
em, px, pt, cm, дюйм…
См. Также указатель всех советов.
На этой странице:
em
, px
, pt
, cm
, дюйм
…
CSS предлагает несколько различных единиц для выражения длины.
Некоторые из них имеют свою историю в типографике, например point ( pt
) и pica ( pc
), другие известны из
повседневное использование, например, сантиметр ( см,
) и дюйм
( из
).А еще есть «магический» юнит, который был
придумано специально для CSS: пикселей
. Это
Значит, разным свойствам нужны разные блоки?
Нет, единицы не имеют ничего общего с недвижимостью, но
все, что есть на носителе: экран или бумага.
Нет ограничений на то, какие единицы могут быть использованы где. Если
свойство принимает значение в пикселей
(поле :
) также принимает значение в дюймах или сантиметрах.
5px
( маржа: 1.2 дюйма; поля: 0,5см
) и наоборот.
Но в целом вы бы использовали другой набор единиц для
отображать на экране, чем при печати на бумаге. Следующая таблица
дает рекомендуемое использование:
Рекомендуемый | Периодическое использование | Не рекомендуется | |
---|---|---|---|
Экран | em, пикс,% | пр. | pt, cm, mm, in, pc |
Печать | em, см, мм, дюйм, пт, шт,% | пикс, бывш. |
Соотношение между абсолютными единицами измерения следующее: 1 дюйм =
2.54 см = 25,4 мм = 72 точки = 6 шт.
Если у вас под рукой есть линейка, вы можете проверить точность вашего устройства.
это: вот коробка высотой 1 дюйм (2,54 см): ↑
72pt
↓
Так называемые абсолютные единиц ( см
,
мм
, в
, pt
и pc
) в CSS означают то же самое, что и везде, , но только
если ваше устройство вывода имеет достаточно высокое разрешение. на
лазерный принтер, 1 см должен быть ровно 1 сантиметр.Но на
устройства с низким разрешением, такие как экраны компьютеров, CSS не
требуют этого. И действительно, результат имеет тенденцию отличаться от одного
устройство к другому и от одной реализации CSS к другой. Это
лучше зарезервировать эти блоки для устройств с высоким разрешением и в
особенно для печатной продукции. На экранах компьютеров и портативных
устройств, вы, вероятно, не получите того, чего ожидаете.
Раньше CSS требовал, чтобы реализации отображали абсолютные
единицы корректно даже на экранах компьютеров.Но поскольку количество
неправильных реализаций больше, чем правильных, и
ситуация не улучшилась, CSS отказался от этого требования
в 2011 году. В настоящее время абсолютные единицы должны корректно работать только на
печатная продукция и на устройствах с высоким разрешением.
CSS не определяет, что означает «высокое разрешение». Но как бюджетный
принтеры в настоящее время начинаются с 300 точек на дюйм, а экраны высокого класса — с
200dpi, обрезка, вероятно, находится где-то посередине.
Есть еще одна причина избегать использования абсолютных единиц для других целей.
чем печатать: вы смотрите на разные экраны с разного расстояния.1 см на экране рабочего стола выглядит маленьким. Но то же самое на мобильном телефоне
прямо перед вашими глазами выглядит большим. Лучше использовать
относительные единицы, например em
.
Блоки em
и ex
зависят от
шрифт и может быть разным для каждого элемента в документе. В
em
— это просто размер шрифта. В элементе с 2-дюймовым
font, 1em, таким образом, означает 2in. Выражение размеров, таких как поля и
paddings в em
означает, что они связаны со шрифтом
размер, и если у пользователя большой шрифт (например,г., на большом экране) или
мелкий шрифт (например, на портативном устройстве), размеры будут в
пропорция. Объявления, такие как text-indent: 1.5em
и margin: 1em
чрезвычайно распространены в CSS.
Блок ex
используется редко. Его цель —
выразить размеры, которые должны быть связаны с x-высотой шрифта. В
x-height — это, грубо говоря, высота строчных букв, таких как a, c, m, или o. шрифтов одинакового размера (и
таким образом, тот же em
) может сильно отличаться по размеру
их строчные буквы, и когда важно, чтобы какое-то изображение,
е.g., соответствует высоте x, блок ex
соответствует
доступный.
Блок пикселей
— это волшебная единица CSS. Нет
связаны с текущим шрифтом и обычно не связаны с физическим
сантиметры или дюймы тоже. Определен блок пикселей и
пикселей.
быть маленьким, но видимым и таким, чтобы горизонтальная линия шириной 1 пиксель
может отображаться с резкими краями (без сглаживания). Что такое
резкий, мелкий и видимый — зависит от устройства и от того, как оно расположено
используется: вы держите его близко к глазам, как мобильный телефон, на
длина вытянутой руки, как монитор компьютера, или где-то посередине, как
читалка электронных книг? Таким образом, пикселей
не определяется как
постоянной длины, но как то, что зависит от типа
устройство и его типичное использование.
Чтобы составить представление о внешнем виде px
, представьте
компьютерный монитор с ЭЛТ 1990-х годов: самая маленькая точка, которую он может
дисплей измеряет около 1/100 дюйма (0,25 мм) или немного
более. Устройство пикселей
получило свое название от этого экрана.
пикселей.
В настоящее время существуют устройства, которые в принципе могут отображать
более мелкие острые точки (хотя вам может потребоваться лупа, чтобы увидеть
их). Но документы прошлого века, которые использовали пикселей
в CSS, по-прежнему выглядят одинаково, независимо от устройства.В частности, принтеры могут отображать четкие линии с гораздо меньшим
детали, чем 1px, но даже на принтерах линия в 1px выглядит очень
так же, как это выглядело бы на мониторе компьютера. Смена устройств,
но пикселей
всегда имеет одинаковый внешний вид.
Фактически, CSS требует, чтобы 1px
было точно
1/96 дюйма на всем отпечатанном материале. CSS считает, что
принтеры, в отличие от экранов, не должны иметь разные размеры для
пикселей
для печати четких линий.В печатных СМИ
px, таким образом, не только имеет одинаковый внешний вид с одного устройства на
другой, но на самом деле он в значительной степени то же самое.
CSS также определяет, что растровые изображения (например, фотографии)
по умолчанию, отображается с отображением одного пикселя изображения на 1 пиксель. Фото
с разрешением 600 на 400 пикселей будет 600 пикселей в ширину и 400 пикселей в высоту. В
пиксели на фотографии, таким образом, не сопоставляются с пикселями устройства отображения.
(который может быть очень маленьким), но сопоставьте пикселей с
единицами.Что
позволяет точно выровнять изображения по другим элементам
документ, если вы используете в своем стиле пикселей
единиц.
лист, а не пт
, см
и т. д.
Используйте
em
или пикселей
для размера шрифта
CSS унаследовал от типографики единицы pt
(point) и pc
(pica). Принтеры традиционно
использовали те и аналогичные агрегаты вместо см
или
в
.В CSS нет причин использовать pt
, используйте ту единицу, которая вам больше нравится. Но там это хороший
причина использовать ни pt
, ни какой-либо другой абсолютный
unit и используйте только em
и px
.
Вот несколько линий разной толщины. Некоторые или все
они могут выглядеть резкими, но по крайней мере линии 1px и 2px должны быть
резкие и заметные:
0.5pt,
1px,
1pt,
1,5 пикс., 2 пикс.
Если первые четыре строки выглядят одинаково (или если 0.Линия 5pt
отсутствует), вы, вероятно, смотрите на монитор компьютера,
не может отображать точки меньше 1 пикселя. Если линии появляются
увеличения толщины, вы, вероятно, смотрите на эту страницу на
качественный компьютерный экран или на бумаге. И если 1pt выглядит толще
чем 1.5px, у вас, вероятно, портативный экран.
Волшебная единица CSS, пикселей
, часто бывает хорошей
единицы измерения, особенно если стиль требует выравнивания текста по
изображения, или просто потому, что все, что имеет ширину 1 пиксель или кратное
1px гарантированно будет выглядеть резким.
Но для размеров шрифта еще лучше использовать em
.
Идея состоит в том, чтобы (1) не устанавливать размер шрифта элемента BODY (в
HTML), но используйте размер устройства по умолчанию, потому что это
размер, удобный для чтения; и (2) экспресс-шрифт
размеры остальных элементов в em
: h2 {font-size:
, чтобы h2 в 2,5 раза больше обычного, body
2.5em}
шрифт.
Единственное место, где вы можете использовать pt
(или см
или в
) для установки размера шрифта, находится в
таблицы стилей для печати, если вам нужно убедиться, что напечатанный шрифт
точно определенного размера.Но даже там, используя размер шрифта по умолчанию
обычно лучше.
Таким образом, блок пикселей
защищает вас от необходимости знать
разрешение устройства. Будет ли выход 96 точек на дюйм,
100, 220 или 1800 точек на дюйм, длина, выраженная целым числом
пикселей
всегда выглядит хорошо и очень похоже на всех
устройств. Но что, если вы до хотите узнать разрешение
устройства, например, чтобы узнать, безопасно ли использовать 0.Линия 5px
? Ответ — проверить разрешение через Media Queries.
Объяснение медиа-запросов выходит за рамки этой статьи, но
вот небольшой пример:
div.mybox {border: 2px solid} @media (минимальное разрешение: 2dppx) { / * Медиа с 2 или более точками на пиксель * / div.mybox {border: 1.5px solid} }
Больше единиц в CSS
Чтобы еще проще было писать правила стиля, зависящие только от
размер шрифта по умолчанию, CSS с 2013 года имеет новую единицу: rem
. rem
(от «root em») — это шрифт.
размер корневого элемента документа. В отличие от em
, который может быть разным для каждого элемента, rem
постоянен во всем документе. Например, дать P
и элементы h2 на том же левом поле, сравните этот стиль до 2013 года.
простыня:
p {margin-left: 1em} h2 {размер шрифта: 3em; margin-left: 0,333em}
с новой версией:
p {margin-left: 1rem} h2 {размер шрифта: 3em; margin-left: 1rem}
Другие новые блоки позволяют указывать размеры относительно
окно читателя.Это vw
и vh
. vw
составляет 1/100 ширины окна
а vh
составляет 1/100 высоты окна. Там
также vmin
, что означает, какой
самый маленький из vw
и vh
. И vmax
. (Вы можете догадаться, что он делает.)
Поскольку они такие новые, они еще не везде работают. Но, как
на начало 2015 года их поддерживают несколько браузеров.
значений и единиц CSS — Изучение веб-разработки
Каждое свойство, используемое в CSS, имеет тип значения, определяющий набор значений, разрешенных для этого свойства.Просмотр любой страницы свойств в MDN поможет вам понять значения, связанные с типом значения, которые действительны для любого конкретного свойства. В этом уроке мы рассмотрим некоторые из наиболее часто используемых типов значений, а также их наиболее распространенные значения и единицы измерения.
В спецификациях CSS и на страницах свойств здесь, в MDN, вы сможете определять типы значений, поскольку они будут заключены в угловые скобки, например
или
.Когда вы видите тип значения
как допустимый для определенного свойства, это означает, что вы можете использовать любой допустимый цвет в качестве значения для этого свойства, как указано на справочной странице
.
Примечание : вы также увидите типы значений CSS, называемые типами данных . Термины в основном взаимозаменяемы — когда вы видите что-то в CSS, называемое типом данных, на самом деле это просто причудливый способ обозначить тип значения. Термин значение относится к любому конкретному выражению, поддерживаемому выбранным вами типом значения.
Примечание : Да, типы значений CSS обычно обозначаются с помощью угловых скобок, чтобы отличать их от свойств CSS (например, свойство color
по сравнению с типом данных
В следующем примере мы установили цвет нашего заголовка с помощью ключевого слова, а фон с помощью функции rgb ()
:
h2 {
черный цвет;
цвет фона: rgb (197,93,161);
}
Тип значения в CSS — это способ определения набора допустимых значений.Это означает, что если вы видите
как действительный, вам не нужно задумываться, какой из различных типов значений цвета можно использовать — ключевые слова, шестнадцатеричные значения, rgb (),
функций и т. Д. Вы можете использовать любые доступных значений <цвет>
, если они поддерживаются вашим браузером. Страница в MDN для каждого значения предоставит вам информацию о поддержке браузером. Например, если вы посмотрите на страницу
, вы увидите, что в разделе совместимости браузера перечислены различные типы значений цвета и их поддержка.
Давайте рассмотрим некоторые типы значений и единиц, с которыми вы часто можете столкнуться, с примерами, чтобы вы могли опробовать различные возможные значения.
Существуют различные типы числовых значений, которые вы можете использовать в CSS. Все следующие числа классифицируются как числовые:
Тип данных | Описание |
---|---|
<целое число> | <целое число> — это целое число, например 1024 или -55 . |
<номер> | <число> представляет собой десятичное число — оно может иметь или не иметь десятичную точку с дробной составляющей. Например, 0,255 , 128 или -1,2 . |
<размер> | <размер> — это <номер> с прикрепленным к нему блоком. Например, 45deg , 5s или 10px . <размер> — это зонтичная категория, которая включает типы <длина> , <угол> , <время> и <разрешение> . |
<процент> | <процент> представляет собой долю некоторого другого значения. Например, 50% . Значения в процентах всегда относятся к другому количеству. Например, длина элемента зависит от длины его родительского элемента. |
Длина
Чаще всего вы встретите числовой тип <длина>
. Например, 10px
(пикселей) или 30em
. В CSS используются два типа длины — относительная и абсолютная. Важно знать разницу, чтобы понять, насколько масштабными станут вещи.
Единицы абсолютной длины
Ниже приведены все абсолютных единиц длины — они не связаны ни с чем другим и обычно считаются одинаковыми по размеру.
Установка | Имя | эквивалентно |
---|---|---|
см | Сантиметра | 1 см = 38 пикселей = 25/64 дюйма |
мм | Миллиметра | 1 мм = 1/10 1 см |
Q | Четверть миллиметра | 1Q = 1/40 1 см |
дюйм | дюймов | 1 дюйм = 2.54 см = 96 пикселей |
шт | Пика | 1 шт. = 1/6 от 1 в |
пт | Очки | 1pt = 1/72 от 1 в |
пикселей | пикселей | 1 пиксель = 1/96 от 1 дюйма |
Большинство этих единиц более удобны при использовании для печати, чем для вывода на экран. Например, мы обычно не используем на экране см
(сантиметры).Единственное значение, которое вы обычно будете использовать, — пикселей
(пикселей).
Единицы относительной длины
Единицы относительной длины относятся к чему-то еще, например к размеру шрифта родительского элемента или размеру области просмотра. Преимущество использования относительных единиц состоит в том, что при некотором тщательном планировании вы можете настроить размер текста или других элементов таким образом, чтобы он масштабировался относительно всего остального на странице. Некоторые из наиболее полезных модулей для веб-разработки перечислены в таблице ниже.
Установка | относительно |
---|---|
до | Размер шрифта родительского элемента в случае типографских свойств, таких как font-size , и размер шрифта самого элемента в случае других свойств, таких как ширина . |
из | x-высота шрифта элемента. |
шасси | Предварительный размер (ширина) глифа «0» шрифта элемента. |
рем | Размер шрифта корневого элемента. |
слева | Высота строки элемента. |
VW | 1% ширины области просмотра. |
vh | 1% высоты области просмотра. |
vmin | 1% меньшего размера области просмотра. |
vmax | 1% большего размера области просмотра. |
Изучение примера
В приведенном ниже примере вы можете увидеть, как ведут себя некоторые единицы относительной и абсолютной длины. Первый блок имеет ширину и
пикселей. Как абсолютная единица измерения, эта ширина останется неизменной вне зависимости от того, что еще изменится.
Ширина второго окна установлена в единицах vw
(ширина области просмотра). Это значение относится к ширине области просмотра, поэтому 10vw составляет 10 процентов ширины области просмотра. Если вы измените ширину окна браузера, размер поля должен измениться.Однако этот пример встроен в страницу с использованием
, поэтому это не сработает. Чтобы увидеть это в действии, вам нужно будет попробовать этот пример, открыв его на отдельной вкладке браузера.
В третьем поле используется em
единиц. Они относятся к размеру шрифта. Я установил размер шрифта 1em
для содержащего
.wrapper
. Измените это значение на 1.5em
, и вы увидите, что размер шрифта всех элементов увеличивается, но только последний элемент станет шире, так как его ширина относительно этого размера шрифта.После выполнения приведенных выше инструкций попробуйте поиграть со значениями другими способами, чтобы увидеть, что вы получите.
ems и rem
em
и rem
— две относительные длины, с которыми вы, вероятно, столкнетесь чаще всего при изменении размеров чего-либо, от полей до текста. Стоит понять, как они работают, и в чем разница между ними, особенно когда вы начинаете переходить к более сложным темам, таким как стилизация текста или макет CSS. В приведенном ниже примере представлена демонстрация.
HTML-код, показанный ниже, представляет собой набор вложенных списков — всего у нас есть три списка, и оба примера имеют один и тот же HTML-код. Единственное отличие состоит в том, что первый имеет класс эмс , а второй — класс бэр .
Для начала мы установили размер шрифта 16 пикселей в элементе
.
Напомним, что в случае типографики единица em означает «размер шрифта моего родительского элемента» . Элементы
с классом
из ems
получают размер от своего родителя.Таким образом, каждый последующий уровень вложенности становится все больше и больше, поскольку для каждого из них установлен размер шрифта 1,3em
— в 1,3 раза больше размера шрифта его родителя. Напомним, что rem означает «размер шрифта корневого элемента» . (rem означает «root em».) Элементы
с классом
из rem
получают размер из корневого элемента (
). Это означает, что каждый последующий уровень вложенности не увеличивается. Однако, если вы измените размер шрифта
в CSS, вы увидите, что все остальное изменится относительно него — и rem
, и текст размером em
.
Проценты
Во многих случаях процентная доля обрабатывается так же, как и длина. Дело в том, что проценты всегда устанавливаются относительно некоторого другого значения. Например, если вы установите для элемента font-size
в процентах, это будет процент от font-size
родительского элемента.Если вы используете процентное значение для ширины
, это будет процент от ширины
родительского элемента.
В приведенном ниже примере два блока с процентным размером и два блока с размером пикселя имеют одинаковые имена классов. Наборы имеют ширину 40% и 200 пикселей соответственно.
Разница в том, что второй набор из двух блоков находится внутри оболочки шириной 400 пикселей. Второе поле шириной 200 пикселей имеет ту же ширину, что и первое, но второе поле 40% теперь составляет 40% от 400 пикселей — намного уже, чем первое!
Попробуйте изменить ширину оболочки или процентное значение, чтобы увидеть, как это работает.
В следующем примере размер шрифта задан в процентах. Каждые
, равный 80%; поэтому элементы вложенного списка становятся все меньше по мере того, как они наследуют размер от своего родителя. Обратите внимание, что, хотя многие типы значений принимают длину или процентное соотношение, есть некоторые, которые принимают только длину. Вы можете увидеть, какие значения принимаются на справочных страницах свойств MDN. Если допустимое значение включает <длина- процент>
, вы можете использовать длину или процент.Если допустимое значение включает только <длина>
, использовать процентное значение невозможно.
Числа
Некоторые типы значений принимают числа без добавления к ним единиц измерения. Примером свойства, которое принимает безразмерное число, является свойство opacity
, которое контролирует непрозрачность элемента (насколько он прозрачен). Это свойство принимает число от 0
(полностью прозрачное) до 1
(полностью непрозрачное).
В приведенном ниже примере попробуйте изменить значение непрозрачности
на различные десятичные значения от 0
до 1
и посмотрите, как поле и его содержимое становятся более или менее непрозрачными.
Примечание : когда вы используете число в CSS в качестве значения, его не следует заключать в кавычки.
Есть много способов указать цвет в CSS, некоторые из которых реализованы позже, чем другие. Одни и те же значения цвета можно использовать везде в CSS, независимо от того, указываете ли вы цвет текста, цвет фона или что-то еще.
Стандартная система цветности, доступная в современных компьютерах, — 24 бита, что позволяет отображать около 16 цветов.7 миллионов различных цветов через комбинацию различных красных, зеленых и синих каналов с 256 различными значениями на канал (256 x 256 x 256 = 16 777 216). Давайте посмотрим на некоторые способы, которыми мы можем указать цвета в CSS.
Примечание : В этом руководстве мы рассмотрим общие методы указания цвета, которые хорошо поддерживаются браузером; есть и другие, но они не имеют такой хорошей поддержки и встречаются реже.
Ключевые слова цвета
Довольно часто в примерах здесь, в разделе обучения или где-либо еще на MDN, вы увидите используемые ключевые слова цвета, поскольку они представляют собой простой и понятный способ определения цвета.Есть несколько таких ключевых слов, некоторые из которых имеют довольно забавные названия! Вы можете увидеть полный список на странице для типа значения
.
Попробуйте поиграть с разными значениями цвета в живых примерах ниже, чтобы лучше понять, как они работают.
Шестнадцатеричные значения RGB
Следующий тип значения цвета, с которым вы, вероятно, столкнетесь, — это шестнадцатеричные коды. Каждое шестнадцатеричное значение состоит из символа решетки / фунта (#), за которым следуют шесть шестнадцатеричных чисел, каждое из которых может принимать одно из 16 значений от 0 до f (что соответствует 15), так что 0123456789abcdef
.Каждая пара значений представляет один из каналов — красный, зеленый и синий — и позволяет нам указать любое из 256 доступных значений для каждого (16 x 16 = 256).
Эти значения немного сложнее и труднее для понимания, но они гораздо более универсальны, чем ключевые слова — вы можете использовать шестнадцатеричные значения для представления любого цвета, который вы хотите использовать в своей цветовой схеме.
Снова попробуйте изменить значения, чтобы увидеть, как меняются цвета.
Значения RGB и RGBA
Третья схема, о которой мы здесь поговорим, — это RGB.Значение RGB — это функция rgb ()
, которой заданы три параметра, которые представляют значения красного, зеленого и синего каналов цветов, почти так же, как шестнадцатеричные значения. Разница с RGB заключается в том, что каждый канал представлен не двумя шестнадцатеричными цифрами, а десятичным числом от 0 до 255, что несколько проще для понимания.
Давайте перепишем наш последний пример, чтобы использовать цвета RGB:
Вы также можете использовать цвета RGBA — они работают точно так же, как цвета RGB, поэтому вы можете использовать любые значения RGB.Однако есть четвертое значение, которое представляет альфа-канал цвета, который контролирует непрозрачность. Если вы установите это значение на 0
, это сделает цвет полностью прозрачным, тогда как 1
сделает его полностью непрозрачным. Значения между ними дают вам разные уровни прозрачности.
Примечание : установка альфа-канала для цвета имеет одно ключевое отличие от использования свойства непрозрачности
, которое мы рассматривали ранее. Когда вы используете непрозрачность, вы делаете элемент и все внутри него непрозрачными, тогда как использование цветов RGBA делает непрозрачным только цвет, который вы указываете.
В приведенном ниже примере я добавил фоновое изображение в содержащий блок наших цветных блоков. Затем я установил для полей разные значения непрозрачности — обратите внимание, как фон больше просвечивает, когда значение альфа-канала меньше.
В этом примере попробуйте изменить значения альфа-канала, чтобы увидеть, как это влияет на вывод цвета.
Примечание :: Начиная с уровня 4 цветов CSS, rgba ()
является псевдонимом для rgb ()
, а hsla ()
является псевдонимом для hsl ()
(см. Ниже).В браузерах, реализующих стандарт уровня 4, они принимают одни и те же параметры и ведут себя одинаково. Так, например, и rgba ()
, и rgb ()
принимают цвета со значениями альфа-канала и без них. Попробуйте изменить функции rgba ()
в приведенном выше примере на rgb ()
и посмотрите, работают ли цвета! Какой стиль вы используете, зависит от вас, но разделение определений непрозрачного и прозрачного цвета для использования различных функций дает (очень) немного лучшую поддержку браузера и может выступать в качестве визуального индикатора того, где прозрачные цвета определены в вашем коде.
Значения HSL и HSLA
Немного менее хорошо поддерживается, чем RGB, цветовая модель HSL (не поддерживается в старых версиях IE), которая была реализована после большого интереса со стороны дизайнеров. Вместо значений красного, зеленого и синего цветов функция hsl ()
принимает значения оттенка, насыщенности и яркости, которые используются для различения 16,7 миллионов цветов, но другим способом:
- Оттенок : основной оттенок цвета. Принимает значение от 0 до 360, представляющее углы вокруг цветового круга.
- Насыщенность : Насколько насыщен цвет? Принимает значение от 0 до 100%, где 0 — это отсутствие цвета (он будет отображаться как оттенок серого), а 100% — это полная насыщенность цвета
- Lightness : Насколько светлый или яркий цвет? Принимает значение от 0 до 100%, где 0 означает отсутствие света (он будет полностью черным), а 100% — полный свет (он будет казаться полностью белым)
Мы можем обновить пример RGB, чтобы использовать цвета HSL следующим образом:
Так же, как RGB имеет RGBA, HSL имеет эквивалент HSLA, который дает вам такую же возможность указывать альфа-канал.Я продемонстрировал это ниже, изменив свой пример RGBA, чтобы использовать цвета HSLA.
Вы можете использовать любое из этих значений цвета в своих проектах. Вероятно, что для большинства проектов вы выберете цветовую палитру, а затем будете использовать эти цвета — и выбранный вами метод определения цвета — на протяжении всего проекта. Вы можете смешивать и сопоставлять цветовые модели, однако для единообразия лучше всего, если весь ваш проект будет использовать одну и ту же!
Тип значения <изображение>
используется везде, где изображение является допустимым значением.Это может быть фактический файл изображения, на который указывает функция url ()
, или градиент.
В приведенном ниже примере мы продемонстрировали изображение и градиент, используемые в качестве значения для свойства фонового изображения CSS .
Примечание : есть и другие возможные значения для
, однако они новее и в настоящее время плохо поддерживаются браузером. Загляните на страницу MDN для типа данных
, если вы хотите прочитать о них.
Тип значения
представляет собой набор 2D-координат, используемых для позиционирования элемента, такого как фоновое изображение (через background-position
). Он может принимать такие ключевые слова, как верхний
, левый
, нижний
, правый
и центральный
, чтобы выровнять элементы с определенными границами двухмерного прямоугольника, а также длины, которые представляют смещения сверху и слева. ручные края коробки.
Типичное значение позиции состоит из двух значений: первое задает положение по горизонтали, второе - по вертикали.Если вы указываете значения только для одной оси, другая по умолчанию будет , центр
.
В следующем примере мы разместили фоновое изображение на 40 пикселей сверху и справа от контейнера с помощью ключевого слова.
Поэкспериментируйте с этими значениями, чтобы увидеть, как можно перемещать изображение.
В приведенных выше примерах мы видели места, где ключевые слова используются в качестве значения (например,
ключевых слов, таких как red
, black
, rebeccapurple
и goldenrod
).Эти ключевые слова более точно описываются как идентификаторы , особое значение, которое понимает CSS. Как таковые, они не цитируются - они не рассматриваются как строки.
Есть места, где вы используете строки в CSS. Например, при указании сгенерированного контента. В этом случае значение приводится в кавычки, чтобы продемонстрировать, что это строка. В приведенном ниже примере мы используем ключевые слова без кавычек вместе со строкой сгенерированного содержимого в кавычках.
Последний тип значения, который мы рассмотрим, - это группа значений, известная как функции.В программировании функция - это многократно используемый раздел кода, который можно запускать несколько раз для выполнения повторяющейся задачи с минимальными усилиями как со стороны разработчика, так и со стороны компьютера. Функции обычно связаны с такими языками, как JavaScript, Python или C ++, но они существуют и в CSS как значения свойств. Мы уже видели функции в действии в разделе «Цвета» - rgb ()
, hsl ()
и т. Д. Значение, используемое для возврата изображения из файла - url ()
- также является функцией.
Значение, которое больше похоже на то, что вы можете найти в традиционном языке программирования, - это CSS-функция calc ()
. Эта функция дает вам возможность выполнять простые вычисления внутри вашего CSS. Это особенно полезно, если вы хотите выработать значения, которые вы не можете определить при написании CSS для вашего проекта, и хотите, чтобы браузер работал за вас во время выполнения.
Например, ниже мы используем calc ()
, чтобы сделать поле шириной 20% + 100px
.20% рассчитываются от ширины родительского контейнера .wrapper
и поэтому будут изменены, если эта ширина изменится. Мы не можем выполнить этот расчет заранее, потому что мы не знаем, какими будут 20% родительского элемента, поэтому мы используем calc ()
, чтобы указать браузеру сделать это за нас.
В этой статье мы рассмотрели многое, но можете ли вы вспомнить самую важную информацию? Вы можете найти дополнительные тесты, чтобы убедиться, что вы сохранили эту информацию, прежде чем двигаться дальше - см. Проверка своих навыков: значения и единицы.
Это был краткий обзор наиболее распространенных типов значений и единиц, с которыми вы можете столкнуться. Вы можете ознакомиться со всеми различными типами на справочной странице значений и единиц CSS; вы столкнетесь со многими из них, когда будете работать над этими уроками.
Главное помнить, что каждое свойство имеет определенный список допустимых типов значений, и каждый тип значения имеет определение, объясняющее, что это за значения. Затем вы можете найти подробности здесь, в MDN.
Например, понимание того, что
также позволяет создавать цветовой градиент, полезно, но, возможно, иметь неочевидные знания!
Сила em единиц в CSS
Для каждой сложной функции в CSS у вас всегда будет поворотный момент, когда вы увидите, насколько действительно мощная функция. И, хотите верьте, хотите нет, мой личный поворотный момент с ems наступил спустя много времени после того, как я написал введение в тему, наполненное каламбуром.
Хотя к тому моменту я довольно хорошо понял ems, я действительно начал понимать, насколько они мощны, когда прочитал сообщение Симурая о Medium под названием Sizing (Web) components.
Итак, я собираюсь осмотреть его фалды в этом посте. Здесь вы найдете краткое введение в единицы em, а затем живую демонстрацию техники, которую он описывает.
Что такое EMS?
В CSS единица em равна вычисленному font-size
для элемента, к которому применяется em. Когда единицы em объявляются для дочерних элементов, для которых не определен размер шрифта
, они унаследуют свой размер шрифта
от своего родителя или от другого элемента-предка, возможно, вплоть до корневого элемента. на документе.
Посмотрите на следующий CSS:
.example {
размер шрифта: 20 пикселей;
}
В этом случае 1em для этого элемента или его дочерних элементов (при условии отсутствия других определений font-size
) будет равно 20px. Итак, если мы добавим строку:
.example {
размер шрифта: 20 пикселей;
радиус границы: .5em;
}
Это значение border-radius
, равное . 5em
вычисляется как 10 пикселей (т.е. 20 * 0,5). Аналогично:
.пример {
размер шрифта: 20 пикселей;
радиус границы: .5em;
отступ: 2em;
}
Значение заполнения 2em
равно 40px (20 * 2). Как уже упоминалось, этот тип вычислений будет применяться также к любым дочерним элементам - если какой-либо из этих дочерних элементов не имеет явно определенного значения font-size
, и в этом случае значение em будет рассчитываться на основе этого. Если нигде в CSS размер шрифта не определен, em-единица будет равна размеру шрифта по умолчанию в браузере для документа, который обычно составляет 16 пикселей.
Я думаю, это должно прояснить, как работает EMS. Теперь давайте посмотрим, как эту технику можно использовать для создания легко изменяемых размеров веб-компонентов, как это обсуждалось Симураем в исходной статье Medium. Я сделаю еще один шаг вперед, предоставив демонстрацию, чтобы увидеть, как это работает.
Размер на уровне компонентов
Понятие «компоненты» сейчас довольно популярно. Он хорошо работает с модульными методами CSS, а также с идеей инкапсулированных участков кода в целом.И я предполагаю, что следующий метод будет еще более интересным, когда спецификация веб-компонентов получит широкую поддержку.
Техника в основном работает следующим образом: свойство font-size
используется, как его называет Симурай, как «троянский конь», создавая базовый блок для различных элементов внутри нашего компонента или модуля. Поскольку единицы em, как описано выше, вычисляются на основе определяемого корнем font-size
на родительском элементе, это позволяет легко изменять размер всего компонента, просто изменяя размер шрифта
на родительском элементе.
Давайте посмотрим на это в действии в демонстрации CodePen:
См. Pen Использование ems для компонентов с изменяемым размером с помощью SitePoint (@SitePoint) на CodePen.
Этот глупый маленький модуль состоит из четырех основных элементов. Ничего особенного, просто пример для иллюстрации этой техники. Переместите ползунок диапазона вверху демонстрационной страницы , чтобы изменить размер модуля. Вы также можете протестировать его в полноэкранном режиме. Ползунок диапазона привязан к единственному значению корневого элемента для компонента: значение font-size
.
Здесь следует отметить, что цель сделать компонент изменяемого размера с помощью этого единственного свойства CSS не обязательно, чтобы пользователь мог это сделать. В основном это делается для того, чтобы разработчик, обслуживающий модуль, мог быстро вносить изменения, не возясь с различными значениями во всех частях компонента.
Как описано в предыдущем разделе, по мере изменения размера шрифта он распространяется на все значения em, которые установлены для этого родительского элемента, а также для всех его дочерних элементов, делая все части компонента пропорционально гибкими.
Если вы изучите CSS, вы заметите следующее:
- Все внутри компонента имеет размер ems, за исключением внешней границы (которую мы хотим всегда оставлять на 2 пикселя) и изображения, размер которого я мог бы изменить, если бы захотел, но я доволен его размером статичен для этого случая.
- Каплевидный элемент в верхнем правом углу - это псевдоэлемент, который также использует базовый размер шрифта
- CSS также включает два медиа-запроса, которые регулируют размер шрифта
font-size
.
Некоторые примечания, недостатки и т. Д.
Как видно из использования ползунка диапазона в демонстрации, этот тип гибкого изменения размера не всегда то, что вам нужно. Это может несколько ограничивать.
Возможно, вам придется настроить некоторые значения em, чтобы получить их так, как вам нравится, и, как и в случае с родительской границей в демонстрации, вы можете не захотеть, чтобы возможность изменения размера применялась ко всем элементам.Вы можете легко преодолеть это, просто избегая em на тех элементах, которые вы хотите исключить.
Как описано в обсуждении исходной статьи Симурая, вам не нужно использовать единицы пикселей, чтобы установить размер шрифта для корневого
. Вы также можете использовать ems для этого, но просто помните, что он будет унаследован таким же образом от своего родителя, возможно, исходя из значения документа по умолчанию для font-size
.
А как насчет Rems и Sass?
Единица rem в CSS всегда наследует свое значение из настройки базового размера шрифта в корневом элементе документа, независимо от вычисленного размера шрифта.В HTML корневым элементом всегда является элемент html
. Таким образом, вы можете использовать rems, но это будет означать, что вам придется управлять всеми компонентами на странице, используя размер шрифта для этого элемента. Он может работать в определенных проектах, но я думаю, что этот метод лучше всего работает, когда изменение размера сосредоточено на изолированном компоненте, а не на всем документе.
Что касается использования препроцессора, такого как Sass, я думаю, что это побочный момент. В конечном итоге ваша скомпилированная таблица стилей будет использовать любые единицы, которые вы используете в своем коде Sass, и наследование будет работать таким же образом.
Заключение
Как уже упоминалось, Симурай заслуживает похвалы за то, что сделал эту технику более известной. Конечно, как он упоминает, в этом нет ничего нового, и основная концепция использовалась многими опытными разработчиками в течение многих лет, но, возможно, не столько в контексте веб-компонентов или модулей.
Как говорит Симурай, я думаю, что это хороший метод для использования при создании CSS-фреймворка или библиотеки компонентов, и, если ничего другого, я думаю, что этот метод действительно помогает понять, насколько мощны em-единицы.
Если у вас есть отзывы или опыт использования подобной техники, или у вас есть идеи, как эту концепцию можно улучшить, я буду рад услышать ваши комментарии.
В чем разница между модулями CSS em и ch?
Я просмотрел все ответы, а также ваши комментарии к ним, и у меня возникло ощущение, что вы хотите использовать em
и ch
единиц в основном для свойств width
или height
.
[...] тогда они не подходят для установки ширины поля?
И, с моей точки зрения, я бы не рекомендовал этого.
CH-агрегаты
Прежде всего, я никогда раньше не работал с ch
и, честно говоря, не вижу никакого реального использования для него - может быть, input
для года, так что всегда есть ширина для четырех чисел, но не более - , потому что он никогда не сообщает вам точно, какой шириной будет конечный элемент.
Я передумал и теперь вижу хорошее применение ch
. 🙂
Пример ввода
для года, так что всегда есть ширина для четырех чисел, сохранится.Но ch
также очень полезен для правильного определения ширины текста абзаца.
С пиксельными, относительными или процентными значениями очень сложно - особенно для адаптивного дизайна - установить идеальную ширину текста на строку, включая интервал для абзаца. Однако это может быть помехой для пользовательского опыта на веб-сайте. Абстракция от Atlassian Design идеально сочетается:
Установите среду чтения, подходящую для читателя. Широкие строки текста трудно читать, и людям труднее сосредоточиться.Хотя нет правильного способа измерить идеальную ширину текста, хорошей целью является стремление к тому, чтобы в строке было от 60 до 100 символов, включая интервал. Установка оптимальной длины строки разбивает контент на легко усваиваемые блоки.
Источник: Atlassian Design
Здесь ch
можно использовать как единое целое. Для лучшего обзора вы можете посмотреть примеры в конце.
А теперь наконец определение ч
😉
Как часто говорят, ch
относится к ширине символа 0
к его размеру шрифта.
В качестве примера: тело имеет размер шрифта : 16 пикселей
, а символ 0
имеет ширину 10 пикселей
из выбранного семейства шрифтов, тогда 1 канал
равно 10 пикселей
. И даже это все еще неточно, потому что, например, курсив
или полужирный
может изменить ширину символа.
Блоки EM и REM
Как также часто говорят, em
- и чтобы привлечь еще одного игрока - также rem
относительно font-size
.
Где rem
всегда относительно корневого элемента font-size
, em
относительно font-size
собственного элемента или последнего родительского элемента (также может быть корневым элементом) с размер шрифта
.
Как em
Пример: только тело
имеет размер шрифта : 16 пикселей;
, а элемент не получил font-size
, тогда 1em
равно 16px
. Если родительский элемент или сам элемент получил размер шрифта : 20px;
, тогда 1em
равно 20px
. em
единиц также могут размножаться сами по себе.
Как rem
, пример: тело
имеет размер шрифта : 16 пикселей;
, тогда 1rem
равно 16px
. Даже если сам элемент или родительский элемент получил размер шрифта : 20 пикселей;
, 1rem
по-прежнему равняется настройкам body
16px
.
[...] если ch имеет размер «0» в шрифте, почему em не имеет размер «M» в шрифте [...]
em
изначально был основан на типографских размерах текущего символа шрифта M
, но он уже устарел.Как вы теперь можете видеть, он всегда ссылается на «фиксированное начальное значение», а не на ширину символа.
Рекомендуемое использование
Как я уже сказал, с моей точки зрения, я бы не рекомендовал использовать ch
, em
или rem
для свойств width
или height
. Эти единицы более полезны для «текстовых» свойств.
Некоторые примеры:
- Все
h3
должны быть в четыре раза больше текста:font-size: 4rem;
- Все
p
всегда должны иметь полеmargin-bottom: 0.5em;
-
line-height
элементов должен быть на 20% больше, чемfont-size
:line-height: 1.2em;
- Вход
ширина: 4 канала;
- Ширина текста
p
всегда должна составлять 80 символов в строке, включая интервал:width: 80ch;
, но пиксели не гибкие при работе с разными устройствами
Для этого в качестве заключения я бы посоветовал просто работать с процентами width: 80%;
или ширина области просмотра и высота области просмотра height: 100vh; ширина: 100вв;
.Или, по крайней мере, всегда с максимальным значением: width: 1000px; максимальная ширина: 100%;
.
Вот несколько фрагментов - только для примеров с шириной
свойств - для лучшего понимания:
em
- Относительно размера шрифта собственного элемента или последнего родительского элемента с размером шрифта
кузов {
размер шрифта: 16 пикселей;
}
п {
font-weight: жирный;
}
div {
ширина: 1em;
высота: 50 пикселей;
фон: светло-серый;
}
.em-0-5 {
ширина: 0,5 мм;
}
.em-10 {
ширина: 10em;
}
.fs-10 {
размер шрифта: 10 пикселей;
}
.parent {
размер шрифта: 0.5em;
}
.parent div {
ширина: 10em;
}
1em (размер основного шрифта * 1 = 16 пикселей)
0,5em (размер шрифта * 0,5 = 8 пикселей)
10em (размер шрифта * 10 = 160 пикселей)
10em из 10 пикселей собственный размер шрифта элемента (размер шрифта * 10 = 100 пикселей)
10em от 0.5em родительский размер шрифта (размер основного шрифта * размер родительского шрифта * 10 = 80 пикселей)
rem
- относительно размера шрифта корневого элемента
кузов {
размер шрифта: 16 пикселей;
}
п {
font-weight: жирный;
}
div {
ширина: 10бэр;
высота: 50 пикселей;
фон: светло-серый;
}
.parent {
размер шрифта: 20 пикселей;
}
.parent div {
ширина: 5бэр;
}
10rem (размер основного шрифта * 10 = 160 пикселей)
5rem в родительском элементе с размером шрифта 20 пикселей (размер шрифта тела * 5 = 80 пикселей)
ch
- относительно ширины «0» (нуля)
кузов {
размер шрифта: 16 пикселей;
}
п {
font-weight: жирный;
}
Вход {
ширина: 4ч;
}
div {
ширина: 20ч;
фон: светло-серый;
перенос слов: слово-пауза;
}
.ch-1 {
ширина: 1ч;
}
.ch-5 {
ширина: 5ч;
размер шрифта: 32 пикселя;
}
4 канала (интервал из 4 нулевых символов)
20 каналов (интервал из 20 нулевых символов)
0000000000000000000000000
Также 20 каналов (интервал из 20 нулевых символов)
Lorem ipsum dolor sit amet, conctetuer adipiscing elit. Aeneanmodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et
1 канал (пробел из 1x нулевого символа)
00000
5ch от font-size 32px (пространство для 5x нулевых символов с размером шрифта 32px)
0000000000000000000000000
Размер в CSS: px vs em vs rem
Мы уже знакомы с использованием пикселей для изменения размера в CSS, но зачем использовать em или rem ? Создавая доступные веб-сайты, вы должны учитывать их включение.Когда вы используете пикселей , вы не ставите пользовательские настройки во главу угла.
Когда пользователь увеличивает масштаб или изменяет настройку шрифта браузера, веб-сайты должны настраиваться в соответствии с настройками пользователя. пикселей
не масштабируются, но масштабируются em
и rem
.
Как продолжение этого, рекомендуется устанавливать размер шрифта элемента html в процентах. Предполагая, что размер шрифта браузера установлен на 16 пикселей (т. Е. По умолчанию), установка размера шрифта элемента html (корневого) на 62,5% будет по умолчанию 1rem равным 10 пикселей.
Вы могли какое-то время использовать em
и rem
CSS, но разница между ними все еще нечеткая. В этой статье я расскажу о разнице и о том, когда использовать конкретный модуль, чтобы избежать создания веб-сайтов с непропорциональным размером.
Отличия
пикселей ( пикселей,
) - это часто используемая единица CSS на веб-сайтах. пикселей
не масштабируется, это абсолютная единица. Изменение значения другого элемента не влияет на значение абсолютных единиц.Присваиваемое значение фиксируется независимо от настройки пользователя.
Элемент
( em
) и корневой элемент ( rem
) - это адаптивные единицы, интерпретируемые браузером в эквивалентные единицы пикселей
. Это относительные единицы. Изменение значения родительского или корневого элемента влияет на значение относительных единиц. Они масштабируются вместе с устройством. Итак, чем они отличаются? Разница заключается в том, как значения выводятся браузером. Чтобы просмотреть вычисленные значения, откройте Инструменты разработчика Chrome и перейдите на вкладку Computed .
Вычисленное значение пикселя для em
единиц составляет относительно размера шрифта элемента, для которого применяется стиль . На это также влияют унаследованные значения от родительских элементов, если они явно не переопределены единицей пикселей
, которая не подлежит наследованию.
Вычисленное значение пикселя rem
единиц относительно размера шрифта корневого (html) элемента . Однако на это влияет параметр размера шрифта в браузере в результате наследования, если он не переопределен единицей пикселей
, которая не подлежит наследованию.
Использование em
В единицах em
вычисленное значение пикселя выводится из размера шрифта стилизованного элемента с учетом унаследованных значений (родительских и прародительских). Использование em
может оказаться сложным. em
единиц следует использовать для обеспечения масштабируемости в контексте конкретного элемента дизайна, например установка отступов, полей и высоты строки пунктов меню для использования значений em
хорошо работает для правильного масштабирования пунктов меню навигации.
из :
Unit = Размер шрифта стилизуемого элемента x Заданное значение стилизуемого элемента
Для элемента раздела
с размером шрифта 14px
, когда вы создаете правило со свойством padding, установленным на 3em
, оно будет оцениваться как 42px
(14 x 3 = 42). Это не зависит от размера шрифта, назначенного элементу html. Проще говоря, размер шрифта элемента, для которого объявлена единица em, определяет значение единицы пикселя.
html {
размер шрифта: 18 пикселей;
}
раздел {
размер шрифта: 14 пикселей;
заполнение: 3em;
}
html {
размер шрифта: 18 пикселей;
}
раздел {
размер шрифта: 14 пикселей;
padding-bottom: 42px;
отступ слева: 42 пикселей;
padding-right: 42px;
padding-top: 42px;
}
Использование rem
При использовании rem
эквивалент пикселей
зависит от размера шрифта элемента html.
рем :
Unit = Размер шрифта корневого элемента html x Заданное значение стилизуемого элемента
Для веб-страницы, корневому элементу которой назначен размер шрифта 18px
, а свойству margin присвоено значение 2rem
.Расчетное значение маржи составит 36 пикселей
(18 x 2 = 36).
html {
размер шрифта: 18 пикселей;
маржа: 2бэр;
}
html {
размер шрифта: 18 пикселей;
нижнее поле: 36 пикселей;
маржа слева: 36 пикселей;
поле справа: 36 пикселей;
маржа сверху: 36 пикселей;
}
Влияние наследования на Единицу
Когда наследование применяется к em
CSS-единицам, метод вычисления эквивалентного пикселя меняется.
С на
дочерний элемент наследует значение своего родителя и вплоть до прародителя.Это изменяет предполагаемое значение пикселя, поскольку унаследованное значение принимается во внимание.
из :
Единица = Размер шрифта стилизуемого элемента x Размер шрифта родительского и родительского элементов (если есть) x Заданное значение стилизуемого элемента
<раздел>
Бабушка и дедушка
Родитель
Ребенок
html {
размер шрифта: 16 пикселей;
}
.page-wrapper {
размер шрифта: 1.5em;
}
.container {
отступ: 2em;
}
Чтобы вычислить значение padding
для класса .container
выше, учитывается наследование.
html {
размер шрифта: 16 пикселей;
}
.page-wrapper {
размер шрифта: 24 пикселя;
}
.container {
padding-bottom: 48 пикселей;
отступ слева: 48 пикселей;
отступ справа: 48 пикселей;
padding-top: 48 пикселей;
}
Раздел, имеющий класс page-wrapper
, наследует размер шрифта родительского (html) элемента (16 пикселей).Он умножает это значение на размер шрифта (1,5em), который составляет 24 пикселя (16 x 1,5 = 24 пикселя).
По-видимому, значение заполнения, указанное в контейнере , класс
будет унаследован от родительского элемента. Его значение заполнения теперь будет вычислено до 48 пикселей (24 x 2 = 48).
Если класс контейнера
определяет размер шрифта в единицах em
, вычисление будет расширено, чтобы использовать это значение. например, если размер шрифта 1.5em
указан в классе контейнера
,
html {
размер шрифта: 16 пикселей;
}
.page-wrapper {
размер шрифта: 1.5em;
}
.container {
размер шрифта: 1.5em;
отступ: 2em;
}
значение заполнения будет вычислено как:
Размер шрифта родительского элемента (html) x размер шрифта раздела (page-wrapper) x размер шрифта div (контейнера) x значение заполнения
Это будет равно 57,6 пикселей (16 x 1,5 x 1,5 x 2 = 72).
html {
размер шрифта: 16 пикселей;
}
.page-wrapper {
размер шрифта: 24 пикселя;
}
.container {
размер шрифта: 36 пикселей;
padding-bottom: 72px;
отступ слева: 72 пикселей;
padding-right: 72px;
padding-top: 72px;
}
Чтобы переопределить это унаследованное значение, вам необходимо явно установить единицу стилизованного элемента на
пикселей
.
Например,
<раздел>
Бабушка и дедушка
Родитель
Ребенок
Со стилем:
html {
размер шрифта: 16 пикселей;
}
.page-wrapper {
размер шрифта: 24 пикселя;
}
.container {
размер шрифта: 1.5em;
}
Обратите внимание, что значение размера шрифта div
с классом контейнера выше вычисляется на основе его родительского элемента, а не корня. Интересно то, что родительский и дочерний элементы в приведенном выше HTML не имеют одинакового размера шрифта, независимо от того, что они имеют одно и то же имя класса.Размер шрифта Child вычисляется на основе его родителя, то есть Parent, а размер шрифта Parent вычисляется на основе его родителя, то есть Grandparent.
Вычисляется как:
<раздел>
Дедушка и бабушка (24px)
Родитель (24 x 1,5 = 36 пикселей)
Ребенок (36 x 1,5 = 54 пикселя)
При использовании em
рекомендуется определять размер шрифта в элементе html
вместо того, чтобы явно объявлять его для других элементов.
Влияние настроек браузера
Размер шрифта, установленный в браузере пользователем, может повлиять на значение, когда в веб-приложении используется единица CSS rem
. Это касается единиц
единиц также в результате наследования.
Если для элемента html не задано значение шрифта
В примере ниже
html {
размер коробки: рамка-рамка;
}
.page-wrapper {
размер шрифта: 2rem;
}
размер шрифта элемента с именем класса page-wrapper
будет зависеть от настроек браузера, поскольку для корневого элемента размер шрифта не установлен.По умолчанию размер шрифта браузера установлен на 16 пикселей
и наследуется корневым элементом. Если пользователь изменяет размер шрифта браузера в настройках, страница будет отображаться в соответствии с настройками. Предполагая, что пользователь устанавливает размер шрифта по умолчанию на 14 пикселей, вычисленное значение размера шрифта для page-wrapper
будет равно 28 пикселей (14 x 2 = 28).
Если для элемента html установлено значение шрифта em или rem
Когда значение шрифта em
или rem
установлено в элементе html с пользовательской настройкой браузера, вычисленное значение пикселя будет кратным настройке размера шрифта браузера с указанным размером шрифта.
Например, если элемент html веб-сайта имеет свойство font-size, установленное на 1,5em, а размер шрифта браузера установлен на 14 пикселей, вычисленное значение пикселя корневого элемента будет 1,5 x 14 = 21 пиксель.
Рекомендуемая настройка
Рекомендуется установить размер шрифта элемента html в процентах. Это решает проблему.
Предполагая, что размер шрифта браузера установлен на 16 пикселей (т. Е. По умолчанию), установка размера шрифта корневого элемента html на 100% будет по умолчанию 1rem равным 16 пикселей.Это все еще не оптимальное решение. Лучше использовать 62,5%. Это будет равняться 1 бэр на 10 пикселей. Начиная с этого, поскольку база упрощает расчеты.
* {
размер коробки: рамка-рамка;
}
html {
размер шрифта: 62,5%;
}
тело {
маржа: 0;
размер шрифта: 1.6rem;
}
.Заголовок страницы {
размер шрифта: 3,2 бэр;
}
Для браузеров, которые не поддерживают использование rem, вы можете использовать миксин SCSS или предоставить запасной вариант.
* {
размер коробки: рамка-рамка;
}
html {
размер шрифта: 62.5%;
}
тело {
маржа: 0;
размер шрифта: 16 пикселей;
размер шрифта: 1.6rem;
}
.Заголовок страницы {
размер шрифта: 32 пикселя;
размер шрифта: 3,2 бэр;
}
Заключительные ноты
- Используйте препроцессоры для абстрагирования вычислений с помощью функции преобразования пикселей в rem
- Используйте
em
только для изменения размера, который необходимо масштабировать на основе размера шрифта элемента, отличного от html (корневого) элемента. - Используйте
rem
для элементов, масштабируемых в зависимости от настроек размера шрифта браузера пользователя.Используйтеrem
в качестве единицы для большей части стоимости вашего имущества. - Для сложной компоновки используйте процент (%).
rem vs em Единицы в CSS
Хотя в этом руководстве содержится контент, который, по нашему мнению, принесет большую пользу нашему сообществу, мы еще не тестировали или
отредактировал его, чтобы обеспечить безошибочное обучение. Это в нашем списке, и мы над этим работаем!
Вы можете помочь нам, нажав кнопку «сообщить о проблеме» в нижней части руководства.
Введение
У нас есть много хороших вариантов, когда дело доходит до единиц в CSS. В современном мире адаптивного дизайна относительные единицы, такие как em или rem, дают нам возможность адаптации и гибкости прямо из коробки, что позволяет определять размеры на основе размеров шрифта, определенных выше в разметке.
Вы, вероятно, уже какое-то время используете единицы em и rem, но вам может быть интересно узнать, в чем разница между ними и какая единица лучше подходит для ваших вариантов использования.Давайте разберемся как можно короче.
Резюме: em для свойства font-size будут относиться к font-size родительского элемента. Единицы em для других свойств, кроме font-size, будут относиться к font-size текущего элемента. Размеры единиц rem всегда будут относиться к размеру шрифта корневого элемента html
.
em Установка
em заимствовано из мира типографики, и это единица, позволяющая установить размер шрифта элемента относительно размера шрифта его родительского элемента.
Рассмотрим простой пример:
.parent {
размер шрифта: 18 пикселей;
}
.ребенок {
размер шрифта: 1.5em;
}
В этом примере дочерний элемент будет иметь размер шрифта 27 пикселей (1,5 * 18 пикселей = 27 пикселей).
Если в родительском элементе не указано значение font-size, значение будет искать выше в дереве DOM. Если размер шрифта не указан до самого корневого элемента (
), то используется значение браузера по умолчанию 16px .
Довольно просто и понятно, правда? Однако единицы em могут использоваться не только для установки размера шрифта, и их можно использовать практически везде, где ожидаются единицы измерения (отступы, поля, ширина, высота, максимальная ширина, ... вы понимаете!) Когда единицы em используются в свойствах, отличных от font-size, значение определяется относительно собственного font-size элемента.
Добавим к нашему примеру:
.parent {
размер шрифта: 18 пикселей;
}
.ребенок {
размер шрифта: 1.5em;
отступ: 2em 1em;
}
- Прокладка сверху и снизу на
.ребенок
будет 54px . Это в 2 раза больше размера шрифта нашего текущего элемента ( 2 * 27 пикселей ) - Отступ слева и справа на
.child
будет 27px . Это в 1 раз больше размера шрифта нашего элемента.
Помните: когда единицы em используются для font-size, размер зависит от font-size родительского элемента. При использовании в других свойствах он зависит от размера шрифта самого элемента.
Эффект смешивания: Проблемы в раю
Пока все хорошо с использованием модуля em, но проблема может возникнуть из-за того, что модуль может соединяться от одного уровня к другому.
Давайте сохраним аналогичный базовый пример:
.parent {
размер шрифта: 15 пикселей;
}
.ребенок {
размер шрифта: 2em;
}
Но давайте использовать его в нашей разметке вот так:
Я 15px
Я 30 пикселей, как и ожидалось
Мне 60px, начинаются неприятности!
Я 120px, теперь у нас действительно проблемы!
У меня 15 пикселей, я 30 пикселей, как и ожидалось, 60 пикселей, начинаются проблемы!
У меня 120 пикселей, теперь у нас действительно проблемы!
Итак, как вы можете видеть, эффект единиц em может усугубляться, когда несколько элементов размера em-font находятся внутри друг друга.Это может стать проблемой и привести к непредвиденным последствиям в ваших проектах.
Эта проблема является причиной создания модуля rem.
rem Единица
Единица rem, сокращенно от root em, является относительной единицей, которая всегда будет основываться на значении font-size для корневого элемента, которым является элемент
. И если элемент
не имеет указанного размера шрифта, используется значение браузера по умолчанию 16px .
Это означает, что при использовании единицы rem игнорируются значения родительских элементов и учитывается только значение корня.
Аналогичный пример, но в rem:
.html {
размер шрифта: 16 пикселей;
}
.parent {
размер шрифта: 15 пикселей;
}
.child-rem {
размер шрифта: 2rem;
}
Я 15px
Я 32px, как и ожидалось
У меня 32 пикселя, ага!
Я 32px, как по маслу!
Я 15px
У меня 32 пикселя, как и ожидалось
У меня 32 пикселя, да!
У меня 32 пикселя, как по маслу!
Как видите, использование единиц rem позволяет избежать эффекта сложения единиц em.С rem все всегда и последовательно основывается на размере шрифта или корневом элементе, поэтому нет никаких сюрпризов.
То же самое и для других значений, кроме font-size (margin, padding,…). Использование единиц rem для них по-прежнему будет относиться к размеру шрифта корневого элемента.
em vs rem, что лучше?
На самом деле нет лучшего устройства, и все зависит от ваших личных предпочтений. Некоторым людям нравится разрабатывать все в единицах rem для согласованности и предсказуемости, в то время как другим нравится также использовать единицы em в местах, где влияние соседних родительских элементов имело бы смысл.
Преобразование
PX в EM стало проще.
Что такое EM?
Википедия хорошо об этом говорит: «em - это единица измерения в области типографики, равная размеру текущего шрифта».
Если ваш размер шрифта составляет 16 пикселей, то 1em = 16px
Для получения дополнительной информации посетите Википедию и Mozilla MDN.
Какая разница в размере текста между PX, EM,%, PT?
Пиксели и точки представляют собой статические измерения, но обычно используются в разных средах.Пиксели используются на экранах, потому что экраны измеряются в пикселях. Хотя точки можно использовать на экране, они являются стандартом для печати, поскольку их коэффициент составляет DPI .
С другой стороны,
Процент и EM являются относительными величинами. Размер EM или процентной единицы зависит от его родительского элемента. Если размер основного текста составляет 12 пикселей, то размер текста, установленного на 120% или 1,2 EM внутри основного текста, будет 1,2 * 12 или 14,4 пикселей.
Как выполнить преобразование между PX, EM,% и PT?
Предположим, вы не используете PXtoEM.com для простоты, вот формулы, которые использует PXtoEM.com.
Примечание. 16 пикселей используется в качестве размера основного текста во всех преобразованиях, поскольку это значение по умолчанию в браузере. Вы измените 16 пикселей на ваш базовый размер текста.
- PX по EM
- Формула: размер в пикселях / родительский размер в пикселях
- Пример: 12px / 16px = 0,75em
- PX в%
- Формула: размер в пикселях / размер родительского элемента в пикселях * 100
- Пример: 12 пикселей / 16 пикселей * 100 = 75%
- PX в PT
- Формула: размер в пикселях * (точек на дюйм / пикселей на дюйм)
- Пример: 16 пикселей * (72 пункта / 96 пикселей) = 12 пунктов
- EM к PX
- Формула: размер в EM * размер родительского элемента в пикселях
- Пример:.75em * 16px = 12px
- EM в%
- Формула: размер в EM * 100
- Пример: 0,75 em * 100 = 75%
Зачем изменять размер текста с помощью EM в CSS?
Таблицы стилей
, использующие EM, легче поддерживать для дизайнера (особенно с PXtoEM.com на вашей стороне) и более доступны для конечных пользователей.
Таблицы стилей
стало проще поддерживать, потому что весь текст, установленный в EM, масштабируется до размера основного шрифта.Только один элемент font-size необходимо изменить вместо индивидуального изменения font-size каждого элемента.
Доступность расширена для конечных пользователей, поскольку текст масштабируется в соответствии с их предпочтениями, а не устанавливается статически в пикселях. Кроме того, конечные пользователи могут использовать горячие клавиши для масштабирования текста во всех браузерах. Многие люди с трудом читают мелкий текст на экране компьютера.
Для получения дополнительной информации посетите A List Apart, informIT, блог Джона Тана и этот блог SharePoint.
Этот сайт использует Blueprint CSS для создания вашего вкусного CSS.
Что такое PXtoEM.com?
PXtoEM.com - это простое преобразование пикселей в em. Выберите размер основного шрифта в пикселях (px), и вы получите полную таблицу преобразования пикселей (px) в em, что делает гибкий веб-дизайн с помощью CSS несложным. Некогда сложная задача преобразования пикселей (px) в неуловимые em теперь была сведена к писку, поедающему козел. Спасибо, PXtoEM.com!
PXtoEM.com делает еще один шаг вперед и дает CSS для начала! После того, как вы выберете размер основного шрифта, перейдите в «Получить CSS» и готово!
PXtoEM.com был создан Брайаном Креем
.