SVG蒙版笔触颜色

时间:2017-04-26 09:56:52

标签: html css svg

我真的希望有人可以帮助我,因为我现在已经连续3天了。

我有一个带有半圆形的标题图像,使用SVG蒙版,这个半圆需要有一个彩色的笔触,但由于它是一个面具,它不会让我这样做。我已经尝试并搜索了所有内容,并使用了SVG使用标记:https://codepen.io/rewfergu/pen/oJCif 但是,我根本无法使用它。

这是我的SVG代码,包括白色透明笔画(据我所知):

<div id="myCarousel" class="carousel carousel-fade slide myCarousel-slide" style="height:auto; max-height:499px; overflow:hidden">
    <div class="carousel-inner" role="listbox">
        <div id="slide2" class="item active" data-navpos="" data-navposarrow="" data-center="1" data-maxheight="499" data-id="2" style="height:499px;"><img id="slideimg2" class="logofull img-responsive" src="http://placehold.it/1800x499.jpg"></div>
    </div>
</div>

<svg width="100%" height="100%">
  <defs>
    <style type="text/css"><![CDATA[
     circle {
        stroke: #942994;
        stroke-width: 5;
     }
    ]]></style>
     <mask id="mask" x="0" y="0" width="100%" height="100%">
       <rect x="0" y="0" width="100%" height="100%" fill="#fff"/>
       <circle id="c1" cx="50%" cy="105%" r="180" fill="#000"/>
     </mask>
  </defs>
  <rect x="0" y="0" width="100" height="50" mask="url(#mask)" fill-opacity="0.7"/>
</svg>

我的CSS,应用于我的标题图片(旋转木马宽度为100%,高度约为500px):

#myCarousel .item {
border-bottom: 5px solid #942994;
width: 100%;
height: 100%;
overflow-x: hidden;
overflow-y: hidden;
mask: url(#mask);
}

不幸的是我无法使用PNG,因为标题图片需要易于更改。

更新: 通过我的确切设置创建了一个新的小提琴:https://jsfiddle.net/oqfdfart/2/ 还有一些奇怪的行为:在Chrome,Edge和IE中,半圆圈在headerimage中根本没有出现。

更新: 我找到答案,跟着我的最新小提琴,我把SVG分开了,就像这样:

<svg width="100%" height="100%">
  <defs>
  <style type="text/css"><![CDATA[
   #inner {
   stroke: #942994;
   stroke-width: 5;
   fill-opacity: 0;
   z-index: 9999;
   }
  ]]></style>
   <mask id="mask" x="0" y="0" width="100%" height="100%">
     <rect x="0" y="0" width="100%" height="100%" fill="#fff"/>
     <circle id="c1" cx="50%" cy="105%" r="180" fill="#000"/>
   </mask>
  </defs>
  <rect x="0" y="0" width="100" height="50" mask="url(#mask)" fill-opacity="0.7"/>
</svg>
<svg id="innercircle" width="100%" height="100%" x="0" y="0">
  <circle id="inner" x="0" y="0" cx="50%" cy="105%" r="181" fill="#fff" />
</svg>

并添加了以下CSS:

#headeroverlay {
width: 100%;
position: absolute;
top:0;
background: rgba(255,255,255,0);
height: 499px;
z-index: -1;
}

#innercircle {
position: absolute;
top: 0;
left: 0;
}

首先,我在我的headerimage之上有一个非常黑的叠加层,但这是通过给#headeroverlay的z-index -1来解决的。 也许这个解决方案不是那么漂亮,因为我必须为我的标题定义一个固定的高度,但至少对于这个项目来说没问题。 如果有人有更好的解决方案我很好奇:)

此外,我仍然坚持使用Chrome,Edge和IE,而不是完全渲染我的SVG。

1 个答案:

答案 0 :(得分:0)

蒙版仅影响应用元素的半透明效果。

如果要用颜色勾勒出孔的轮廓,那么您需要创建一个与孔相同形状的元素,然后将其绘制在蒙版元素的顶部。