Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

'background-position' compression #36

Open
afelix opened this issue Sep 18, 2011 · 7 comments
Open

'background-position' compression #36

afelix opened this issue Sep 18, 2011 · 7 comments

Comments

@afelix
Copy link
Contributor

afelix commented Sep 18, 2011

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

@mishanga
Copy link

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

@afelix
Copy link
Contributor Author

afelix commented Sep 22, 2011

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

@mishanga
Copy link

Уже много лет повсеместно пишу 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 это тоже справедливо.

@afelix
Copy link
Contributor Author

afelix commented Sep 22, 2011

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

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

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

@mishanga
Copy link

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

@afelix
Copy link
Contributor Author

afelix commented Sep 23, 2011

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

@mishanga
Copy link

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

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

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants