2017-04-02 54 views
1

我想创建一个过滤器,当应用于html元素时,将应用渐变到整个元素。 CSS渐变只适用于背景,所以它不是我想要的。 我想要的是说我的元素包含一个三角形和一个圆,我想对我的元素应用一个过滤器,并且三角形和圆会对它们应用一个渐变。如何使用svg过滤器应用渐变

这是我到目前为止有:

.my-element{ 
 
    filter: url(svg.svg#filter); 
 
}
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> 
 
     <defs> 
 
     <linearGradient id="lightGradient" gradientTransform="rotate(-5)"> 
 
      <stop stop-color="white" stop-opacity="0.4" offset="0%"/> 
 
      <stop stop-color="white" stop-opacity="0.5" offset="5%"/> 
 
      <stop stop-color="black" stop-opacity="0.2" offset="6%"/> 
 
      <stop stop-color="black" stop-opacity="0.3" offset="19%"/> 
 
      <stop stop-color="black" stop-opacity="0.2" offset="12%"/> 
 
      <stop stop-color="white" stop-opacity="0.8" offset="13%"/> 
 
      <stop stop-color="white" stop-opacity="0.9" offset="15%"/> 
 
      <stop stop-color="white" stop-opacity="0" offset="15%"/> 
 
      <stop stop-color="white" stop-opacity="0" offset="16%"/> 
 
      <stop stop-color="white" stop-opacity="0.8" offset="16%"/> 
 
      <stop stop-color="white" stop-opacity="0.9" offset="18%"/> 
 
      <stop stop-color="white" stop-opacity="0" offset="18%"/> 
 
      <stop stop-color="white" stop-opacity="0" offset="20%"/> 
 
      <stop stop-color="white" stop-opacity="1" offset="20%"/> 
 
      <stop stop-color="white" stop-opacity="1" offset="25%"/> 
 
     </linearGradient> 
 

 
     <rect id="recGradient" x="0" y="0" width="100%" height="100%" fill="url(#lightGradient)"/> 
 

 
     <filter id="filter" primitiveUnits="objectBoundingBox"> 
 
      <feImage x="0" y="0" width="100%" height="100%" preserveAspectRatio="none" xlink:href="#recGradient"/> 
 

 
      <feComposite operator="in" in="SourceGraphic"/> 
 
     </filter> 
 
     </defs> 
 
    </svg>

编辑:与上面的代码元素只是成为在Firefox中不可见的,在铬似乎工作。

所以,显然我做错了。我不知道如何创建svg过滤器,所以任何帮助,将不胜感激。

+0

尝试创建一个矩形一个渐变,然后指向一个feImage滤镜的矩形。 –

+0

@robert你好,你能告诉我一个示例代码?我尝试添加'',但它给出了解析错误:前缀没有绑定到命名空间 – BigName

+0

@RobertLongson好的我添加了xmlns:xlink =“http://www.w3.org/1999/xlink“,现在它解析,但我没有得到我想要的结果。我将编辑帖子以显示我所做的。 – BigName

回答

1

这就是你如何构建一个跨浏览器的过滤器,它可以做你想要的。因为您要在DataURI中应用渐变定义矩形,然后使用feImage将其拖动到过滤器中,然后在CSS过滤器中使用SVG过滤器陷门将其应用于HTML内容,所以尺寸非常棘手。但它确实有效。 (顺便说一句 - 目前尚不清楚你是否要保留原文的颜色,只是应用不透明度渐变,或者是否想用黑/白渐变来替代原始颜色。改变“IN2”到“中”在feComposite,这是否支配你申请的sourcegraphic的不透明度的渐变或反之亦然)。

div { 
 
    filter: url(#myGradient); 
 
}
<svg> 
 
    <defs> 
 
<filter id="myGradient" primitiveUnits="objectBoundingBox"> 
 
     <feImage x="0%" y="0%" width="100%" height="100%" preserveAspectRatio="none" xlink:href="data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%22200px%22%20height%3D%22200px%22%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3ClinearGradient%20id%3D'lightGradient'%20gradientTransform%3D'rotate(-5)'%3E%3Cstop%20stop-color%3D'white'%20stop-opacity%3D'0.4'%20offset%3D'0%25'%2F%3E%3Cstop%20stop-color%3D'white'%20stop-opacity%3D'0.5'%20offset%3D'5%25'%2F%3E%3Cstop%20stop-color%3D'black'%20stop-opacity%3D'0.2'%20offset%3D'6%25'%2F%3E%3Cstop%20stop-color%3D'black'%20stop-opacity%3D'0.3'%20offset%3D'19%25'%2F%3E%3Cstop%20stop-color%3D'black'%20stop-opacity%3D'0.2'%20offset%3D'12%25'%2F%3E%3Cstop%20stop-color%3D'white'%20stop-opacity%3D'0.8'%20offset%3D'13%25'%2F%3E%3Cstop%20stop-color%3D'white'%20stop-opacity%3D'0.9'%20offset%3D'15%25'%2F%3E%3Cstop%20stop-color%3D'white'%20stop-opacity%3D'0'%20offset%3D'15%25'%2F%3E%3Cstop%20stop-color%3D'white'%20stop-opacity%3D'0'%20offset%3D'16%25'%2F%3E%3Cstop%20stop-color%3D'white'%20stop-opacity%3D'0.8'%20offset%3D'16%25'%2F%3E%3Cstop%20stop-color%3D'white'%20stop-opacity%3D'0.9'%20offset%3D'18%25'%2F%3E%3Cstop%20stop-color%3D'white'%20stop-opacity%3D'0'%20offset%3D'18%25'%2F%3E%3Cstop%20stop-color%3D'white'%20stop-opacity%3D'0'%20offset%3D'20%25'%2F%3E%3Cstop%20stop-color%3D'white'%20stop-opacity%3D'1'%20offset%3D'20%25'%2F%3E%3Cstop%20stop-color%3D'white'%20stop-opacity%3D'1'%20offset%3D'25%25'%2F%3E%3C%2FlinearGradient%3E%3C%2Fdefs%3E%0A%20%20%3Crect%20id%3D'recGradient'%20x%3D'0%25'%20y%3D'0%25'%20width%3D'100%25'%20height%3D'100%25'%20fill%3D'url(%23lightGradient)'%2F%3E%3C%2Fsvg%3E"/> 
 
    <feComposite operator="in" in2="SourceGraphic"/> 
 
</filter> 
 
    </defs> 
 
</svg> 
 

 

 

 

 
<div> 
 
    Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text Imagine a very large piece of text 
 
</div>

+0

嗨,我使用的是Firefox,并且在运行代码段时看不到任何东西... – BigName

+0

uuuh。有些东西对我的数据URI很敏感,让我调试 –

+0

对不起 - firefox想要URL编码的UTF-8 - 应该知道这一点。更新的示例 - 现在可以运行 –