Трябва да приложа маска към различни обекти.
Маската трябва да покрива целия обект (видимата част от него). Поставих маската на едно конкретно място, в горната част на страницата, промених maskContentUnits
на objectBoundingBox
, така че работи перфектно.
Но тогава се появи проблем.
Направих цигулка, за да илюстрирам проблема: http://jsfiddle.net/8qdt7vjr/1/
<body>
<svg width="0" height="0">
<defs>
<mask id="mask1" maskContentUnits="objectBoundingBox">
<ellipse cx=".5" cy=".5" rx=".5" ry=".5" fill="white" />
</mask>
</defs>
</svg>
<svg class="svg" width="200" height="150" overflow="visible">
<rect x="-50" y="-50" width="350" height="250" fill="none" stroke="green" stroke-width="2" />
<svg id="zzz" x="0" y="0" width="100%" height="100%" overflow="visible" mask="url(#mask1)">
<rect x="-50" y="-50" width="350" height="250" fill="blue" fill-opacity=".3" />
</svg>
<rect width="100%" height="100%" fill="red" fill-opacity=".1" stroke="red" stroke-width="1" />
</svg>
</body>
В тази цигулка искам да приложа маска към svg елемент с id="zzz"
. Но вътре в този елемент има елемент rect
, който увеличава ограничителната кутия на zzz. В цигулката е rect
, но в моя проект е image
таг. zzz има препълване, зададено на скрито (във цигулката го промених на видимо, така че е по-лесно да видите проблема), така че имам определена част от изображението, видима вътре в zzz.
Истинският проблем е, че вътрешното съдържание на zzz увеличава ограничителната кутия на zzz.
В цигулката искам маската на елипса да е вътре в червения правоъгълник (видим zzz's area), но вместо това е вътре в зелен правоъгълник (zzzограничаваща кутия).
Така че основният въпрос е: има ли начин да се постигне тази цел? Маската ще се използва от много елементи с различни размери и съдържание и не искам да я клонирам.
Има ли някакъв начин да направите това без маска за клониране вътре във всеки елемент?
Има ли някакъв начин да намалите ограничителната кутия до видима област?
Има ли някакъв начин да покажете част от изображение без разширяване на ограничителната рамка на родителя?< br> Има ли друг начин да направите това?