Хобрук: Ваш путь к мастерству в программировании

Переход на медиа-запросы на основе Em

Теперь, когда WebKit ошибка масштабирования страницы был исправлен, каковы основные причины использования медиа-запросов на основе em, а не чем пиксельные медиа-запросы?

Награда

Я добавляю награду к моему вопросу, потому что так много известных CSS фреймворки и Интернет разработчики используют их медиа-запросы, которые, как я убежден, должны иметь веские причины для этого.

Единственное преимущество, о котором я знаю, заключается в том, что если пользователь изменит размер шрифта по умолчанию в своем браузере, содержимое будет сжимайте способом, аналогичным проблеме, решаемой исправлением масштабирования страницы. Есть ли какие-либо данные, показывающие, что люди действительно меняют размер по умолчанию, а не масштабирование?

Примечание

Чтобы сделать мой вопрос более целенаправленным, я удалил два второстепенных элемента. исходный пост добавит перспективу замечательному ответ, в котором рассматриваются все три вопроса, о которых я спрашивал.


  • Похоже, что вместо того, чтобы спрашивать действительно ли люди меняют свой базовый размер шрифта, лучше спросить, что происходит в каждом браузере, когда люди ДЕЙСТВИТЕЛЬНО меняют свой базовый размер шрифта. > Я думаю, что если возможности есть, мы должны адаптироваться к ним. Если мультимедийные запросы на основе пикселей могут вызвать проблемы у моих пользователей, я должен знать об этом и адаптироваться к этому. Например, в Chrome я не увидел разницы, но в некоторых других браузерах может быть по-другому. 14.03.2014
  • Проверьте это. 16.11.2016

Ответы:


1
  1. В современных браузерах не должно быть разницы между медиа-запросами на основе em и пикселями, если браузер правильно обрабатывает масштабирование. На самом деле у меня были проблемы с медиа-запросами на основе em в одном проекте, потому что в одном из медиа-запросов изменился базовый размер шрифта, а затем все остальные медиа-запросы перепутались. Это может быть просто глупой ошибкой, но вы поняли идею. Я бы выбрал пиксели. См. обновление ниже. Хотя масштабирование не влияет на современные браузеры, базовый размер шрифта по-прежнему действует.

  2. Я вижу, что самая большая проблема, с которой вы можете столкнуться при использовании метода 62,5% и rem, заключается в том, что вы столкнетесь с браузерами, которые его не понимают. Если вас это беспокоит, вы можете добавить запасной вариант для браузеров с меньшими возможностями и установить rem для современных.

    html { font-size: 62.5%; }
    body { font-size: 14px; font-size: 1.4rem; }
    h1   { font-size: 24px; font-size: 2.4rem; }
    
  3. Если и есть какая-то разница в том, как быстро браузеры обрабатывают px по сравнению с em, то она незаметна. Браузеры вычисляют CSS очень, очень быстро (намного быстрее, чем JS). Так что, наверное, не стоит беспокоиться.


Плюсы, минусы и способы измерения

px

Раньше я использовал px для медиа-запросов, потому что они очень надежны и, как вы говорите, прекрасно масштабируются. Обновление. Однако, если пользователь изменит свою таблицу стилей по умолчанию, ваши медиа-запросы будут отключены.

  • Независимо от каскада CSS
  • В основном неотносительное измерение (просто зависит от того, как браузер измеряет пиксели шрифта)
  • Масштабируется во всех современных браузерах

em

Ems отлично подходит для создания гибких сеток и измерений. Например, если ширина контейнера указана в ems, я могу пропорционально изменить размер контейнера и его содержимого в своих медиа-запросах с помощью одного объявления.

  • Отвечает на каскад CSS
  • Относительно размера шрифта контейнера
  • Масштабируется во всех современных браузерах

В этом примере изменение размера шрифта также пропорционально изменяет размер его контейнера.

h1.title {
  font-size: 2em;
  width: 20em;
  background-color: #baff1e;
}

