Давайте начнем с упрощенной версии вашего SVG.Я просто собираюсь использовать прямоугольники в качестве замены для ваших двух фигур.
<svg width="300" height="300">
<text x="0" y="100">There is some sectret text hiding behind here!</text>
<rect id="shamrock" fill="gold" x="0" y="0" width="300" height="200"/>
<rect id="fleur-de-lis" x="50" y="50" width="200" height="250" fill="purple" opacity="0.5"/>
</svg>
Обратите внимание, что я спрятал некоторый текст за желтой формой, которая сейчас скрыта.Кроме того, вы можете видеть желтый прямоугольник через полупрозрачный фиолетовый прямоугольник.
Чтобы увидеть желтый прямоугольник, нам нужно вырезать в нем отверстие, которое имеет ту же форму, что и фиолетовый элемент.Мы можем сделать это используя маску.
<svg width="300" height="300">
<defs>
<mask id="fleur-de-lis-mask">
<rect width="100%" height="100%" fill="white"/> <!-- white means "keep these parts" -->
<rect x="50" y="50" width="200" height="250" fill="black"/> <!-- black represents the part that is the hole -->
</mask>
</defs>
<text x="0" y="100">There is some sectret text hiding behind here!</text>
<rect id="shamrock" fill="gold" x="0" y="0" width="300" height="200" mask="url(#fleur-de-lis-mask)"/>
</svg>
Обратите внимание, что я временно удалил фиолетовый прямоугольник, чтобы мы могли видеть, что происходит.
Если мы сейчас вернем его обратно, у нас будетконечный результат.
<svg width="300" height="300">
<defs>
<rect id="fleur-de-lis-shape" x="50" y="50" width="200" height="250"/>
<mask id="fleur-de-lis-mask">
<rect width="100%" height="100%" fill="white"/> <!-- white means "keep these parts" -->
<use xlink:href="#fleur-de-lis-shape" fill="black"/> <!-- black represents the part that is the hole -->
</mask>
</defs>
<text x="0" y="100">There is some sectret text hiding behind here!</text>
<rect id="shamrock" fill="gold" x="0" y="0" width="300" height="200" mask="url(#fleur-de-lis-mask)"/>
<use id="fleur-de-lis" xlink:href="#fleur-de-lis-shape" fill="purple" opacity="0.5"/>
</svg>
Обратите внимание, что нам нужно использовать фиолетовую фигуру дважды: один раз как сам по себе, и один раз в маске.Чтобы сделать файл меньше, мы можем определить форму один раз в разделе <defs>
, а затем использовать элемент <use>
для ссылки на него в обоих местах.
Это, вероятно, кажется немного ненужным только для прямоугольника, но если ваша фигура - сложный путь, это может быть отличной экономией места.