【问题标题】:svg filter shadow path repairsvg滤镜阴影路径修复
【发布时间】:2019-04-26 03:39:53
【问题描述】:

如何修复阴影之间的间隙?我希望阴影是连续的,而不是断断续续的。阴影应该在一条黑线上,没有任何空格

这是我的例子:

.wave-container {
    position: absolute;
    width: 100%;
    height: 100%;
    color: #fff;
    padding: 8px;
    padding-bottom: 50px;
    display: flex;
    flex-direction: column;
    justify-content: center;
    text-align: center;
    overflow: hidden;
    background-color: #ccc;
}
.wave-container .wave {
    position: absolute;
    right: 0;
    background-size: 160px 50px;
    background-image: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='60' height='10' fill='%23fff' viewBox='0 0 60 10' version='1.1'><defs><filter id='shadow' x='-10' y='-10' width='15' height='15'><feOffset result='offOut' in='SourceAlpha' dx='0' dy='-1'></feOffset><feGaussianBlur result='blurOut' in='offOut' stdDeviation='1'></feGaussianBlur><feBlend in='SourceGraphic' in2='blurOut' mode='normal'></feBlend>  </filter></defs><path d='M0,5 C25,0 35,10 60,5 v5 H0' filter='url(%23shadow)'/></svg>");
    height: 50px;
    left: -160px;
    
}
.wave-container .wave.w1 {
    bottom: 0;
}
.wave-container .wave.w2 {
    top: 0;
}
<div class="wave-container">
        <div class="wave w1"></div>
        <div class="wave w2"></div>
    </div>

【问题讨论】:

  • 你可以通过你的阴影半径来延长它,然后修剪它。与您在 any 可视化编辑器中所做的非常相似。另请注意,您的元素 needs 具有以圆形像素表示的宽度。否则,由于像素抗锯齿,您将在连接两个部分时看到更白或更暗的线条。
  • 不知道你的想法,应该修改什么?

标签: css svg svg-filters


【解决方案1】:

您看到的不连续性是阴影在到达形状边缘时逐渐消失。

不要在 SVG 的边缘准确地结束路径,而是尝试将形状从左右边缘延伸一点。在下面的示例中,我使用五个单位线段在每一侧将形状扩展得更宽。

.wave-container {
    position: absolute;
    width: 100%;
    height: 100%;
    color: #fff;
    padding: 8px;
    padding-bottom: 50px;
    display: flex;
    flex-direction: column;
    justify-content: center;
    text-align: center;
    overflow: hidden;
    background-color: #ccc;
}
.wave-container .wave {
    position: absolute;
    right: 0;
    background-size: 160px 50px;
    background-image: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='60' height='10' fill='%23fff' viewBox='0 0 60 10' version='1.1'><defs><filter id='shadow' x='-10' y='-10' width='15' height='15'><feOffset result='offOut' in='SourceAlpha' dx='0' dy='-1'></feOffset><feGaussianBlur result='blurOut' in='offOut' stdDeviation='1'></feGaussianBlur><feBlend in='SourceGraphic' in2='blurOut' mode='normal'></feBlend>  </filter></defs><path d='M-5,5 L0,5 C25,0 35,10 60,5 H 65 v5 H-5' filter='url(%23shadow)'/></svg>");
    height: 50px;
    left: -160px;
    
}
.wave-container .wave.w1 {
    bottom: 0;
}
.wave-container .wave.w2 {
    top: 0;
}
<div class="wave-container">
        <div class="wave w1"></div>
        <div class="wave w2"></div>
    </div>

【讨论】:

    【解决方案2】:

    一个想法是保持 SVG 简单并应用 drop-shadow 过滤器

    .wave-container {
      position: absolute;
      width: 100%;
      height: 100%;
      color: #fff;
      padding: 8px;
      padding-bottom: 50px;
      display: flex;
      flex-direction: column;
      justify-content: center;
      text-align: center;
      overflow: hidden;
      background-color: #ccc;
    }
    
    .wave-container .wave {
      position: absolute;
      right: 0;
      background-size: 160px 50px;
      background-image: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='60' height='10' viewbox='0 0 60 10' version='1.1'><path fill='white' d='M0,5 C25,0 35,10 60,5 v5 H0' /></svg>");
      height: 50px;
      left: -160px;
      filter:drop-shadow(0 -4px 3px #000);
    }
    
    .wave-container .wave.w1 {
      bottom: 0;
    }
    
    .wave-container .wave.w2 {
      top: 0;
    }
    <div class="wave-container">
      <div class="wave w1"></div>
      <div class="wave w2"></div>
    </div>

    【讨论】:

    • IE 不支持投影,但我想在那里看看?我正在编码 svg,然后它也适用于 IE
    • @JanuszO 这是一个替代方案,因为实际上我不知道如何纠正 SVG,但请稍等,您可能会得到 SVG 解决方案
    猜你喜欢
    • 1970-01-01
    • 2015-11-29
    • 1970-01-01
    • 1970-01-01
    • 2017-09-19
    • 1970-01-01
    • 2012-12-03
    • 2014-08-16
    • 2015-05-02
    相关资源
    最近更新 更多