@media (min-width: 400px) {
  h1 {
    font-size: 2.5em
  }
}

бэр

На самом деле я нечасто использовал rem, но я понимаю, почему он нравится многим людям. У вас есть сила относительной единицы, но вам не нужно иметь дело с сумасшедшими вещами, которые могут произойти, когда вы добавляете каскад CSS.

Изменение размера вещей на основе базового размера шрифта браузера похоже на то, что нужно делать в веб-стандартах, потому что тогда вы допускаете браузеры, оптимальный базовый размер шрифта которых может быть не 16 пикселей. На практике, однако, это работает как-то иначе. Из того, что я видел, браузеры используют 16px в качестве базового размера шрифта, потому что это то, что все ожидают, и устанавливают фактический размер этого измерения CSS, чтобы он выглядел прилично в браузере.

  • Независимо от каскада CSS
  • Относительно базового размера шрифта
  • Масштабируется во всех современных браузерах

Примечание о методе 62,5%

Это существует уже довольно давно, и сейчас я не знаю причин, чтобы не использовать его. В статье 2007 года о A List Apart они провели несколько тестов и обнаружили, что размеры шрифта отображаются более надежно в разных браузерах, когда базовый шрифт был объявлен как 100%, а размер текста был равен em. Но я был бы удивлен, если бы какое-либо из перечисленных здесь ограничений браузера действительно было актуальным. Мне до сих пор не нравится установка основного размера шрифта на 10px, но это, вероятно, просто личное предпочтение.


Обновлять

