Яке значення одиниці css 'ex'?


87

(Не слід плутати з Xunit , популярною бібліотекою модульного тестування .Net.)

Сьогодні в нападі нудьги я почав перевіряти Gmails DOM (так, мені було дуже нудно).

Все виглядало досить просто, поки я не помітив цікаву специфікацію ширини певних елементів. Прославлені гугліти вказали ряд таблиць, використовуючи рідкісну одиницю "колишній".

width: 22ex;

Спочатку мене тупили ("що таке" колишній "?"), Потім це повернулося до мене: я, здається, пам'ятаю щось із років тому, коли вперше вивчав CSS. З специфікації CSS3 :

[ Колишня одиниця ] дорівнює використаній висоті x першого доступного шрифту . Висота x називається так, оскільки вона часто дорівнює висоті нижнього регістру "x". Однак "ex" визначено навіть для шрифтів, які не містять "x".

Ну і добре. Але я ніколи раніше не бачив, щоб він використовувався (і тим більше не використовував сам). Я використовую ems досить часто і ціную їх цінність, але чому "колишній"? Це здається набагато менш стандартним вимірюванням, ніж EM, і набагато менш корисним.

Однією з небагатьох сторінок, на якій я обговорював цю тему, є http://www.xs4all.nl/~sbpoley/webmatters/emex.html Стівена Полі . Стівен висловлює добрі думки, проте його обговорення видається мені безрезультатним.

Отже, моє запитання: яке значення одиниця "колишня" надає веб-дизайну?

(Це питання можна позначити як суб'єктивне, але я залишу це рішення більш досвідченим СО, ніж я.)

Відповіді:


124

Це корисно, коли ви хочете розмір чогось щодо висоти малих літер вашого тексту. Наприклад, уявіть, що працюєте над таким дизайном:

текст заміщення


У типографському вимірі дизайну висота літер має важливе просторове відношення до решти елементів. Рядки на вихідному зображенні вище призначені допомогти вказати висоту x тексту, але вони також показують, де були би орієнтири, коли б ви проектували навколо цього тексту.

Як зазначив Джонатан у коментарях, ex - це просто висотна версія em (width).


29
лише додати, це еквівалент висоти використання одиниці 'em' для ширини
Джонатан Фінгленд,

3
@Joel Яке співвідношення між шириною m та висотою x для даного шрифту? Незважаючи на те, що він виправлений, його потенційно може бути дуже важко обчислити, оскільки кожен шрифт має різне і довільне співвідношення між m та x. Отже, розробляючи елементи, які повинні бути відносно типу, замість того, щоб визначати співвідношення самостійно, ви можете покладатися на висоту x, щоб зберегти пропорції.
Рекс М

2
Інший досить езотеричний момент полягає в тому, що згідно з Mozilla Gecko може масштабувати предмети за допомогою exes трохи точніше, ніж ті, що використовують ems. За замовчуванням "нестильовий" розмір em становить 10,06667px, тоді як розмір ex - 6px. Це означає, що при масштабуванні ems Firefox повинен округляти часткові пікселі частіше, ніж при масштабуванні exes.
бенріфка,

1
Хоча загалом це не правильно, справедливо уявити, що 2ex має приблизно такий самий розмір, як 1em (хоча висота великої літери, як правило, буде дещо менше 1em). У специфікації CSS навіть зазначається, що "коли неможливо або непрактично визначити висоту x, слід приймати значення 0,5em".
natevw

20
@JonathanFingland @RexM В відміну від друку друкарні, в CSS, то emпристрій ніяк НЕ виміряти ширину - він вимірює висоту шрифту. 1 emє обчисленим font-sizeзначенням і font-sizeвказує “бажану висоту гліфів” . Тож обидва emі exвиміряйте зріст. ( chоднак, вимірює ширину.)
Рорі О'Кейн,

19

Щоб відповісти на запитання, один із варіантів - верхній та нижній індекси. Приклад:

sup {
    font-size: 75%;
    height: 0;
    line-height: 0;
    position: relative;
    vertical-align: baseline;
    bottom: 1ex;
}

1
Я не думаю, що це насправді допомагає пояснити, що таке "колишній".
сутінки-неактивні-

11
Питання: "Яке значення одиниця" колишня "надає веб-дизайну?". Не "що таке колишня одиниця?" Джоель дуже добре справляється із визначенням колишньої одиниці в оригінальному питанні. Я наводжу практичний приклад того, як ви можете використовувати його для розміщення верхнього індексу.
jbs

1
Хороший практичний приклад, який безпосередньо відповідає на питання. Молодці.
Василь Бурк

2

Тут слід також врахувати, як масштабується ваша сторінка, коли користувач збільшує або зменшує розмір шрифту (можливо, використовуючи ctrl + коліщатко миші (windows)).

Я використовував em з .. padding-left: 2 em; відступ праворуч: 2 ем;

та колишній із заповненням дна: 2 колишній; підкладка: 2 колишні;

Таким чином, використовуючи вертикальну одиницю виміру для властивості вертикального масштабування та горизонтальну одиницю виміру для властивості горизонтального масштабування.


5
І em, і ex є вертикальними одиницями, оскільки вони визначаються як висота верхнього регістру "M" та нижнього регістру "x" відповідно. Їх можна використовувати як для вертикальної, так і для горизонтальної довжини.
JacquesB

До цього chслід додати горизонтальну одиницю виміру ширини нульової цифри ("0").
Метт Ф.

1

Значення його в специфікації CSS, якщо це те, про що ви насправді питаєте, точно таке ж, як значення наявності одиниці em.

Це дозволяє встановити шрифти до відносних розмірів.

Ви не знаєте, який у мене розмір базового шрифту. Отже, однією вдалою стратегією веб-дизайну є встановлення розмірів шрифтів, які є відносними, а не абсолютними; еквівалент "подвоєння вашого звичайного розміру" або "трохи менше вашого звичайного розміру", а не фіксованого розміру, наприклад "десять пікселів".


Я з цим згоден. Але хіба спеціальних характеристик для цього недостатньо і надійніше?
Джоел

@JoelPotter так, але тільки для ширини; для висоти exздається еквівалентом.
ANeves вважає, що SE є злим

5
@ANeves Неправильно. У CSS em - це висота шрифту (приблизно), а не ширина . У друкарській типографії ідея ем виходила з ширини великої літери M. Але CSS вдосконалений em. Дивіться Вікіпедію .
Василь Бурк

2
Якщо вам потрібна ширина, використовуйте chодиницю, як зазначено в іншій відповіді.
Василь Бурк

1

Зверніть увагу, що такі терміни, як "одинарний / подвійний міжрядковий інтервал", насправді означають зміщення між двома сусідніми рядками, виміряне за допомогою em . Отже, "подвійний інтервал між рядками" означає, що кожен рядок має висоту 2 em .

Тому, якщо ви хочете вказати вертикальну відстань, пропорційну "лініям", використовуйте em. Використовуйте ex, лише якщо ви хочете дійсну висоту малих літер, яка, смію стверджувати, набагато рідше.

ОНОВЛЕННЯ: Веб-стандарт дозволяє браузеру використовувати 0.5em як ex або похідне від шрифту.

Однак неможливо надійно вбудувати будь-яку інформацію "x-height" у шрифт (OpenType або webfont).

Отже, перша можливість робить колишню одиницю зайвою, а другій не вистачає будь-яких надійних засобів. А той факт, що це можливо, робить його ще менш надійним.

Таким чином, я аргументую відсутність вартості колишньої одиниці.


Це питання спеціально задається його значенням, а не значенням.
Метт Ф.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.