Единицы измерения CSS. Px, em или rem - что использовать?

Поделиться
HTML-код
  • Опубликовано: 17 ноя 2024

Комментарии • 54

  • @yurkaronin
    @yurkaronin Год назад +7

    Последовательное и наглядное пояснение особенностей единиц измерения. Очень полезно, особенно новичкам. Спасибо автору.
    За 9 лет разработки, часто приходится работать с легаси кодом (чужим кодом, чужой вёрсткой) и от ремов и емов больше проблем, чем пользы.
    Как по мне - чем понятней - тем проще, что бы любой спец мог после тебя разобраться в том, как вычисляются размеры шрифтов и внести доработки. Это важнейший приоритет.
    И по поводу дизайна согласен. с приходов гридов и флексов стандартизация сеток, ритмов и типографики на столько разная, что чёрт ногу сломит. Что бы не усложнять еще больше не усложнять коллегам рабочий процесс - лучше использовать простые и универсальные единицы - пиксели.

    • @kenobi6027
      @kenobi6027 Год назад

      А вы даже через 9 лет работы смотрите такие видосы?

    • @yurkaronin
      @yurkaronin Год назад +3

      @@kenobi6027 да. даже в тех тема, которые тебе хорошо знакомы бывает что то полезное. Иногда даже что то новое узнаёшь. Конкретно тут орошая подача материала и поэтому я лайкнул и прокомментировал.

  • @kenobi6027
    @kenobi6027 Год назад +2

    Спасибо: в итоге видишь и мнение автора и комменты, которые не согласны, и для себя выбираешь золотую середину. Каждвй найдет под себя)

  • @Uncaught_in_promise
    @Uncaught_in_promise Год назад +3

    Как всегда подача материала навысоте. Лайк в поддержку канала! Максим, ты - лучший. Продолжай нас радовать качественным контентом

  • @lev.bortov
    @lev.bortov 11 месяцев назад +4

    На счёт em-ов категорически не согласен. По сути, em - это динамически изменяемая единица, которая работает по формуле N * em. Она отлично подходит для ситуация, когда важно в динамике сохранить пропорции элемента, например в анимациях.
    Предположим, перед нами стоит задача: сделать, как бы, выплывающую из далека кнопку; у кнопки есть лейбл и лид-иконка, если мы хотим, чтобы кнопка «выплывала» из далека - все её составляющие должны пропорционально изменяться. Скажем, что расстояние между иконкой и лейблом в финальном положении должно составлять 8px, fontSize лейбла 16px, а размер иконки должен соответствовать размеру лейбла. В таком случае, мы можем указать расстояние между иконкой и лейблом как 0,5em, а размер иконки 1em. Таким нехитрым образом получим кнопку, которую можно как угодно увеличивать, уменьшать, а её пропорции останутся неизменными.
    em-ы нужны не для того, чтобы на них всю страницу целиком верстать, а для того, чтобы реже использовать calc() в таких вот ситуациях.

    • @maxgraph
      @maxgraph  11 месяцев назад

      Анимации с изменением размеров делаются через трансформ, так что не очень понимаю в чем поинт)
      Я бы использовал em только для letter spacing, в остальном не вижу пользы

  • @Red_Sky_92
    @Red_Sky_92 Год назад +1

    Классная тема! Объяснил очень хорошо! Супер!

  • @alexperemey6046
    @alexperemey6046 Год назад +1

    По поводу rem я наоборот согласен. Прочел статью, что надо использовать rem, чтобы пользователь мог менять только шрифт, начал использовать через sass скрипт, потом подумал, что в каждом первом макете, кроме макета в стиле "просто полотно текста", при таких действиях пользователя весь тщательно вылизанный дизайн ломается, в результате чего смысла в таких "удобствах" вообще никакого, вред один.
    Засомневался, полез искать дополнительных разъяснений. Ну и вот, услышал свои мысли.

  • @dukecca
    @dukecca Год назад

    Поддерживаю! Проценты легко настраиваются прямо на странице и легко рассчитываются calc()

  • @gio2156
    @gio2156 Год назад +1

    про rem согласен, em все таки бывают полезны, например для паддингов в кнопках, маргинов между текстами, текстовых инпутов, в общем для любых компонентов у которых отступы можно привязать к размеру шрифта, так при изменении шрифта пропорционально изменятся отступы, минус что постоянно с калькулятором нужно вычислять значения

    • @maxgraph
      @maxgraph  Год назад

      В целом удобно, но не то чтобы сильно нужно

  • @bless_meparde4913
    @bless_meparde4913 Год назад +1

    Полностью согласен. Используйте пиксели и не заморачивайтесь. Исключение разве что скейлинг (масштабирование на супер широких экранах > 1920px ) - вот при нем понадобятся ремы

    • @AntonioBenderas
      @AntonioBenderas Год назад +2

      > 1920 px это уже не суперширокие, это обыденность

    • @alexperemey6046
      @alexperemey6046 Год назад

      Ctrl + же. А еще у меня уже много лет в винде стоит общее масштабирование шрифта в системе 125%. И мне тоже никакие ремы не нужны.

  • @orazaliorazali1000
    @orazaliorazali1000 8 месяцев назад

    Благодарю!

  • @carbon00938
    @carbon00938 Год назад +2

    Привет, классное видео, спасибо. Но я вот приверженец все таки конечно пикселей, но недавно столкнулся с требованием чтобы все было в ремах. И тут получилось так что при адаптиве я использовал calc и получилось так что при ресейзе, весь проект пропорционально уменьшается, до мобилки, потом снова включается такая штука как font-size: 10px и уже в мобилке все размеры сделаны по макету (шрифты и размеры меньше). И тут у меня такой диссонанс получился, что можно очень легко сделать адаптив с помощью ремов )) Можете, пожалуйста такой вариант применения ремов рассмотреть? П.с. В компании которой начинал работать (веб студия) при сборке проекта на Galp в итоге получалось все на ремах и емах.

  • @agag5083
    @agag5083 Год назад

    Полезное видео. У одного разработчика видел спец js функцию adaptiveValue где можно поставить максимальный и минимальный размер шрифта в размере экрана. Очень удобно использовать для адаптива марджинов и падингов. А так же помогает с размером шрифтов.

    • @hjetwd
      @hjetwd Год назад

      это делается с помощью css clamp(), нужно только немножко уметь в математику и гуглить, к примеру "adaptive css clamp()", а для ленивых уже есть онлайн генераторы, которые генерируют правильный clamp(), когда можно плавно менять всё что угодно в пределах заданных размеров ширины или высоты экрана. вот пример, где использован адаптивный clamp() с заданными мин. (750) и макс. (1200) шириной экрана и мин. макс. значениями, которые меняются плавно в пределах заданных границ экрана. задан padding-block (мин. 16, макс. 48) у слоя и font-size (мин. 16, макс. 32) у текста:
      padding-inline: clamp( 1rem , -2.3333333333rem + 7.1111111111vw , 3rem );
      font-size: clamp( 1rem , -0.6666666667rem + 3.5555555556vw , 2rem );
      естественно в голове такое не посчитать, поэтому используются онлайн генераторы или функции препроцессора (в sass можно легко сделать, имея правильную формулу расчета).

    • @hjetwd
      @hjetwd Год назад

      @@Roman-08-q9c согласен =) для старых браузеров - годная вещь

  • @lwickboxl
    @lwickboxl Год назад

    а как на счет clamp для "резинового" шрифта? Хорошая практика?

    • @maxgraph
      @maxgraph  Год назад

      Я считаю что плохая. Шрифт должен зависеть либо от базовой единицы, либо от масштаба сайта

  • @AntonioBenderas
    @AntonioBenderas Год назад

    4:25 для заголовков, параграфов margin-bottom в еm

    • @maxgraph
      @maxgraph  Год назад

      Зачем?

    • @AntonioBenderas
      @AntonioBenderas Год назад

      @@maxgraph чтобы в мениазапросах меньше правил писать, только размер шрифта, а отступы автоматически поменяются. Но опять же, зависит от макета, может придётся поправлять, тогда пиксели )

    • @mit7871
      @mit7871 Год назад +1

      Хорош, это может быть очень полезно

  • @souleater4413
    @souleater4413 7 месяцев назад

    Начал учить верстку , не понял этих рем мем хее...м . Зачем они, если можно просто медиа запрос сделать

  • @powered8473
    @powered8473 Год назад +1

    А как насчет адаптива для различных экранов? Имхо rem также удобно как и в %.

    • @maxgraph
      @maxgraph  Год назад +1

      Я сказал про адаптив в видео)

  • @виртуоз_ру
    @виртуоз_ру Год назад

    Всегда использую пиксели.
    Красава, спасибо за видео.

  • @Виктор_Крылов
    @Виктор_Крылов Год назад

    Все это относительно шрифта, а если графика? Для "адаптации" под ширину экрана?

    • @maxgraph
      @maxgraph  Год назад

      Там достаточно задать max width

  • @НиколайПанкратов-к8о

    а как насчёт vw , vh?

  • @vipdeveloper
    @vipdeveloper Год назад +1

    Могу скинутт книгу где очень четко говорится для чего и когда используются ремы и емы

  • @hjetwd
    @hjetwd Год назад +3

    em - бесполезная вещь... =))))))))))) берем кнопку и всем её внутренним элементам (иконкам, тексту и т.д.) задаем размеры в em. теперь добавляем к самой кнопке модификатор размера, к примеру .button--large { font-size: 1.2rem } или .button--small { font-size: .8rem } . мы используем rem для родителя для четкого указания размера, а em - дочерним, зависимым элементам для динамического изменения размера, в зависимости от модификаторов, применяемых к родителю. это самый простой, наглядный и используемый в реальных работах пример использования и взаимодействия em и rem =))

    • @maxgraph
      @maxgraph  Год назад +1

      И в чем смысл?) в пикселях делается все то же самое, но проще.

    • @hjetwd
      @hjetwd Год назад

      @@maxgraph тупой ютуб режет все ссылки в комментариях - кодепен . ио /9poiiia/pen/JjmZqaX?editors=0100 это пример кода, а то ты явно не понимаешь о чем я выше написал. посмотри как делаются модификаторы в пикселях и в ремах.

    • @izzy7541
      @izzy7541 Год назад

      Ну опять, для чего это? Разве есть дизайн-системы где относительные размеры нужны? Вряд ли

    • @hjetwd
      @hjetwd Год назад

      @@izzy7541 для чего - попробуй загуглить статьи, где подробно разжевано для чего. на том же css-tricks куча статей с подробным разбором и с примерами. читай-не-хочу.
      Разве есть дизайн-системы где относительные размеры нужны? Вряд ли - хорошо, уговорил =) давай отменим все css фреймворки, включая bootstrap, uikit, materialize css и т.д. и т.п.

    • @izzy7541
      @izzy7541 Год назад

      @@hjetwd я больше опираясь на практический опыт верстки дизайн систем. Зачем мне статьи про коня в вакууме? Не делают подобное в дизайн системах, так-как там вся типографика до миллиметра проработана. А как раз там и нужна вариативность

  • @AntonioBenderas
    @AntonioBenderas Год назад

    12:40 line-height в % не наследуется

    • @AntonioBenderas
      @AntonioBenderas Год назад

      Значение, заданное множителем, наследуется и применяется в каждом элементе относительно его размера шрифта.
      То есть, line-height: 2 означает, что высота строки будет равна удвоенному размеру шрифта, не важно какой шрифт.
      Значение, заданное в единицах измерения, запоминается и наследуется «как есть».
      Это означает, что line-height: 32px будет всегда жёстко задавать высоту строки, даже если шрифт во вложенных элементах станет больше или меньше текущего.

    • @maxgraph
      @maxgraph  Год назад

      Так это понятно)

  • @NikolayPetrov-u9t
    @NikolayPetrov-u9t Год назад

    препроцессор всё сам делает, какая разница. но просто кода больше в цсс получается) ну и в инспекторе хуже читается