Safari (и Firefox) по-прежнему не поддерживает настройку CSS математических выражений , где допустимы значения, такие как x
и y
атрибуты координат .
console.log('check your browser console to see error messages');
<svg>
<svg x="calc(20 + 30%)">
<rect x="calc(30 + 20%)" y="0" width="50" height="50"/>
</svg>
</svg>
Поскольку элемент <svg>
, для которого вы устанавливаете атрибуты x
и y
, не является элементом Geometry, вы не сможете даже установите его x
через CSS (даже в Chrome):
.outer:hover > svg {
x: calc(20px + 30%); /* fails */
}
.outer:hover > rect {
x: calc(20px + 30%); /* works */
}
mouse over the <svg> to move it by CSS<br>
<svg class="outer">
<svg>
<rect x="0" y="0" width="50" height="50" fill="red"/>
</svg>
<rect x="0" y="100" width="50" height="50" fill="green"/>
</svg>
Таким образом, вместо установки этих атрибутов, вы можете перевести этот контент через CSS.
Хотя Safari не позволяет нам преобразовывать внутренние через CSS ... Итак, нам нужно изменить этот элемент на .
svg:hover > g {
transform: translateX( calc(20px + 30%) );
}
/* Safari is so buggy that we even need an explicit default value */
svg > g {
transform: translateX( 0 );
}
mouse over the <svg> to move it by CSS<br>
<svg>
<g>
<rect x="0" y="0" width="50" height="50" fill="red"/>
</g>
</svg>
Итак, в конце ваш компонент должен сгенерировать <g>
вместо <svg>
, и он должен установить свой встроенный style="transform: translateX( {{ x }} )"
, хотя я ' Я действительно не уверен в синтаксисе Angular.