2013-07-24 3 views
3

IE9 + claims для поддержки ch CSS unit. По определению эта единица равна «Равно мере продвижения« глины »« 0 »(ZERO, U + 0030) текущего шрифта или, проще говоря, the width of the character box for the glyph for “0”. Эта интерпретация кажется правильной для Firefox 10+ и Chrome 27+: <div style="width: 10ch;"></div> и <div>0000000000</div> имеют точно такую ​​же ширину, если у них одинаковый шрифт того же размера. Но в IE9 + единица ch, кажется, означает нечто немного другое.CSS3 ch unit несовместим между IE9 + и другими браузерами

Вот скрипка демонстрирует эту проблему: http://jsfiddle.net/CNsPg/6/

Какова логика поведения IE с этим аппаратом? Или это просто ошибка? Возможно ли сделать IE обработкой ch единиц, как и в других браузерах (возможно, с некоторым IE-специфическим текстовым рендерингом «magic»)?

ответ

1

According to caniuse.com, IE интерпретирует 1ch как ширина 0 глифа, без окружающего пространства.Это делает 1ch короче в IE по сравнению с любым другим браузером.

2

Глядя на скрипку, это интересный случай различной интерпретации спецификации.

Спектр сам по себе несколько .... мм ... краткое; Я вижу место для обеих интерпретаций.

Спецификация говорит:

Блок ч
Равно авансового меру «0» (ноль, U + 0030) глифа нашли в шрифт, используемый для отображения его.

Так что 'ch' - это ширина «0». Вопрос, который не отвечает в спецификации, является ли это должно включать интервал вокруг символа:

  • Должен ли он быть в соответствии с «эм» единицы (что ширина «м», в том числе интервал шрифта)?

  • Или он должен соответствовать «ex», который является высотой символа «x» (без каких-либо промежутков, т.е. только фактический глиф)?

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

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

К счастью, «em» и «ex» доступны и согласованы, а также обеспечивают размер шрифта. Думаю, в сложившихся обстоятельствах лучший совет, который я могу дать, - это придерживаться их.

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

+5

CSS не определяет 'их', как "ширина 'м', в том числе интервал шрифта". Это традиционное определение набора. CSS определяет «em» как вычисленное значение «font-size» и т. Д. – BoltClock

+2

На мой взгляд, «предварительная мера» (предварительная ширина) является четко определенной [метрикой] (http://en.wikipedia.org/ wiki/Font # Metrics) шрифта, а также [x-height] (http://en.wikipedia.org/wiki/X-height). Предварительная ширина [кажется]] (http://scripts.sil.org/cms/scripts/page.php?item_id=IWS-Chapter08#937bae85) обязательная часть шрифта TTF. Я полагаю, не должно быть такой двусмысленности. –

+0

Хм, да, ты прав. что, вероятно, достаточно, чтобы прояснить это. : -/ – Spudley

2

Вы должны создать CSS, специфичный для IE, который отменяет все правила, включая ch единиц, и умножает их на 1.162 для моноширинного шрифта.

Это значение может измениться с другим шрифтом, поэтому вам может потребоваться рассчитать коэффициент, измеряя фактическую ширину в пикселях для 100x0 и div с шириной: 100ch.

Нормальный браузер (по умолчанию):

input[type="text"][size="10"] { width: 10ch } 

IE11:

input[type="text"][size="10"] { width: 11.62ch } 
+1

Я полагаю, что эта константа должна быть специфичной для шрифта? –

+0

Да. Это для моноширинного шрифта. Я пробовал с Arial, Comic Sans и соотношение не то же самое. – NicolasBernier

Смежные вопросы