Размер шрифта в CSS -% или em?


112

При установке размера шрифтов в CSS следует использовать процентное значение ( %) или em? Вы можете объяснить преимущество?


1
На мой взгляд, в 2016 году нет разницы между em и%. Если я ввожу 1,2 em, все современные браузеры думают, что я использовал 120%, и, например, если я использую 0,7 em, все современные браузеры думают, что я использовал 70% ... Это то, что я испытал в CSS
Махди Джазини,

Ответы:


79

На A List Apart есть действительно хорошая статья о веб-типографике .

Их вывод:

Было показано, что изменение размера текста и высоты строки в ems с указанием процента в теле (и необязательной оговоркой для Safari 2) обеспечивает точный текст с изменяемым размером во всех широко используемых сегодня браузерах. Это метод, который вы можете положить в сумку с набором и использовать как лучший метод для изменения размера текста в CSS, который удовлетворит как дизайнеров, так и читателей.


29
На самом деле line-heightsлучше писать вообще без модулей. Это разрешено спецификацией и полностью позволяет избежать некоторых действительно раздражающих особенностей браузера, когда речь идет о emвысотах строк.
Мар Орлигссон

16
Я хочу сообщить людям, что эта статья написана в 2007 году. С тех пор современные браузеры стали более распространенными, а современные браузеры обычно увеличивают масштаб вместо увеличения размера шрифта по умолчанию. Из-за этого «px» стал более распространенным и, на мой взгляд, лучшим подходом. Конечно , это спорный вопрос , но я лично столкнулся с проблемами в проектах из - за вложенности Эма.
Mohag519

5
@ Mohag519 Их гнездование - опасная ловушка. :)
Вишнудев К.

@ Mohag519, разве px не даст вам что-то намного меньшее, чем предполагалось для мобильных устройств с высокой плотностью пикселей? Я не думаю, что мы хотим, чтобы наши сайты были точно такими же, как на настольных компьютерах, но супер крошечными на мобильных устройствах;)
johnb003

@ johnb003 Такие мобильные устройства имеют соотношение пикселей устройства больше, чем 1. Например, iPhone 4 имеет физическую ширину экрана 640 пикселей, но отображается как 320 пикселей CSS (DPR = 2). Так что сайт меньше не кажется!
Benjamin

14

С http://archivist.incutio.com/viewlist/css-discuss/1408

%: Некоторые браузеры не обрабатывают проценты для размера шрифта, но интерпретируют 150% как 150 пикселей. (Например, некоторые версии NN4.) IE также имеет проблемы с процентом вложенных элементов. Кажется, IE использует процент относительно области просмотра, а не относительно родительского элемента. Еще одна проблема (хотя и правильная в соответствии со спецификациями W3C) в Moz / Ns6, вы не можете использовать процент относительно элементов без указанной высоты / ширины.

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

pt: сильно различается между разрешениями и не должен использоваться для отображения. Однако это вполне безопасно для печати.

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


Насчет pt. У меня был отличный аргумент по поводу /. об этом (и проиграл). У меня была такая же точка зрения, как и у вас, приятно знать, что кто-то разделяет эту точку зрения :)
Винсент Макнабб,

12
Вы действительно говорите, что некоторые пользователи Netscape Navigator 4 не смогут правильно просматривать мою страницу, если я буду использовать проценты для размеров шрифта?
новичок

4
Приведенное обсуждение относится к 2002 году. Актуально ли это? Есть ли какие-нибудь браузеры, которые активно используют em или% ошибок?
Бени Чернявский-Паскин

1
Ссылка на ошибки в браузерах 20-летней давности - бесполезный ответ.
d512

7

Оба регулируют размер шрифта относительно того, что было. 1.5em равно 150%. Единственным преимуществом, похоже, является удобочитаемость, выбирайте то, что вам удобнее.


Может кто-нибудь объяснить мне, почему это отклоняется? Именно так я понял разницу между em и процентом. В настоящее время нет никаких преимуществ в использовании одного перед другим. Важно то, что вы используете размер относительно базового размера шрифта.
Ли Теобальд,

1
Спасибо, Ли, я только что протестировал это в IE6, IE7, Firefox 3, Safari 3, Opera 9.5 и Google Chrome, все в Windows, и все они кажутся мне одинаковыми! <p style = "font-size: 0.6em;"> это тест </p> <p style = "font-size: 60%;"> это тест </p>
Лиам

7

Реальная разница становится очевидной, когда вы используете его не для размеров шрифта. Установка paddingиз 1emне такой же , как 100%. emвсегда относительно размера шрифта. Но %может относиться к размеру шрифта, ширине, высоте и, возможно, к некоторым другим вещам, о которых я не знаю.


5

Учитывая, что (почти?) Все браузеры теперь изменяют размер страницы в целом, а не только текста, предыдущие проблемы с pxvs. %vs.em s с точки зрения доступного изменения размера шрифта довольно спорные.

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

