vector-effect
Свойство vector-effect CSS подавляет определённые эффекты преобразования в SVG, позволяя, например, дороге на карте сохранять свою ширину независимо от масштаба карты или ключевым элементам диаграммы сохранять своё положение и размер вне зависимости от других преобразований. Его можно использовать только с элементами SVG, которые принимают атрибут vector-effect. При использовании значение CSS переопределяет любые значения атрибута элемента vector-effect.
Синтаксис
/* Keywords */ vector-effect: none; vector-effect: non-scaling-stroke; vector-effect: non-scaling-size; vector-effect: non-rotation; vector-effect: fixed-position; /* Global values */ vector-effect: inherit; vector-effect: initial; vector-effect: revert; vector-effect: revert-layer; vector-effect: unset;
Значения
none-
К элементу не применяются векторные эффекты, то есть он будет полностью подвержен преобразованиям в обычном режиме.
non-scaling-stroke-
Ширина линии элемента, нарисованная в соответствии с определённой шириной, будет физически одинаковой, даже если размер элемента увеличился или уменьшился из-за преобразований, будь то самого элемента, или его координатной системы. Это справедливо, независимо от того, масштабируется ли элемент с помощью преобразований или путём физического изменения размера всего изображения.
-
non-scaling-sizeЭкспериментальная -
Элемент будет игнорировать эффекты любых преобразований масштабирования.
-
non-rotationЭкспериментальная -
Элемент будет игнорировать эффекты любых поворотных преобразований.
-
fixed-positionЭкспериментальная -
Элемент будет игнорировать эффекты любых преобразований переноса.
Формальный синтаксис
Примеры
Предотвращение масштабирования штриха SVG с помощью CSS
Здесь мы начинаем с изображения SVG размером 200x100, содержащего два прямоугольника внутри группы. Группа масштабируется и поворачивается. У второго из двух прямоугольников есть класс thinned.
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 100">
<g
transform="scale(2.3) rotate(23)"
transform-origin="100 50"
stroke-width="3"
stroke="orange"
fill="#DEF8">
<rect x=" 60" y="20" width="30" height="60" />
<rect x="110" y="20" width="30" height="60" class="thinned" />
</g>
</svg>
Для этого изображения SVG мы применяем width: 500px для увеличения его размера относительно размера по умолчанию и устанавливаем для класса <rect> свойство не-масштабирования штрихов.
svg {
width: 500px;
}
svg rect.thinned {
vector-effect: non-scaling-stroke;
}
В результате первый из двух прямоугольников имеет видимую ширину штриха приблизительно 17, в то время как у второго прямоугольника видимая ширина штриха остаётся 3, несмотря на то, что он был масштабирован так же, как и первый прямоугольник.
Переопределение значений масштабирования штриха SVG с помощью CSS
В этом случае мы начинаем с аналогичного изображения SVG, используемого в предыдущем примере. Здесь элемент <g> поворачивается, как и раньше, но к нему не применяется масштабирование. Элементы <rect> получают общую точку начала преобразований и имеют атрибут vector-effect SVG, установленный в значение none.
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 100">
<g
transform="rotate(23)"
transform-origin="100 50"
stroke-width="3"
stroke="orange"
fill="#DEF8">
<rect
x=" 60"
y="20"
width="30"
height="60"
transform-origin="100 50"
vector-effect="none" />
<rect
x="110"
y="20"
width="30"
height="60"
transform-origin="100 50"
vector-effect="none"
class="thinned" />
</g>
</svg>
Как и прежде, размер SVG увеличивается с помощью CSS. На этот раз масштабирование применяется непосредственно к элементам <rect> и второй прямоугольник настраивается так, чтобы его штрихи не масштабировались.
svg {
width: 500px;
}
svg rect {
transform: scale(2.3);
}
svg rect.thinned {
vector-effect: non-scaling-stroke;
}
Результат визуально идентичен результату предыдущего примера. Мы видим, что значение атрибута none переопределяется значением CSS non-scaling-stroke, и что векторные эффекты учитываются, даже если масштабирование было выполнено непосредственно на элементе <rect> , а не на родительском элементе <g>.
Спецификации
Совместимость с браузерами
| Рабочий стол | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на IOS | Samsung Internet | WebView Android | |
vector-effect |
≤80 | ≤80 | ≤72 | 67 | ≤13.1 | 80 | 79 | 57 | ≤13.4 | 13.0 | 80 |
См. также
stroke-
<basic-shape>тип данных - Атрибут SVG
vector-effect
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/CSS/vector-effect