#svg
Пробую сделать такой pattern, и непонятно откуда появляются вертикальные полоски, которых быть не должно. При этом сам элемент pattern'a если вывести (смотрите пример) никаких полосок нет. body { margin: 0; background: black; } .c1 { fill: #ffd77a; stroke: #ffd77a; } .c2 { fill: #ffed7a; stroke: #ffed7a; } .c3 { fill: #fbff7a; stroke: #fbff7a; } .c4 { fill: #e4ff7a; stroke: #e4ff7a; } .c5 { fill: #ceff7a; stroke: #ceff7a; } .c6 { fill: #b8ff7a; stroke: #b8ff7a; } .c7 { fill: #a2ff7a; stroke: #a2ff7a; } Прилагаю скриншот на случай если это глюк моего рендера (Yandex Browser) А вот если размер паттерна сделать другой то всё работает нормально body { background: black; margin: 0; } .c1 { fill: #ffd77a; stroke: #ffd77a; } .c2 { fill: #ffed7a; stroke: #ffed7a; } .c3 { fill: #fbff7a; stroke: #fbff7a; } .c4 { fill: #e4ff7a; stroke: #e4ff7a; } .c5 { fill: #ceff7a; stroke: #ceff7a; } .c6 { fill: #b8ff7a; stroke: #b8ff7a; } .c7 { fill: #a2ff7a; stroke: #a2ff7a; } Во втором примере размер pattern'a не 50, а 40. Вопрос в том, почему это так странно работает, и как правильно писать код чтобы таких артефактов не было. Как поправить данный пример я методом проб и ошибок понял, можно сделать stroke-width: 5px; и артефакты пропадают. Но мне не понятна логика их появления. На мой текущий уровень понимания я это понимаю так что при масштабировании какие-то величины делятся не нацело а результатом являются дробные величины которые при рендере вот так отображаются, поэтому для состыковки элементов нужно брать запас в пикселях, что бы покрыть неточности масштабирования, поворотов и переносов. И артефакт связан с внутренними особенностями алгоритма рендера.
Ответы
Ответ 1
Проведя ряд тестов понял откуда берутся полосы. При размерах родительского элемента которые делятся нацело с размером паттерна - всё хорошо. Когда деление рождает дробные числа получаются зазоры. Смысл в том что у меня в примере есть параллельные линии между элементами el1 и big1, при кратных размерах они рисуются вплотную, при дробных размерах появляется зазор. Вероятно это связано с округлениями и особенностями алгоритма рисований кривых. В данном случае это надо понимать как данность и особенность рендера SVG, которую надо учитывать. Вот пример для тестов. Верхние квадраты сделаны с размерами символа кратными разерам внутри символа. Нижние квадраты - некратные размеры. Как можно видеть в нижних квадратах появляется зазор. Специально что бы его было лучше видно добавил белые полосы, на границе легко отслеживается смена чёрного и белого. Привожу скриншот как это выглядит у меня на случай если у кого-то другой рендер.
Комментариев нет:
Отправить комментарий