Проведя несколько тестов, я изменил свою практику использования пикселей для медиа-запросов. Теперь я рекомендую em:

  1. Пользователи меняют свой базовый размер шрифта. Одна ветка в сети поддержки Mozilla, "Как увеличить размер шрифта браузера по умолчанию?" имеет более 5000 просмотров. И похожая тема насчитывает более 15 000. Другое исследование выявило процент пользователей (0,3%), у которых был шрифт по умолчанию. размер меньше или больше, чем «средний». Как часто пользователи на самом деле меняют его, кажется неважным (см. ">предыдущий ответ SO). Если некоторые люди это делают, вероятно, стоит их поддержать.

  2. Ems, вероятно, более ориентированы на будущее. Они будут работать для любого устройства, для которого оптимальный размер шрифта по умолчанию не равен 16 пикселям (а также для тех, которые есть).

  3. Больше всего меня убедило то, что я увидел его в действии. Вот демонстрация codepen. Обратите внимание, что масштаб браузера, вероятно, не разница (я тестировал в Chrome). Но если вы на самом деле зайдете в настройки своего браузера и измените размер шрифта по умолчанию со «среднего» на что-то другое, ширина будет далекой. На мой взгляд, это неприемлемо.

07.03.2014
  • Спасибо за отличный ответ и подробную информацию. Я добавил вознаграждение и сделал свой вопрос немного более целенаправленным - я также добавил ссылку на оригинал для всех, кто читает ваш ответ и не уверен, на что ссылаются пункты 2 и 3. 12.03.2014
  • Спасибо. Мне нравится обновление по вашему вопросу. Я посмотрю на это немного больше и посмотрю, смогу ли я что-нибудь придумать. 13.03.2014
  • Обратите внимание, что такое поведение поддерживается спецификацией, в которой говорится, что ems в Медиа-запросы должны использовать начальное значение font-size, которое равно medium и соответствует базовому размеру шрифта в большинстве браузеров. Это кажется неожиданным, но из-за того, как вычисляется font-size, на самом деле нет другого способа реализовать это - кроме полного изменения определения единицы em, и в этом случае они могли бы также определить совершенно новую единицу, поскольку это уже будет не EM. 14.05.2014
  • Я предполагаю, что причина, по которой пользователи меняют размер шрифта браузера, а не уровень масштабирования браузера, заключается в том, что он масштабируется с любым веб-сайтом, кроме тех, которые используют пиксели или другие абсолютные значения для всего. Я не уверен, есть ли какие-либо браузеры, которые реализуют масштабирование как настройку для всего браузера по умолчанию, но все браузеры делают реализуют базовые размеры шрифта для всего браузера. 14.05.2014
  • Я протестировал сегодня демонстрацию codepen в Chrome 41, я переключаюсь на размер шрифта маленький или большой, хотя забавно то, что версия em отображает НЕПРАВИЛЬНУЮ ширину в пикселях, а версия px показывает правильную ширину горизонтальных полос... Я я в замешательстве 14.04.2015
  • @basZero Я тоже вижу некоторые странные вещи. Он по-прежнему работает, как и ожидалось, в моем Chrome 41 (Mac), но Safari не работает. Я посмотрю на это. 17.04.2015
  • @basZero Я снова протестировал сегодня, и поведение было таким, как ожидалось (Chrome 43). Медиа-запросы на основе пикселей будут всегда отображать правильные пиксели независимо от базового размера шрифта. Однако часто это нежелательно. Если мой базовый размер шрифта увеличивается, но мой медиа-запрос не учитывает это должным образом, он может неожиданным образом раздавить часть моего контента. Посмотрите хорошее изображение в этой статье на css-tricks.com. Вы хотите использовать медиа-запрос, пропорциональный вашему базовому размеру шрифта, чтобы избежать этих проблем. 29.06.2015
  • Если вам нужна поддержка более старых браузеров, таких как Safari ‹ 11, лучше использовать мультимедийные запросы px, вот хорошее объяснение: adamwathan.me/dont-use-em-for-media-queries 08.04.2018

  • 2

    Я еще не нашел никаких данных конкретно о пользователях, которые меняют свой базовый размер шрифта, но я проверил веб-сайты, которые были разработаны людьми, которые должны знать, что они делают. Я специально смотрел, использовали ли они px или em для указания своих медиа-запросов. Хотя это может не дать полного ответа на вопрос, я думаю, что это добавляет интересного аспекта дискуссии.

    Некоторые крупные игроки

    Этот список ни в коем случае не является исчерпывающим или измеряемым каким-либо образом, за исключением того, что он включает в себя имена отдельных лиц или групп, которые, по-видимому, находятся в авангарде веб-разработки или каким-то образом внесли свой вклад в практику адаптивного дизайна.

    Следует отметить одну интересную вещь: последняя запись, Николас Галлахер, — это человек, который добавил строку медиа-запроса в Шаблон HTML5 CSS. В этом коде он использует em, хотя на его личном сайте медиа-запросы установлены в px. Я искал обсуждение этого коммита, но не смог найти.

    Несколько их сайтов

    Опять же, немного разрозненный список, но он содержит несколько сайтов, которые я считаю достойными внимания. Большинство из них построено полностью или частично людьми из предыдущего списка.

    Интересное замечание по HTML5 Boilerplate: в CSS основного проекта используется em, а в мобильной версии проекта — px.

    Мега-сайты

    На самом деле было действительно удивительно, как мало самых популярных сайтов в Интернете вообще имеют какие-либо медиа-запросы. Вот несколько человек, которые используют медиа-запросы.

    Заключение

    Неубедительно.

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

    У меня есть ощущение, что некоторые из наиболее прогрессивных дизайнеров переходят на em, но у меня нет данных об этом, кроме того, что это просто «кажется», что это может иметь место. Также может быть правдой то, что некоторые из перечисленных выше сайтов старше других и не обновлялись с тех пор, как люди начали переходить на медиа-запросы на основе em. Трудно действительно получить достаточно данных, чтобы сделать хороший вывод на этом фронте.

    Однако тот факт, что некоторые из крупнейших сайтов в мире используют px, говорит мне о том, что этот подход должен может быть технически правильным. Если бы с ним возникли серьезные проблемы, я уверен, что крупные сайты узнали бы об этом от своих пользователей или в ходе тестирования и перешли бы на что-то более технически жизнеспособное для обслуживания своей аудитории.

    13.03.2014
  • Хотя ваши выводы не добавляют решения проблемы, это +1 от меня за обзор текущих сайтов и практиков - удобный справочник. 18.03.2014
  • Прошло больше года с момента этой публикации, а Итан Маркотт до сих пор использует PX для определения медиа-запросов на своем домашнем сайте. Он также использует PX для определения ширины различных контейнеров, и он использует PX для установки размеров шрифта. Он также использует % и EM в других местах. Что это значит, что отец RWD использует такой смешанный набор элементов? 17.06.2015
  • @MatthewSchenker Я действительно не вижу никаких обновлений на его сайте с тех пор, как написал пост несколько лет назад. Я предполагаю, что он такой же, как и многие из нас, и не может вернуться и обновить старые сайты новыми методами столько, сколько ему хотелось бы. Или, может быть, у него просто никогда не было проблем с этим. Я внимательно изучаю некоторые работы ведущей в отрасли компании Filament Group или более подробные инструкции. Крис Койер. Я верю, что их материал более актуален. Мне было трудно сказать, насколько свежа какая-либо опубликованная работа Итана. 29.06.2015

  • 3

    Есть одна основная причина, по которой следует использовать медиа-запросы на основе EM, а именно:
    учитывать пользовательские (базовые) настройки размера шрифта
    без нарушения макета!

    Вы действительно никогда не должны определять ни размеры шрифта в пикселях (ни ширину/высоту ваших элементов)!!!
    Позвольте пользователю решить, какой размер шрифта ему нравится смотреть на вашем сайте.

    Так что это вопрос доступности.

    Если вы используете значения в пикселях, вы должны принять определенный (базовый) размер шрифта, который «обычно» составляет 16 пикселей. Но не всегда, и в этом суть. Поэтому, если пользователь выбрал меньший или больший (базовый) размер шрифта, ваш макет развалится.

    Или в настольных системах, если пользователь использует функцию масштабирования браузера, он получит горизонтальную полосу прокрутки (что в большинстве случаев нежелательно).

    Всего этого можно избежать, используя относительные единицы, такие как EMs. И у них нет недостатков.

    Также стоит упомянуть, что на самом деле настройка базового размера шрифта, а также функция масштабирования в мобильных браузерах (на сенсорных устройствах, таких как планшеты и смартфоны) работают иначе, чем их аналоги на настольных компьютерах. Для мобильных версий браузеров настройка размера шрифта не играет такой важной роли, как для настольных браузеров. Но опять же, вы не делаете ничего плохого, используя медиа-запросы на основе EM. И имхо, это максимально «проверено на будущее».

    И вы также можете легко использовать "метод 62,5%".
    Напоминаем, что новый размер шрифта "root em" зависит от размера шрифта корневого элемента (страницы), и это элемент html, а не body элемент.

    Используйте «технику 62,5%», не нарушая доступности:

    html {
        font-size: 62.5%; /* with the standard base font size of 16px this will be equal to 10px */
    }
    
    body {
        font-size: 160%; /* 160% of 10px ~ 16px, understood by all browsers */
        font-size: 1.6rem; /* 1.6 * 10px ~ 16px, understood by all major browsers and IE9+ */
    }
    

    Таким образом, вы можете использовать rem так же, как если бы это было px (деленное на 10),
    но без какого-либо вреда для настроек пользователя!

    Независимо от того, какой базовый размер шрифта выбрал пользователь, соотношение шрифтов всегда останется неизменным.
    А также ваш макет! ;-)

    И последнее замечание:
    Всегда используйте min|max-width медиазапросы и никогда device-width! Причина в том, что вы размещаете и устанавливаете точки останова в зависимости от вашего контента, а не от разрешения каких-либо устройств!

    Таким образом, используя относительные единицы (например, EMs) для вашего макета и размеров шрифта, ваш дизайн действительно «отзывчив». При использовании абсолютных единиц (например, PX) это не так!

    15.03.2014
  • Я согласен с этим постом. Я провел дополнительное исследование и только что обновил свой ответ, чтобы отразить то же мнение. Следует отметить одну вещь: в большинстве современных браузеров масштабирование не влияет на запуск правильного медиа-запроса; только настройка размера шрифта браузера по умолчанию может иметь значение (по крайней мере, для медиа-запросов). 18.03.2014
  • Обратите внимание, что существует нерешенная проблема с некоторыми браузерами на основе Chrome. браузерах, когда html имеет размер шрифта, основанный на процентах, font-size, а body – размер шрифта, основанный на rem. 02.08.2014
  • @donut Поскольку вы не будете изменять базовую настройку размера шрифта пользователя (оставив размер шрифта html равным 100%), в этом нет необходимости или, другими словами, нет смысла использовать «rem» для тела, поскольку 1rem равен 1em! 02.08.2014
  • @Netsurfer Не обязательно. Возможно, вы захотите изменить базовый размер шрифта, но относительным образом. Например, может иметь смысл использовать font-size: 62.5% для html, чтобы rem основывалось на корне 10px font-size, что значительно облегчало вычисления. Но тогда вы можете захотеть установить body обратно на то, что у пользователя было раньше. Итак, в этом случае однажды можно было использовать font-size: 1.6rem или font-size: 1.6%. Тем не менее, для этой ошибки вы бы выбрали 1.6em вместо 1.6rem. 05.08.2014
  • Теперь вы должны, чтобы значения 'em' в медиазапросах всегда относились к 16px (или настройкам браузера/пользователя).. даже если вы определяете размер шрифта html на 62,5% -> в медиазапросе 64em не являются 640px 04.12.2014
  • @JackBlack Знаете ли вы, как заставить медиа-запрос ответить на него? 16.04.2015
  • @wittgenstein Это невозможно. Медиа-запросы не заботятся о том, что вы установили в своем селекторе CSS для своего тега html. 16.04.2015
  • @JackBlack Да, только что заметил. Это также относится и к rem. 16.04.2015
  • Новые материалы

    Введение в контекст React
    В этом посте мы поговорим о Context API, который был представлен в React 16, и о том, как вы можете их использовать. Что такое контекст? Глядя на определение из react docs , оно..

    Шлюз с лицензией OSS, совместимый с Apollo Federation v2, появится в WunderGraph
    Сегодня мы рады сообщить, что мы сотрудничаем с поддерживаемой YC Tailor Technologies, Inc. для внедрения Apollo Federation v2. Реализация будет лицензирована MIT (Engine) и Apache 2.0..

    Это оно
    Ну, я официально уволился с работы! На этой неделе я буду лихорадочно выполнять последние требования Думающего , чтобы я мог сосредоточиться на поиске работы. Что именно это значит?..

    7 полезных библиотек JavaScript, которые вы должны использовать в своем следующем проекте
    Усильте свою разработку JavaScript Есть поговорка «Не нужно изобретать велосипед». Библиотеки — лучший тому пример. Это поможет вам написать сложные и трудоемкие функции простым способом...

    Базовое руководство по переносу концепций обучения в глубокое обучение
    Обзор По мере того, как машинное обучение становится все более мощным и продвинутым, модели, обеспечивающие эту расширенную возможность, становятся все больше и начинают требовать огромного..

    C в C.R.U.D с использованием React-Redux
    Если вы использовали React, возможно, вы знакомы с головной болью, связанной с обратным потоком данных. Передача состояния реквизитам от родительских компонентов к дочерним компонентам может..

    5 обязательных элементов современного инструмента конвейера данных
    В цифровом мире предприятия используют конвейеры данных для перемещения, преобразования и хранения огромных объемов данных. Эти конвейеры составляют основу бизнес-аналитики и играют..


    © 2024 hobruk.ru, Хобрук: Ваш путь к мастерству в программировании