Я пытаюсь применить одну маску к двум перекрывающимся <rect>
элементам SVG. Я создал упрощенный живой пример со следующим кодом:
<svg viewBox="0 0 100 100" style="background: #000">
<defs>
<!-- Define radial gradient -->
<radialGradient id="radialFill">
<stop stop-color="white" offset="0.8"/>
<stop stop-color="black" offset="1"/>
</radialGradient>
<!-- Define mask with gradient -->
<mask id="SVGMask" mask-type="luminance">
<circle fill="url(#radialFill)" cx="50" cy="50" r="50"/>
</mask>
</defs>
<!-- Use mask on group -->
<g id="combined" style="mask: url(#SVGMask);">
<rect id="rect" width="100" height="100" fill="#f90"/>
<rect id="rect" width="50" height="100" fill="#fff"/>
</g>
</svg>
<figcaption>Mask 2+ elements Safari bug</figcaption>
В приведенном выше коде у меня есть оранжевый <rect>
для цвета фона, белый <rect>
, занимающий половину viewBox, затем я оборачиваю их в <g>
и примените маску ко всей группе.
Эта настройка прекрасно работает как в Firefox, так и в Chrome, но не работает в Safari.Как вы можете видеть, оранжевый фон показывает сквозь белый, а затем исчезает.Похоже, что маска применяется отдельно к передним и задним каналам, а не один раз для всей группы.
Есть ли у кого-нибудь решение илиобойти эту ошибку?Это происходит как в OSX Safari, так и в iOS Safari.(Мой вариант использования более сложный, чем этот, но я создал этот упрощенный пример, чтобы продемонстрировать ошибку).