Десятичные разряды в процентах CSS

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

Примечание Я не спрашиваю об известной подпрограмме. -проблема округления пикселей.

Причина, по которой я спрашиваю, заключается в том, что IE округляет процентные значения с плавающей запятой до 2 знаков после запятой, тогда как Webkit и Gecko допускают как минимум 3 или даже больше (я не проверял) .

Например:

li {
    width: 14.768%;
}

При проверке в Chrome Web Inspector или Firebug правильно показано, что <li> имеют ширину 14,768%. Однако в инструментах разработчика IE (режим IE9/8/7) они имеют ширину 14,76%. Это приводит к тому, что фактические значения на основе пикселей также полностью отсутствуют.

Может ли кто-нибудь пролить свет на это поведение или предоставить подходящий обходной путь? Я бы предпочел не прибегать к значениям на основе пикселей, если это возможно, поскольку содержимое должно быть плавной ширины.

Я знаю, что иметь дело с таким количеством знаков после запятой довольно сложно, но мне было бы очень интересно узнать, какой из этих браузеров является «правильным»?

ИЗМЕНИТЬ

Firefox похоже использует правильные процентные значения при отображении в инспекторе (не округленные до 2 знаков после запятой), но показывает то же поведение, что и IE, с точки зрения фактического размещения пикселей.


person chrisfrancis27    schedule 16.09.2012    source источник
comment
Зачем нужна трехзначная точность?   -  person Evan Mulawski    schedule 16.09.2012
comment
Я написал плагин для адаптивной карусели с плавной шириной. Ширина и смещения выполняются путем деления количества элементов карусели на общее количество и т. Д. К сожалению, это может привести к ширине 3 знака после запятой. :/   -  person chrisfrancis27    schedule 16.09.2012
comment
Если вам нужна 3-значная точность в CSS, вы делаете что-то не так.   -  person AntonNiklasson    schedule 26.10.2012
comment
@AntonNiklasson Хотя я согласен, меня все же интересуют какие-либо официальные спецификации точности с плавающей запятой в CSS. И я переработал плагин, чтобы использовать меньше клонирования DOM, что привело к меньшему количеству элементов и, следовательно, к точности до 3-х десятичных знаков! :)   -  person chrisfrancis27    schedule 26.10.2012
comment
Взгляните на эти ответы: stackoverflow.com/questions/4308989/   -  person AntonNiklasson    schedule 26.10.2012
comment
@AntonNiklasson Заявление о том, что кто-то делает что-то не так, бесполезно. Это хороший/интересный вопрос. Спустя годы я столкнулся с этим при редактировании таблицы данных с открытым исходным кодом, которая позволяет изменять ширину столбцов. С точностью до 2 знаков после запятой в движении чувствуется дрожь, с большей – плавность и плавность. Поэтому я ищу, есть ли причина, по которой он был установлен на круглую ширину с двумя знаками после запятой. Важно понимать, что такое спецификация, что разрешено и как она будет себя вести.   -  person patorjk    schedule 14.06.2020


Ответы (2)


Вероятно, есть много решений вашей проблемы, я бы предложил следующие:

  1. Округлите до 2 знаков после запятой самостоятельно для всех, кроме одного, чем уменьшите общую ширину для последнего.
  2. Используйте table или display: table, тогда браузер сам установит ширину.
person skobaljic    schedule 27.10.2012
comment
Сейчас кажется устаревшим - person Konrad Linkowski; 06.02.2020
comment
Правда, такой же, как мой компьютер :) - person skobaljic; 07.02.2020

Для тех, кто сталкивается с этим вопросом, в этой статье подробно рассказывается о том, что разные браузеры делают для процентов с десятичными точками: https://cruft.io/posts/percentage-calculations-in-ie/

Что касается того, какой браузер правильный, согласно этой статье:

Спецификация HTML5 не упоминает об усечении или округлении десятичных знаков. Пункт 11 имеет дело с десятичными знаками и предлагает продолжать цикл до тех пор, пока «позиция не окажется за концом ввода, а затем вернет значение как длину».

person patorjk    schedule 14.06.2020