【问题标题】:How to stop filter:blur() from overflowing如何阻止过滤器:模糊()溢出
【发布时间】:2018-12-02 19:31:11
【问题描述】:

我正在尝试在同一图像上设置一个居中的图像,但会模糊并拉伸以水平填充。当我应用 filter:blur() 时,背景图像“溢出”,因为它超过了原始图像的高度。

<div class="blurred">

</div>
<img src="https://upload.wikimedia.org/wikipedia/commons/thumb/5/58/Sunset_2007-1.jpg/1280px-Sunset_2007-1.jpg">

img{
  height:300px;
  margin:auto;
  position:relative;
  display:block;
}


.blurred{
  background-image:url('https://upload.wikimedia.org/wikipedia/commons/thumb/5/58/Sunset_2007-1.jpg/1280px-Sunset_2007-1.jpg');
  filter:blur(30px);
  width:100%;
  height: 300px;
  position: absolute;
}

这是小提琴:https://jsfiddle.net/gw9krd2n/

【问题讨论】:

    标签: css blur css-filters


    【解决方案1】:

    您需要从顶部添加底部减少过滤器的30px。我添加了一些 margin-top 以便更好地查看。

    img{
      height:300px;
      margin:20px auto;
      position:relative;
      display:block;
    }
    
    
    .blurred{
      background-image:url('https://upload.wikimedia.org/wikipedia/commons/thumb/5/58/Sunset_2007-1.jpg/1280px-Sunset_2007-1.jpg');
      filter:blur(30px);
      margin:50px auto;
      width:100%;
      height: calc(300px - 60px);
      position: absolute;
    }
    <div class="blurred">
    
    </div>
    <img src="https://upload.wikimedia.org/wikipedia/commons/thumb/5/58/Sunset_2007-1.jpg/1280px-Sunset_2007-1.jpg">

    你也可以使用伪元素来优化代码,你会有更好的控制。

    img {
      height: 300px;
      margin: auto;
      display: block;
    }
    
    .blurred {
      position: relative;
      margin:30px 0;
      z-index:0;
    }
    
    .blurred:before {
      content: "";
      position: absolute;
      z-index:-1;
      background-image: url('https://upload.wikimedia.org/wikipedia/commons/thumb/5/58/Sunset_2007-1.jpg/1280px-Sunset_2007-1.jpg');
      filter: blur(30px);
      top: 30px;
      bottom: 30px;
      width: 100%;
    }
    <div class="blurred">
      <img src="https://upload.wikimedia.org/wikipedia/commons/thumb/5/58/Sunset_2007-1.jpg/1280px-Sunset_2007-1.jpg">
    </div>

    您还可以引入 CSS 变量以获得更大的灵活性:

    img {
      height: 300px;
      margin: auto;
      display: block;
    }
    
    .blurred {
      position: relative;
      margin:30px 0;
      z-index:0;
    }
    
    .blurred:before {
      content: "";
      position: absolute;
      z-index:-1;
      background-image: url('https://upload.wikimedia.org/wikipedia/commons/thumb/5/58/Sunset_2007-1.jpg/1280px-Sunset_2007-1.jpg');
      filter: blur(var(--f,20px));
      top: var(--f,20px);
      bottom: var(--f,20px);
      width: 100%;
    }
    <div class="blurred" style="--f:30px">
      <img src="https://upload.wikimedia.org/wikipedia/commons/thumb/5/58/Sunset_2007-1.jpg/1280px-Sunset_2007-1.jpg">
    </div>
    <div class="blurred" style="--f:50px">
      <img src="https://upload.wikimedia.org/wikipedia/commons/thumb/5/58/Sunset_2007-1.jpg/1280px-Sunset_2007-1.jpg">
    </div>

    使用伪元素方法,您还可以选择简单地隐藏溢出:

    img {
      height: 300px;
      margin: auto;
      display: block;
    }
    
    .blurred {
      position: relative;
      margin:30px 0;
      z-index:0;
      overflow:hidden;
    }
    
    .blurred:before {
      content: "";
      position: absolute;
      z-index:-1;
      background-image: url('https://upload.wikimedia.org/wikipedia/commons/thumb/5/58/Sunset_2007-1.jpg/1280px-Sunset_2007-1.jpg');
      filter: blur(20px);
      top:0;
      bottom:0;
      width: 100%;
    }
    <div class="blurred" >
      <img src="https://upload.wikimedia.org/wikipedia/commons/thumb/5/58/Sunset_2007-1.jpg/1280px-Sunset_2007-1.jpg">
    </div>

    【讨论】:

      【解决方案2】:

      你可以这样做:

          img {
            position: relative;
            top:-5%; left:-5%; z-index: -1;
            width:110%; height:110%;
            filter: blur(20px);
          }
      
          .blurred {
            position: relative;
            width: 100%;
            height: 300px;
            overflow: hidden;
            background: transparent url('https://upload.wikimedia.org/wikipedia/commons/thumb/5/58/Sunset_2007-1.jpg/1280px-Sunset_2007-1.jpg') no-repeat 50% / auto 100%;
          }
      <div class="blurred">
        <img src="https://upload.wikimedia.org/wikipedia/commons/thumb/5/58/Sunset_2007-1.jpg/1280px-Sunset_2007-1.jpg">
      </div>

      JSFiddle is here

      【讨论】:

      • 运行 sn-p 整页
      • @DianaG,很乐意为您提供帮助!
      猜你喜欢
      • 2021-11-09
      • 2020-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-07
      • 2020-01-31
      • 2011-02-14
      • 1970-01-01
      相关资源
      最近更新 更多