Макеты на основе Rem, масштабирование в chrome несовместимо, PX против REM



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



Куда бы я ни пошел, все рекламируют использование макетов на основе rem в качестве нового золотого стандарта, и на поверхности достоинства этого подхода кажутся идеальными (полная поддержка доступности как для эталонного пиксельного масштабирования, так и для масштабирования размера шрифта для поддержки многих DPI и много размеров экрана / настроек).



Однако я столкнулся с довольно большой проблемой, я нахожу, что Chrome (и, возможно, все браузеры webkit, но у меня нет Mac atm для тестирования) , кажется, не масштабируется так же, как остальные.



С начальной настройкой следующим образом:



html { font-size: 62.5%; }
body { font-size: 1.6rem; }


Мы должны быть в состоянии настроить все наши измерения, используя 1/10 размер пикселя в rems:



.my-element { height: 15rem; } /* 150px */


Я создал простой пример, который иллюстрирует мою проблему здесь: https://jsfiddle.net/gLkpz88q/2/embedded/result/



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



Сравните это с Firefox, IE11, Edge, и вы не увидите такого поведения вообще, они все масштабируются равномерно и непрерывно.

Вот (вверху слева: Chrome, вверху справа: IE11, внизу слева: Edge, внизу справа: FireFox) бок о бок:
Пример



Как вы можете видеть, это имеет некоторые ужасные последствия для макеты, если единица rem масштабируется иначе, чем все остальное.



Я не уверен, как поступить с этим сценарием, поскольку кажется, что WebKit / Chrome решили обрабатывать масштабирование совершенно по-другому, и это ставит под сомнение все сценарии масштабирования в будущем.



Есть ряд статей, пропагандирующих просто использование пикселей, поскольку CSS Reference Pixel довольно хорошо заботится о мобильном масштабировании:




Однако они склонны игнорировать проблему масштабирования шрифта, ссылаясь на нее как на маловероятную ситуацию.



Я быстро осмотрел man big mobile friendly / friendlyish сайты, которые я мог бы придумать от крупных и успешных компаний, и, похоже, большинство из них просто используют пиксели для всех своих потребностей в макете. (Google, Facebook, Wordpress, Twitter, Bootstrap 3, [и в некоторой степени Bootstrap 4], MDN , и WebPlatform )



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

676   3  

3 ответов:

Это связано с тем, что Chrome устанавливает минимальный размер шрифта, поэтому, если вы уменьшите масштаб, chrome установит минимальный размер шрифта в 6 пикселей (12 пикселей для китайской и японской версий). Таким образом, ваш div будет иметь минимальную ширину, поскольку она зависит от вашего базового размера шрифта (который не может быть меньше минимального размера chrome).

См. также:

Chrome увеличит размер шрифта при уменьшении масштаба

[Edit] Дополнительная Информация:

Chromium Билеты И Обсуждения На эта тема:

Https://bugs.chromium.org/p/chromium/issues/detail?id=16875 https://bugs.chromium.org/p/chromium/issues/detail?id=36429

-webkit-text-size-adjust Поддержка упала, поэтому жизнеспособное решение для такого поведения больше не является надежным:

Https://trac.webkit.org/changeset/145168/webkit

Я начну свой ответ с того, что сначала обращусь к вашему заключительному заявлению, просто потому, что оно привлекло мое внимание (помимо огромной щедрости).

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

Да и нет. У меня больше проблем с тем, что не работает в браузерах WebKit, чем в любом другом основном браузерном движке, но после изучения отдельных проблем я как правило, это происходит потому, что WebKit стремится придерживаться правил, предоставляемых W3C более жестко, чем другие.

Большинство других браузеров, кажется, очень снисходительны к разработчикам, и я люблю их за это, но мы не можем обязательно распинать WebKit за следование правилам. Чтобы распространить вышеприведенные утверждения на остальную часть вашего вопроса, я бегло просмотрел документW3C, касающийся относительной длины шрифта . Под заголовком для rem единиц Вы заметите первая строка гласит:

Равно вычисленному значению ' font-size’ на корневом элементе.

К сожалению, font-size сам по себе относительно открыт для интерпретации вашим движком broswer.

Ответ Cyrix верен в том, что Chrome будет корректировать размер шрифта на основе минимального размера шрифта, который он встроил в движок. Чтобы легко решить вашу проблему, вы можете использовать правилоtext-size-adjust или более новое правилоfont-size-adjust на вашем элементе контейнера, чтобы предотвратить это:
* { /* Replacing "*" with ".my-element" would probably be better for the rest of your site*/
    -webkit-text-size-adjust: none;
    -webkit-font-size-adjust: none;
}
Проблема, однако, заключается в том, что старые версии Chrome не принимают настройку размера шрифта, а новые версии принимают только настройку размера шрифта и только тогда, когда включены экспериментальные функции. В заключение, чтобы ответить на остальные ваши вопросы, rem и em - прекрасная единица измерения, если вы работаете с реальным текстовым контентом и т. д. Думайте в строках:
  • Если вы хотите, чтобы ваши<h1> всегда были примерно на 25% больше, чем ваш основной текст h1 { font-size: 1.25rem; }
  • если вы, то высота вашего заголовка всегда должна быть в 3 раза выше высоты строки текста внутри него .header { height: 3em; }

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

Возьмем для примера:

.my-element {
  width: 95%;
  margin: auto;
  max-width: 600px;
}

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

Короче говоря.

    Да, хром ломает вещи в масштабе, который заставляет IE ревновать, но это нормально.
  • Да, многие люди пытаются использовать относительные единицы шрифта как лучшее, что можно сделать, однако вопреки тому, что они могут сказать, вам не нужно использовать это за все.
  • вашим конечным результатом должна быть отзывчивая веб-страница. Ваши средства достижения этого будут отличаться в зависимости от содержания, которое вы имеете.
  • масштабирование шрифта-это влияющий фактор, который, скорее всего, будет существовать некоторое время, если вы беспокоитесь о том, как это может повлиять на вашу веб-страницу, убедитесь, что только элементы, которыедолжны быть масштабированы по отношению к вашему шрифту, будут масштабироваться вместе с вашим шрифтом.
  • " я испытываю искушение просто использовать пиксели в этой точке для консистенция." это логическое заключение в большинстве случаев, так что идите на это:)

Не используйте этот CSS { font-size: 62.5%; } body { font-size: 1.6rem; } это вызывает больше проблем, чем стоит, из-за того, что вы получите разные результаты в браузерах, которые используют разные базовые размеры шрифтов. Просто используйте этот сайт для расчета правильных значений rem. http://pxtoem.com/

Это должно дать вам последовательные результаты. https://jsfiddle.net/WizardCoder/gLkpz88q/3/

Обновление https://jsfiddle.net/WizardCoder/gLkpz88q/5/

Comments

    Ничего не найдено.