% приятно, потому что позволяет относительное изменение размера.

px приятно, потому что при его использовании довольно легко управлять ожиданиями.

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


Вводящий в заблуждение ответ, особенно для тех, кто вообще не разбирается в CSS. Игнорируя тот факт, что CSS определяет логические пиксели, что было ужасной идеей, основанной на несомненно поспешном решении учесть натиск мобильных устройств с поддержкой CSS десять лет назад, пиксели полностью находятся на усмотрении браузеров и пользователей в том, что касается размера шрифта по умолчанию. , по крайней мере. В дополнение к этому, теперь у нас есть совершенно разные соотношения сторон экрана (и не всегда устройства с экраном) и разрешения в диапазоне от 240p до 2400p. Использование пикселей в CSS без JavaScript почти бесполезно.
атп

@amn хорошо, заметьте, что этому ответу 8 лет. Это ДЛИННОЕ время в Интернете. Тем не менее, пиксели все еще в порядке, если не идеальны. Большинство (все?) Браузеры адекватно регулируют размер шрифта в пикселях на конкретном устройстве. Однако сегодня я обычно использую rem в качестве единицы измерения.
Д.А.

Может, мне чего-то не хватает, но какая польза от длины в пикселях? Почему они «хорошие» или «идеальные»? Versus em, например. Кроме того, я думаю, что ответы на SO должны быть вечными - в конце концов, это база знаний. Википедия программирования :) Поскольку Википедия обновляется, чтобы отражать факты, по моему скромному мнению, SO должен отвечать.
атп

@amn Я не сказал, что они идеальны или имеют какое-то реальное преимущество. Я как раз отвечал на вопрос ОП. Что касается стремления быть вневременным, то если вы можете предсказать будущее Интернета через 8 лет, вам будет больше сил! Но у меня нет времени постоянно обновлять здесь свои ответы за десятилетие. Надеюсь, люди знают достаточно, чтобы посмотреть на отметки времени в ответах и ​​принять это во внимание.
Д.А.

0

Что касается разницы между модулями css %и em.

Насколько я понимаю (по крайней мере, теоретически / концептуально, но, возможно, не так, как эти два модуля могут быть реализованы в браузерах), эти два модуля эквивалентны, т.е. если вы умножите свое emзначение на, 100а затем замените emна% ней должно быть то же самое?

Если между em и% действительно есть какая-то реальная разница, может ли кто-нибудь объяснить это (или дать ссылку на объяснение)?

(Я хотел добавить этот мой комментарий туда, где он должен быть, то есть с отступом чуть ниже ответа на, "Liam, answered Sep 25 '08 at 11:21"поскольку я также хочу знать, почему его ответ был отклонен, но я не мог понять, как разместить свой комментарий там, и поэтому должен был написать этот ответ "глобального потока")


-1

Как упоминает Галвэнг, px является наиболее надежным для веб-типографики, поскольку все остальное, что вы делаете на странице, в основном оформляется со ссылкой на монитор компьютера. Проблема с абсолютными размерами заключается в том, что некоторые браузеры (IE) не масштабируют пиксельные элементы на веб-странице, поэтому, когда вы пытаетесь увеличить / уменьшить масштаб, все регулируется, кроме этих элементов.

Я не знаю, правильно ли это обрабатывает IE8, но все остальные поставщики браузеров отлично справляются с пикселями, и это все еще меньшинство, когда пользователю нужно увеличивать / уменьшать текст (это текстовое поле на SO, возможно, является исключением). Если вы хотите по-настоящему испачкаться, вы всегда можете добавить функцию javascript для увеличения размера текста и предложить пользователю кнопку «маленький» / «большой».


1
IE7 отлично масштабирует значения пикселей, если вы используете масштабирование. В IE6 не было масштабирования, только размер текста. Масштабирование стало обязательным требованием из-за того, что дизайнеры использовали фиксированные масштабы пикселей, а не позволяли переформатировать страницу при изменении размера текста.
Майк Диммик,

Это все еще проблема с IE6, но, опять же, ВСЕ по-прежнему является проблемой с IE6. Хотя в прошлом я избегал пикселей из-за этого, концепция масштабирования веб-страницы в целом (по сравнению с просто текстом) стала стандартной, и я обнаружил, что использую px гораздо чаще.
Д.А.

-1

Библиотека пользовательского интерфейса Yahoo ( http://developer.yahoo.com/yui/ ) имеет хороший набор базовых классов css, используемых для "сброса" специфических настроек браузера, так что основа для отображения сайта одинакова для всех (поддерживается) браузеры.

В YUI предполагается использовать проценты.


Я использовал сброс YUI, но потом понял, что настройки размера текста в браузерах НЕ РАБОТАЮТ! Не вижу смысла использовать%, если у вас установлен пиксель для тела, поскольку это нарушает настройки размера текста.
Джейсон
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.