Макеты на основе 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 )
Хром новые стандарты-т. е. перебора? Или я делаю что-то ужасно неправильное? Я испытываю искушение просто использовать пиксели в этой точке для согласованности.
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Поддержка упала, поэтому жизнеспособное решение для такого поведения больше не является надежным:
Я начну свой ответ с того, что сначала обращусь к вашему заключительному заявлению, просто потому, что оно привлекло мое внимание (помимо огромной щедрости).
"хром новые стандарты-т. е. перебора? Или я делаю что-то ужасно неправильное? Я испытываю искушение просто использовать пиксели в этой точке для согласованности. "
Да и нет. У меня больше проблем с тем, что не работает в браузерах WebKit, чем в любом другом основном браузерном движке, но после изучения отдельных проблем я как правило, это происходит потому, что WebKit стремится придерживаться правил, предоставляемых W3C более жестко, чем другие.
Большинство других браузеров, кажется, очень снисходительны к разработчикам, и я люблю их за это, но мы не можем обязательно распинать WebKit за следование правилам. Чтобы распространить вышеприведенные утверждения на остальную часть вашего вопроса, я бегло просмотрел документW3C, касающийся относительной длины шрифта . Под заголовком для rem единиц Вы заметите первая строка гласит:Равно вычисленному значению ' font-size’ на корневом элементе.
К сожалению,
Ответ Cyrix верен в том, что Chrome будет корректировать размер шрифта на основе минимального размера шрифта, который он встроил в движок. Чтобы легко решить вашу проблему, вы можете использовать правилоtext-size-adjust или более новое правилоfont-size-adjust на вашем элементе контейнера, чтобы предотвратить это:font-sizeсам по себе относительно открыт для интерпретации вашим движком broswer.Проблема, однако, заключается в том, что старые версии Chrome не принимают настройку размера шрифта, а новые версии принимают только настройку размера шрифта и только тогда, когда включены экспериментальные функции. В заключение, чтобы ответить на остальные ваши вопросы,* { /* Replacing "*" with ".my-element" would probably be better for the rest of your site*/ -webkit-text-size-adjust: none; -webkit-font-size-adjust: none; }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
Это должно дать вам последовательные результаты. https://jsfiddle.net/WizardCoder/gLkpz88q/3/{ font-size: 62.5%; } body { font-size: 1.6rem; }это вызывает больше проблем, чем стоит, из-за того, что вы получите разные результаты в браузерах, которые используют разные базовые размеры шрифтов. Просто используйте этот сайт для расчета правильных значений rem. http://pxtoem.com/Обновление https://jsfiddle.net/WizardCoder/gLkpz88q/5/
Comments