Почему Firefox рассматривает Helvetica иначе, чем Chrome?
вертикальное положение текста, отображаемого в Helvetica, и размер его области содержимого различаются между Firefox и Chrome для Mac. Например, в Chrome спускаемые устройства обрезаются, если высота строки идентична размеру шрифта.
(я отрегулировал положение элементов блока на этом рисунке, сохраняя согласованность базовой линии, чтобы проиллюстрировать разницу в размере и позиционировании текста). Если у вас есть Mac, вы можете увидеть, о чем я говорю в этом JS Bin.
теперь меня не интересует, как исправить это конкретное несоответствие. Я понимаю, что есть вручную настроенные таблицы стилей сброса это попытка устранить или бумажные различия, но меня особенно интересуют факторы, которые заставили эти браузеры рендерить по-разному в первую очередь.
Я делаю некоторые предположения здесь:
стандарты существуют как для рендеринга шрифтов и размер и расположение глиф в стандартной модели коробки, но может быть не указано с точки зрения того, как они взаимодействуют.
ошибки существуют в интерпретации браузерами вышеупомянутых стандартов, которые могут влиять на размер, расположение и визуализацию текста.
эти конкретные - браузеры, большая часть конструкции Обсуждение и фактической реализации является публичной в той или иной форме. Поэтому можно учиться источник таких расхождений, если знать, где искать.
оба браузера начинаются в одном месте-разметка, стили и определения шрифтов согласованы между ними. В какой-то момент они расходятся в том, как они используют их для получения окончательного вывода.
поэтому мой конкретный вопрос:здесь в процессе происходит это расхождение, и что причины его возникновения?
Я чувствую, что, вооружившись этим знанием, я могу лучше понять, как исправить такие расхождения. Как в данном случае конкретно, так и в аналогичных ситуациях, с которыми я могу столкнуться в будущем.
2 ответов
к сожалению, re: рендеринг области содержимого на основе шрифта,CSS2.1 вообще мало что говорит:
высота области содержимого должна быть основана на шрифте, но эта спецификация не указывает, как. UA может, например, использовать em-box или максимальный ascender и descender шрифта. (Последнее гарантирует, что глифы с частями выше или ниже em-box все еще попадают в область содержимого, но приводит к коробкам разного размера для различные шрифты; первый обеспечит авторам возможность контролировать стиль фона относительно "высоты линии", но приводит к рисованию глифов за пределами их области содержимого.)
другими словами, набор, и как именно рисовать и позиционировать область содержимого поля строки, остается до собственной реализации браузера, по крайней мере, в CSS2.1. Однако это может быть лучше определено в будущей спецификации (вероятно,модуль шрифтов, если не отдельная модуль1).
10.8.1 содержит сведения о том, как line-height
свойство влияет на отрисовку области содержимого вокруг текста, который течет inline, но опять же это зависит от высоты самой области содержимого, которая, как указано выше, не определена в CSS2.1.
отметим, что auto
недопустимое значение для line-height
; вы, вероятно, хотели использовать normal
, что, кстати, также является его начальным значением (но не обязательно браузер по умолчанию). Кроме того, это то, что спецификация говорит о значении normal
:
нормальный
Указывает агентам пользователей установить используемое значение в "разумное" значение на основе шрифта элемента. Значение имеет то же значение, что и значение . Мы рекомендуем использовать значение "normal" между 1.0 и 1.2. Вычисленное значение является "нормальным".
как вы можете видеть, там не так много, чтобы идти дальше, даже в отношении сравнения line-height: normal
и line-height: 1
(или 1em
или 100%
), потому что то, что составляет "нормальную" высоту строки, зависит от браузера. Тем не менее, похоже, что Chrome и Firefox хорошо справляются с сохранением глиф в разумных границах, когда их просят использовать нормальную высоту линии.
кстати, Chrome не клип в подстрочных. Он отображает их вне поля содержимого, но никогда не должен обрезать их до границ поля, если вы не установите overflow: hidden
.
1определение CSS3 line-height
свойство в настоящее время находится в модуль, но сразу видно, что он давно заброшен или, по крайней мере, ожидает перезаписи. Модуль в его текущем состоянии очень подробно, но достаточно сказать, что он в значительной степени игнорируется как поставщиками браузеров, так и рабочей группой.
- 'высота линии авто' => браузер получает, чтобы выбрать.
- 'высота строки = размер шрифта' = > ошибка пользователя: текст будет неразборчивым, и снова разумно, действительно важно, чтобы браузер сделал некоторую корректировку.
вы должны использовать некоторые ведущие. Книги, например, могут быть установлены 10pt на 12pt межстрочный интервал.