- Ремы, емы, и почему отказ от них — не проблема
- Что значит r.e.m.
- Что такое px, em, rem в css
- Это делает сайты более доступными (для людей с ограничениями)
- Масштабирование контрольных точек при использовании rem/em
- Используйте em для «динамического» задания отступов вокруг текста
- Создавайте модули, размер которых можно изменить, просто изменив font-size корневого элемента
- Percent
- Pixels
- Бонусный уровень: по теме единиц
- Вы можете масштабировать весь текст на своей странице с помощью одного свойства
- Ознакомиться подробнее с html и css можно тут:
- В заключение
Ремы, емы, и почему отказ от них — не проблема
Перевод статьи David Gilbertson: rems and ems, and why you probably don’t need them
Возможно, вы слышали, что при определении размера элементов на вашем сайте, вы должны использовать em или rem единицы, а не старые добрые пиксели.
Вы, вероятно, слышали такие словечки как «доступность», «подвижность» и «гибкость», и думали, что это звучит как довольно хорошая идея. Может быть, вы даже считаете, что использовать только пиксели — это любительский ход.
Ну, у меня есть для вас фантастические новости. Вам не нужно усложнять свою жизнь этими надоедливыми единицами.
Пиксели чувствуют себя отлично. На самом деле получается, что пиксели действительно хороши для задания нужного вам размера.
Что значит r.e.m.
R.E.M. [ар-и-э́м] — американская рок-группа, сформированная в городе Атенс (штат Джорджия ) в 1980 году музыкантами Майклом Стайпом ( вокал ), Питером Баком ( гитара ), Майком Миллзом ( бас-гитара ) и Биллом Берри ( ударные и перкуссия ). Один из наиболее важных и авторитетных коллективов, оказавших влияние на альтернативный рок . Группа почти сразу привлекла к себе внимание аудитории мелодичным звучанием гитариста, часто использовавшего арпеджио , и характерным вокалом фронтмена. В 1981 году R.E.M. выпустила на независимом лейбле Hib-Tone свой первый сингл «Radio Free Europe». В 1983 году последовало издание дебютного альбома Murmur , положительно встреченного критиками. В течение последующих нескольких лет сформировалась творческая репутация группы как успешного андеграундного коллектива, особенно популярного на студенческих радиостанциях. 1987 год стал прорывом для R.E.M.: группа выпустила успешный сингл «The One I Love», благодаря чему стала известна массовой аудитории. Годом позже музыканты подписали контракт с ведущим лейблом Warner Bros. и выпустили альбом Green . Этот диск принёс группе международную славу и разошёлся тиражом более четырёх миллионов экземпляров, R.E.M. начали выступать на больших площадках и гастролировать по всему миру. К тому моменту сформировался характерный музыкальный стиль R.E.M.: инди-рок с элементами постпанка и фолка .
В начале 1990-х, когда альтернативный рок стал пользоваться успехом среди массового слушателя, участники R.E.M., считавшиеся пионерами жанра, выпустили два своих наиболее коммерчески успешных альбома — Out of Time (1991) и Automatic for the People (1992), причём стиль последнего отличался от традиционного звучания группы. Диск 1994 года Monster вернул группу к более привычным рок-канонам. В поддержку пластинки R.E.M. организовали первое турне за последние шесть лет, однако оно было омрачено болезнью музыкантов. В 1996 году коллектив продлил контракт с лейблом Warner Bros. : сумма сделки составляла , и на тот момент это был самый дорогой контракт в шоу-бизнесе. В следующем году Билл Берри покинул группу, оставшиеся музыканты продолжили свой творческий путь как трио. Пройдя через некоторые изменения в музыкальном стиле, следующее десятилетие прошло для музыкантов с переменным успехом со стороны критиков и аудитории. В 2007 году R.E.M. были введены в Зал славы рок-н-ролла .
Коллектив просуществовал 31 год, о его окончательном расформировании было сообщено 21 сентября 2022 года. В конце 2022 года была издана компиляция Part Lies, Part Heart, Part Truth, Part Garbage 1982–2022 , она содержала песни со всех альбомов R.E.M., что стало символической точкой в карьере группы.
Название группы расшифровывается как «Rapid Eye Movement» — медицинская аббревиатура, означающая быстрые движения глаз . В физиологии это один из признаков так называемой « фазы быстрого сна » — фазы, в которую спящий видит сновидения.
Что такое px, em, rem в css
Многие люди путаются при работе с этими тремя единицами в CSS. Главной причиной этого является отсутствие понимания различий имеющихся между ними.
Для начала нужно усвоить базовое понимание этих единиц:
- Px (пиксель) – это единица измерения величины объектов относительно размера экрана.
- Em – это единица, основанная на размере шрифта родительского элемента (в пикселях).
- Rem – это единица,основанная на размере шрифта корневого элемента html (в пикселях).
Мы можем использовать эти единицы в различных свойствах CSS, таких как font-size, padding, margin, position.
Пиксели представляют собой неделимые объекты прямоугольной или круглой формы, размеры которых зависят от диагонали экрана устройства. Пиксель– это фиксированная единица, которая применяется к отдельным элементам там, где она определяется.
Пример:
Эта строка кода CSS устанавливает размер шрифта в 10px и отступы размером в 10px со всех сторон.
Единицы измерения em зависят от размера шрифта родительского элемента. Это не фиксированные единицы, поскольку они зависят от базового размера. Когда изменяется размер родительского элемента, меняется и значение em.
Пример:
Данный код CSS устанавливает размер шрифта в 10px, и отступы толщиной в 100px с каждой стороны, поскольку размер берётся из свойства font-size. В нем каждое значение принимается за 1em, то есть (10px = 1em, поэтому 10em = 10px * 10 = 100px).
Единица измерения rem зависит от размера шрифта, заданного в браузере по умолчанию, или размера шрифта, при именного к элементу html. Если базовый размер меняется, то значение rem также изменяется. Вы можете изменить размер шрифта, используемый по умолчанию, в настройках браузера.
Пример:
Допустим, размер шрифта, используемый по умолчанию в браузере – 14px.
Этот код установит размер шрифта в 10px и отступы в 140px с каждой стороны. При этом базовым будет размер шрифта по умолчанию, заданный в браузере, который берётся за 1rem. То есть: 14px = 1rem, поэтому 10rem = 14px * 10 = 140px.
Вопрос, который возникает при использовании этих единиц измерения: «Какие же единицы применять?» Особенно это касается em и rem. Какие элементы установить зависимыми от базового размера,а для каких применять динамические единицы измерения?
- Задача: задать размер элемента относительно размера шрифта, используемого по умолчанию на сайте, там, где не нужно менять размеры. В этом случае “rem” предпочтительнее.
- Чтобы использовать динамические единицы измерения там, где при уменьшении размера шрифта уменьшаются отступы или поля, применяйте “em”.
Для вложенных элементов используется только одна единица измерения – em. Если размеры шрифта или отступов дочернего элемента должны быть наполовину меньше, чем у родительского, тогда используйте em.
Пример:
Этот код установит размер шрифта родительского элемента в 10px, а шрифт дочернего элемента в 5px.Так как его размер зависит от значения font-size родительского элемента, которое принимается за 1em. То есть:10px = 1em, поэтому 0.5em = 10px / 2 = 5px.
Предположим, что размер шрифта, используемый по умолчанию в браузере,составляет 14px. Как это отразится на всех трёх единицах измерения?
Пример:
Для (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 в обоих случаях.
Чтобы преодолеть эту путаницу в единицах измерения, нужно знать, какие элементы зависят от настроек браузера, а какие основаны на размере экрана пользовательского устройства.
Дайте знать, что вы думаете по данной теме статьи в комментариях. Мы очень благодарим вас за ваши комментарии, подписки, лайки, дизлайки, отклики!
Это делает сайты более доступными (для людей с ограничениями)
Или конкретнее: «используйте rem, и ваш макет будет лучше масштабироваться, если пользователь увеличивает страницу».
Масштабирование контрольных точек при использовании rem/em
Другими словами, если вы определяете контрольные точки в пикселях, они фиксированы и не изменятся, если ваши пользователи увеличивают страницу. Поскольку пиксель — это пиксель, верно?
В данном случае, контрольными точками автор называет условия, заданные через медиа-запросы: “@media (max-width: 600px)”. Примечание переводчика
Это просто ложь. (Я предполагаю, что в какой-то момент в прошлом это было правдой, люди же не просто так что-то придумывают, не так ли?)
У моего великолепного примера есть контрольная точка в 600px. Она так же установлена как 37.5em для среднего и 37.5rem для нижнего примера. Без увеличения они все равны 600px.
Ниже этого размера текст отправителя и темы располагается вертикально, над ним они расположены бок о бок.
Давайте запустим IE11 для смены темпа. Я увеличиваю страницу до 150%, затем перетаскиваю окно так, чтобы оно было шириной около 900 пикселей. (Для тех, кому важна математика, это 600px × 150%.)
Итак, как вы думаете, что IE11 будет делать?
Считает ли он, что контрольная точка абсолютна на 600px все время, и, следовательно, показывает изображение на весь экран? Или он отрегулирует эту контрольную точку на 150%, так что изменение произойдет на 900px (в этом случае, мы получим узкий вертикальный текст)?
Я был достаточно удивлен, обнаружив, что IE действительно масштабировал мои контрольные точки при увеличении.
И это в древнем IE11. А как насчет других браузеров…
Safari сделал именно то, что я ожидал. (Что странно.)
Он разумно масштабировал мою 600px контрольную точку, но не совсем до 900px. Довольно неплохо, хотя здесь окно намного шире, чем контрольная точка в 600px, но при увеличении на 150% все три примера отображались так, как если бы они были уже контрольной точки.
Поэтому, если вы беспокоитесь о том, что ваши контрольные точки не масштабируются, если вы используете пиксели, не переживайте. Или, по крайней мере, найдите браузер, который не масштабирует их, и принимайте решение на основе распространённости этого браузера.
Если вы должны поддерживать IE8, и оказывается, что он не масштабирует контрольные точки, у вас может быть законная причина использовать rem. (Конечно, IE8 не поддерживает медиа-запросы и rem, но давайте не будем заострять внимание на этом.)
Используйте em для «динамического» задания отступов вокруг текста
Это почти хорошая идея, и я вижу, откуда берутся её сторонники. «Зачем менять font-size и padding, когда вы можете использовать em для padding, а затем только изменить размер шрифта?», — говорят они.
Я понимаю, я действительно так делаю. Я просто предпочитаю быть точным и установить, скажем, размер шрифта и отступы для кнопки так, чтобы он был ровно 60 пикселей на больших экранах и ровно 50 пикселей на маленьких экранах, визуально соответствуя моей точно заданной в 60px/50px панели заголовка.
И если мои проекты приходят от профессионального дизайнера, мне еще предстоит встретить того, кому безразлично, какого размера кнопка. Существует ли такое существо?
Но если вы сами проектируете сайт и не очень заботитесь о том, насколько высока эта кнопка или как далеко от заголовка расположен текст абзаца, и хотите, чтобы интервал увеличивался с изменением размера шрифта, тогда использование em для margin/padding — правильный рабочий инструмент.
Создавайте модули, размер которых можно изменить, просто изменив font-size корневого элемента
Написание этих слов, которые вы так любезно читаете, были подстегнуто сообщением в блоге, которое вышло несколько недель назад. Создайте отзывчивый сайт используя задание размеров через em.
Он объясняет (аккуратно), что, используя комбинацию rem и em, вы можете создать компонент (скажем, модальное окно), который можно масштабировать до разных размеров, просто изменяя единственный font-size в корневом элементе компонента.
Это имеет смысл. Точно так же, как имеет смысл фраза: «если вы часто убиваете людей, удобно держать лопату в багажнике вашего автомобиля».
Я уверен, это отличный совет. Но я не могу вспомнить последний раз, когда я совершил убийство, и я не могу вспомнить, когда в последний раз я нуждался в компоненте, который увеличивается во всех измерениях, отступах и размерах шрифта на один и тот же множитель, через изменение только одного значения.
Вот мой совет. Когда вы начинаете проект, спросите себя: нужно ли мне создавать какие-либо модули, которые иногда бывают определенного размера, а в другом случае будут на 10% больше в каждом измерении. Если да, следуйте рекомендациям в сообщении в блоге выше, это именно то, что вы ищете. (И положи лопату в багажник, ты, сумасшедший.)
Percent
Следующее значение, которое мы рассмотрим это проценты (%). Вы же помните, что браузер по умолчанию использует значение 16px? Это значит, что все относительные единицы, которые мы будем использовать в дальнейшем тоже будут преобразовываться в проценты. Но мы этого с вами не увидим, т.к. эти процессы будут проходить внутри браузера.
Значение процентов высчитывается относительно значения свойства родительского тега. Это значит, что если текст будет вложенным, то его значение будет меняться в зависимости от того тега, в который он вложен. Давайте рассмотрим это наглядно. Напишем, тег p, внутри которого будет находиться тег span,и внутри которого разместим еще один span
Для тега 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.
Pixels
Давайте начнем с самого распространенного — px (c англ. pixels). Пиксель — это базовая, абсолютная и окончательная единица измерения. Пиксель в CSS — это то, что вы видите на экране. Именно он задает значение разрешению монитора. Все значения браузер при веб-разработке пересчитывает в пиксели.
Итак, давайте разберем разметку, которая у нас есть в интерактивной форме. Например, в первом блоке, есть класс box-px за счет которого мы и будем стилизовать текст, который находится внутри.
Бонусный уровень: по теме единиц
Советы, что написаны ниже имеют мало общего с этой статьей, поэтому я перечислю их без реального объяснения того, что они здесь делают, и не предлагаю никакого финального текста. Это будет неудовлетворительно.
- Если у вас есть два смежных кусочка текста и вы хотите, чтобы между ними был пробел, попробуйте
1chдля размера. - Если вы хотите, чтобы цвет
body backgroundзаполнил хотя бы одну страницу по вертикали, попробуйте100vhвместо100%. Но в целом, если вы собираетесь использоватьvh, вам лучше тестировать на iOS устройствах. - Вы знаете, что
vertical-alignможет быть задан в процентах? Если вы обнаружили, чтоvertical-align: superилиtopне выстраиваются так, как вам нужно, не добавляйте что-то грязное, напримерposition: relativeиtop: -3px. Вместо этого попробуйтеvertical-align: 30%. - Когда дело доходит до гибких раскладок, не забывайте о
flex-growиflex-shrink. Может быть немного сложно изменить сознание для их принятия, но точно так же как гигантский леденец, они стоят этого.
Вы можете масштабировать весь текст на своей странице с помощью одного свойства
(Я решил больше не нумеровать заголовки.)
Другая загадочная причина использования em выглядит следующим образом: вы определили размер шрифта в своем CSS, всего, например, в 50 разных местах. Вы хотите, чтобы все 50 случаев отображались крупнее на больших экранах, а на меньшем экране — меньше, и это порождает множество медиа-запросов.
Эту проблему, по-видимому, лучше всего решить, используя rem везде, а затем изменив размер корневого шрифта в ваших медиа-запросах. Бум! Весь ваш текст сразу изменит размер.
Я думаю, что этот совет можно смело игнорировать по двум причинам. Я перечислил их для вас.
- Предполагается, что вы хотите увеличить/уменьшить весь текст на вашем сайте одновременно для заданной контрольной точки. Заголовки, пункты меню, основной текст, все сразу, все по одному и тому же фактору. Вот это смелость.
- Реальная проблема здесь заключается в том, что размер шрифта определен 50 раз. Если это сделали вы, то вам нужно подумать об организации грамотной типографики на вашем сайте. О нет, вы слышите это? Это стучат копыта проповеди о типографике…
Вот что, когда у вас есть отдельный файл только для типографики, и у вас есть, скажем, 12 стилей, и для каждого стиля у вас есть разные размеры для четырех размеров экрана, это 48 различных объявлений размера шрифта и, возможно, высоты строк, отступов, и межбуквенных расстояний тоже. Как однажды сказал Уинстон Черчилль, «это очень много».
Теперь, легко увидеть все это и подумать: «О нет, это означает кучу повторений, нам нужно сделать это по-другому — чего бы это не стоило — чтобы избежать повторения».
Я не согласен. Сильно не согласен. Слишком часто я вижу сложность, внедряемую в приложения во имя Всемогущего DRY. Не стоит недооценивать, насколько возрастает сложность при смешивании нескольких единиц. НАСА использовало две разные единицы на Mars orbiter, и они все еще не могут найти его (автор имеет ввиду неудачную миссию Mars Climate Orbiter, результаты которой, возможно, привели к окончательному переходу NASA на метрическую систему, — прим. пер.).
Не дайте своему сайту потеряться в космосе.
О, и это не просто разные единицы, а текст в какой-то части вашего приложения, который меняет размер в зависимости от размера шрифта в каком-то другом месте? Это полная противоположность инкапсуляции, она говорит тьфу детерминизму, и просто напрашивается на неприятности.
Итак… подумайте о своей типографике, настройте её один раз, сделайте это в пикселях, справьтесь с небольшим количеством повторений, воспользуйтесь тем, что ваш текст будет таким, каким вы его задали, затем забудьте об этой проблеме.
Эта напыщенная речь продолжалась гораздо дольше, чем то, что вы только что прочли, но я написал остальное в письме и не отправил его.
Ознакомиться подробнее с html и css можно тут:
Давайте создадим еще один пример и поговорим о некоторых тонкостях с использованием rem. Давайте снова создадим box, внутри которого будет содержаться тег h2 и p
В заключение
Я думаю, все это сводится к следующему: бывают случаи, когда вы должны использовать rem и em, они же присутствуют в спецификации по какой-то причине. Но сценариев, в которых вы в них нуждаетесь, все меньше и меньше, чем может показаться.
Поэтому не ищите причины использовать em и rem. Достаточно того, что они делают. Используйте пиксели, и если сценарий покажет, что em или rem являются в данном случае лучшим инструментом, перейдите на них.


