Что вы делаете, когда блоки не сходятся при относительных размерах?

Если размеры относительные и используется transform, то мы можем получить несовпадение размеров элементов.

jsfiddle.net/opbfzkun - в данном примере используется transform по hover'у, размеры родительского блока выставлены в vw/vh, дочерние - в %.

Иногда я могу получить вот такое:
91a4c571164a46e588da97688889febd.png
Или такое:
12b44dfabebe4b7e9b41ae6e3c6193ca.png
А вдруг это из-за vw/vh? Нет. jsfiddle.net/x7ztp5vd - размеры родительского блока в px, но:
675350cb71ea4418bb71c822225ed9d8.png
А если выставить более приятные размеры родительского блока - jsfiddle.net/r3nu9hbb? Да, конкретно у меня стало все хорошо:c046a83513ac45d187e5042e9a00b0a9.png
Скрины сделаны в Chromium при разрешении 1920x1080 точек. Подобное было замечено так или иначе во всех популярных браузерах свежих версий (Chrome/Chromium, Firefox, Safari, Opera). В IE10 у себя под виртуалкой повторить не смог на примерах выше, однако не факт, что там все хорошо. Это довольно сложно повторить, поэтому в примерах надо поиграться, не при всех значениях размеров это проявляется.

В примерах есть класс .t, который можно добавить к .item: возможно, транзишны усугубят эту "фичу".

Возможно, данная проблема проявляется также не только с transforms, а с любыми другими свойствами. Лет 7 назад это было актуально, но сейчас браузеры округляют пиксели очень интеллектуально, и сделать косяк в простом примере не так-то просто. Мне кажется, что я встречался с ними на сайтах, где было много SVG, анимаций (не transform), но не могу сходу привести простой и показательный пример, очищенный от всего лишнего.

Особенно такие пиксельные проблемы чувствуются на сайтах, которые супер-адаптивные или используют техники, которые заставляют выставлять абсолютно все размеры в rem/em/%. Об агрессивном использовании такого подхода я уже писал однажды (если решите читать, обязательно смотрите комменты), где упомянул на всякий случай про возможные проблемы с округлением размеров.

И у меня есть несколько вопросов:
  1. Повторяется ли баг с относительными размерами и transforms, точно ли оно мне не кажется? Не допускаю ли я очевидную ошибку?
  2. Видели ли вы подобные проблемы? Может, оно было в сложных интерфейсах и не с transform'ами? Особенно интересуют реальные примеры веб-приложений/сайтов.
  3. Как можно решить это, но не переводя размеры в px и не округляя их?

Было бы интересно узнать про то, как браузеры занимаются округлением размеров вообще, возможно, кто-то заглядывал в исходники или знает крутые статьи?
  • Вопрос задан
  • 479 просмотров
Пригласить эксперта
Ответы на вопрос 1
voidnugget
@voidnugget
Программист-прагматик
Я сам хочу разобраться с проблемой отсутствия нормальных полифилов для относительных величин, с учётом изменения размеров и переопределением пиксельной сетки.

Вот тут достачно порезать тостер jsfiddle.net/x7ztp5vd
#toster {
width: 293px;
height: 301px; -> 300px;
}

Так как у нас берётся 25% то при масштабировании получается 1/4 пикселя которая округляется в меньшую сторону и даёт "пробел".

Проблема в подборе размеров для элементов, что бы при округлении оно всё хорошо влазило в пиксельную сетку браузера и не давало подобных артефактов. Этим грешны все существующие относительные величины в вэбките :(

p.s. если будет желание заняться разработкой полифила - пишите в скайп.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы