如何在透明矩形 svg 上有阴影
How to have a drop shadow on a transparent rect svg
我想在透明的 SVG 元素上添加阴影。
我尝试过使用各种不同类型的过滤器,但都无济于事。 css3 svg 元素过滤器(filter: drop-shadow(0 -6mm 4mm rgb(160, 0, 210));
),新的阴影过滤器(<feDropShadow>
),旧过滤器:
<filter xmlns="http://www.w3.org/2000/svg" id="dropshadow" height="130%">
<feGaussianBlur in="SourceAlpha" stdDeviation="3"/>
<feOffset dx="2" dy="2" result="offsetblur"/>
<feComponentTransfer>
<feFuncA type="linear" slope="0.2"/>
</feComponentTransfer>
<feMerge>
<feMergeNode/>
<feMergeNode in="SourceGraphic"/>
</feMerge>
</filter>
这可以使用 css3 box-shadow 来实现
Codepen
我希望在透明元素上有一个阴影,但实际的透明元素会覆盖在阴影上(因此元素本身是透明的,但具有类似霓虹灯的外发光)
我希望能够驾驭:
- 模糊
- 传播
- 颜色
任何帮助将不胜感激:)
I made a codepen for you that may be helpfull
我自己玩过它,我认为你可以在这里用你想要的东西来工作。
这是 html:
<div id="background">
<div id="mybox">
<svg viewBox="0 0 142.71 92.903" enable-background="new 0 0 142.71 92.903" xml:space="preserve">
<path fill="none" stroke="#000000" stroke-width="3" stroke-miterlimit="10" d="M141.348,91.677H1.71v-90h139.638v58
c0,0,0,6.194,0,9S141.348,91.677,141.348,91.677z"/>
</svg>
</div>
</div>
和 css:
#mybox{
position: absolute;
top: 20%;
left: 40%;
}
svg{
box-shadow: 0 0 341px 71px rgb(137, 105, 148, 0.8);
width: 80%;
cursor: move;
}
#background {
margin-left: 10%;
max-width: 100%;
height: 600px;
background-image: url('https://images.unsplash.com/photo-1519681393784-d120267933ba?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1350&q=80');
background-repeat: no-repeat;
如果原始形状是完全透明的形状,则无法执行此操作 - 由于某些原因 - 但您可以从几乎完全透明的原始形状开始执行此操作,并最终得到一个被正常水滴包围的完全透明形状阴影。
使用 1% 的填充不透明度绘制形状。当您将它们拉入过滤器时,使用颜色矩阵将它们的 alpha 乘以 100 - 并将其用作阴影的基础。您最终不会在最终版本中使用原始的 1% 不透明度形状,因为如果您使用 "out" 运算符 - 这将丢弃与原始(已处理)形状重叠的任何内容。
svg {
background: #33D;
}
<svg width="500px" height="400px">
<defs>
<filter id="trans-shadow">
<feColorMatrix type="matrix" values="1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 100 0"
result="boostedInput"/>
<feGaussianBlur stdDeviation="5"/>
<feComposite operator="out" in2="boostedInput"/>
</filter>
</defs>
<circle filter="url(#trans-shadow)" x="100" y="100" r="050" cx="150" cy="150" fill="black" fill-opacity="0.01" />
</svg>
我假设这些形状并不总是带有阴影,因此您希望它们的非阴影版本尽可能透明。如果这些形状 从不 显示时没有阴影,那么您可以跳过一个步骤,最初只用黑色绘制这些形状,然后仍然使用 "out" 丢弃它们。像这样:
svg {
background: #33D;
}
<svg width="500px" height="400px">
<defs>
<filter id="trans-shadow">
<feGaussianBlur stdDeviation="5"/>
<feComposite operator="out" in2="SourceGraphic"/>
</filter>
</defs>
<circle filter="url(#trans-shadow)" x="100" y="100" r="050" cx="150" cy="150" fill="black" />
</svg>
我想在透明的 SVG 元素上添加阴影。
我尝试过使用各种不同类型的过滤器,但都无济于事。 css3 svg 元素过滤器(filter: drop-shadow(0 -6mm 4mm rgb(160, 0, 210));
),新的阴影过滤器(<feDropShadow>
),旧过滤器:
<filter xmlns="http://www.w3.org/2000/svg" id="dropshadow" height="130%">
<feGaussianBlur in="SourceAlpha" stdDeviation="3"/>
<feOffset dx="2" dy="2" result="offsetblur"/>
<feComponentTransfer>
<feFuncA type="linear" slope="0.2"/>
</feComponentTransfer>
<feMerge>
<feMergeNode/>
<feMergeNode in="SourceGraphic"/>
</feMerge>
</filter>
这可以使用 css3 box-shadow 来实现 Codepen
我希望在透明元素上有一个阴影,但实际的透明元素会覆盖在阴影上(因此元素本身是透明的,但具有类似霓虹灯的外发光)
我希望能够驾驭:
- 模糊
- 传播
- 颜色
任何帮助将不胜感激:)
I made a codepen for you that may be helpfull 我自己玩过它,我认为你可以在这里用你想要的东西来工作。 这是 html:
<div id="background">
<div id="mybox">
<svg viewBox="0 0 142.71 92.903" enable-background="new 0 0 142.71 92.903" xml:space="preserve">
<path fill="none" stroke="#000000" stroke-width="3" stroke-miterlimit="10" d="M141.348,91.677H1.71v-90h139.638v58
c0,0,0,6.194,0,9S141.348,91.677,141.348,91.677z"/>
</svg>
</div>
</div>
和 css:
#mybox{
position: absolute;
top: 20%;
left: 40%;
}
svg{
box-shadow: 0 0 341px 71px rgb(137, 105, 148, 0.8);
width: 80%;
cursor: move;
}
#background {
margin-left: 10%;
max-width: 100%;
height: 600px;
background-image: url('https://images.unsplash.com/photo-1519681393784-d120267933ba?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1350&q=80');
background-repeat: no-repeat;
如果原始形状是完全透明的形状,则无法执行此操作 - 由于某些原因 - 但您可以从几乎完全透明的原始形状开始执行此操作,并最终得到一个被正常水滴包围的完全透明形状阴影。
使用 1% 的填充不透明度绘制形状。当您将它们拉入过滤器时,使用颜色矩阵将它们的 alpha 乘以 100 - 并将其用作阴影的基础。您最终不会在最终版本中使用原始的 1% 不透明度形状,因为如果您使用 "out" 运算符 - 这将丢弃与原始(已处理)形状重叠的任何内容。
svg {
background: #33D;
}
<svg width="500px" height="400px">
<defs>
<filter id="trans-shadow">
<feColorMatrix type="matrix" values="1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 100 0"
result="boostedInput"/>
<feGaussianBlur stdDeviation="5"/>
<feComposite operator="out" in2="boostedInput"/>
</filter>
</defs>
<circle filter="url(#trans-shadow)" x="100" y="100" r="050" cx="150" cy="150" fill="black" fill-opacity="0.01" />
</svg>
我假设这些形状并不总是带有阴影,因此您希望它们的非阴影版本尽可能透明。如果这些形状 从不 显示时没有阴影,那么您可以跳过一个步骤,最初只用黑色绘制这些形状,然后仍然使用 "out" 丢弃它们。像这样:
svg {
background: #33D;
}
<svg width="500px" height="400px">
<defs>
<filter id="trans-shadow">
<feGaussianBlur stdDeviation="5"/>
<feComposite operator="out" in2="SourceGraphic"/>
</filter>
</defs>
<circle filter="url(#trans-shadow)" x="100" y="100" r="050" cx="150" cy="150" fill="black" />
</svg>