Я не слишком хорошо разбираюсь (пока?) в использовании SVG для Интернета. Что я знаю, так это то, что простые формы лучше, чем сложные пути, если это вообще возможно (из-за простых точек по сравнению с точками пути). Из-за этого я попытался воссоздать логотип, используя очень простые контуры (эллипсы и прямоугольники, с несколькими формами контуров — скорректированные простые формы — там, где это необходимо).
Используя простые формы и релевантность порядка объектов (сверху/снизу), я могу скрыть определенные области логотипа, не прибегая к использованию контуров. К сожалению, эта затемненная область может для определенных целей быть прозрачной.
Поэтому мне интересно, возможно ли создать SVG, который использует определенные пути (простых объектов), которые можно применять в качестве обтравочных путей через объявления CSS или просто сплошной цвет, в зависимости от?
Пример:
Здесь белый цвет, используемый для создания белков глаз и рта, возможно, должен быть прозрачным, обрезающим нижний желтый объект. В других случаях может потребоваться, чтобы эти объекты имели цветную заливку. В этом примере мне понадобятся два совершенно отдельных файла для решения проблемы, или это можно сделать с помощью одного файла? Если с одним файлом, мне придется вместо этого прибегать к использованию путей вместо простых фигур?
Изменить/обновить: более внимательно изучив решение, предоставленное Danielillo (и после тестирования свойства CSS clip-path), я обнаружил filter
элемент и параметры SVG. Фильтр feFlood должен предоставить возможности, о которых я изначально не знал, что я на самом деле искал.
Вот Codepen с тем же SVG в двух div:
Второй — тот же SVG с обтравочной маской, но с другой фигурой на фоне:
<!--THIS IS THE ADDED CIRCLE-->
<circle fill="red" cx="31.8" cy="31.8" r="31.6">
<!--END-->
БрендонКоз
пользователь120647
БрендонКоз
clip-path
это правило CSS, которое можно использовать для применения пользовательского окна просмотра к элементу. В SVG путь отсечения должен быть определен вне нормального потока определенных видимых путей SVG (элемент<clipPath>
внутри элемента SVG<defs>
). Источник: sarasoueidan.com/blog/css-svg-clipping Тем не менее, ваше решение фактически дало ответ, который я действительно хотел, не зная:filter
's feFlood; также определено в<def>
. Это должно дать мне все, что я хотел бы сделать. Спасибо! Я обновлю свой вопрос, чтобы уточнить, почему ваш ответ правильный. 👍БрендонКоз