csso icon indicating copy to clipboard operation
csso copied to clipboard

'background-position' compression

Open afelix opened this issue 14 years ago • 7 comments

Для background-position со значениями вида right top (9 символов) возможно сжатие до 100% 0% (7). То же для остальных пар.

afelix avatar Sep 18 '11 15:09 afelix

Вместо 0% лучше использовать просто 0.

mishanga avatar Sep 22 '11 18:09 mishanga

Если теория и практика подтвердят неломаемость при таком сокращении, будет. В CSS иногда с этим 0%/0 кудрявые штуки вылезают.

afelix avatar Sep 22 '11 20:09 afelix

Уже много лет повсеместно пишу 0 вместо 0px и 0% — ни разу ни в одном браузере проблем не было. И даже в теории не может: ноль — он в любых единицах измерения ноль.

UPD: http://www.w3.org/TR/2011/REC-CSS2-20110607/syndata.html#value-def-length "The format of a length value (denoted by in this specification) is a (with or without a decimal point) immediately followed by a unit identifier (e.g., px, em, etc.). After a zero length, the unit identifier is optional."

Это относится к тем свойствам, которые могут принимать абсолютные значения. Например, для rgb и hsl это тоже справедливо.

mishanga avatar Sep 22 '11 20:09 mishanga

Сравни, пожалуйста, результат рендеринга этих классов:

.test1 { color: rgb(100%, 0%, 0) }
.test2 { color: rgb(100%, 0%, 0%) }

Вполне вероятно, я чего-то не понимаю, но у меня в нескольких браузерах результат отличается. test1 — чёрный цвет, test2 — красный цвет. Я говорил не только про length, но вообще про подход 0% —> 0.

afelix avatar Sep 22 '11 21:09 afelix

http://www.w3.org/TR/2011/REC-css3-color-20110607/#numerical Насколько я понял, test1 невалиден, т.к. по спецификации единицы измерения должны быть одинаковыми в пределах одного свойства. Получается, что rgb(100%, 0%, 0%) нужно заменять на rgb(255, 0, 0).

mishanga avatar Sep 23 '11 04:09 mishanga

Я бы сказал, что пока такое преобразование делать не нужно, т.к. если не проверять остальные значения (скажем, rgb(0%, 0%, 0%) не изменится в рендеринге), можно ненароком невалидный rgb превратить в валидный, что означает не минимизацию, но исправление CSS, чем CSSO не занимается. Но это можно оставить для будущего unsafe-режима.

afelix avatar Sep 23 '11 08:09 afelix

Насколько я понимаю, надо сделать проверку на совпадение единиц измерения у всех трёх параметров (это позволит избежать инверсии валидности) и, в случае идентичности, заменять проценты на соответствующие числа: 100% => 255, 0% => 0.

Не совсем понятно, как быть с процентами, которые пересчитываются в абсолютные значения дробно (например, 50% => 127,5). Видимо, в этом случае нужно просто округлять до ближайшего целого (наверняка, это зафиксировано в каком-нибудь стандарте).

Кстати, в процессе изучения вопроса стало понятно, что для hsl и hsla преобразования единиц измерения невозможны.

mishanga avatar Sep 23 '11 09:09 mishanga