CSS3实现模糊背景的三种效果

不开头了,直接进入主题。
普通背景模糊效果如下:
这里写图片描述

使用属性:

filter:(2px)

####普通背景模糊
为了美观不能使背景前的文字模糊,而filter属性会使这整个div的后代并且还会出现白边。也就是说无法达到这个效果。怎么办呢?我们可以使用伪元素,这样我们也顺便解决了白边的问题。

实现思路:
在父容器中设置背景,并且使用相对定位,方便伪元素重叠。而在:after中只需要继承背景,并且设置模糊,绝对定位覆盖父元素即可。这样父容器中的子元素便可不受模糊度影响。因为伪元素的模糊度不能被父元素的子代继承。
说了这么多,来点代码提提神。

简单的html布局:

<div class="bg">
   <div class="drag">like window</div>
</div>

css:

/*背景模糊*/
.bg{
    width:100%;
    height:100%;
    position: relative;
    background: url("../image/banner/banner.jpg") no-repeat fixed;
    padding:1px;
    box-sizing:border-box;
    z-index:1;
}
.bg:after{
    content: "";
    width:100%;
    height:100%;
    position: absolute;
    left:0;
    top:0;
    background: inherit;
    filter: blur(2px);
    z-index: 2;
}
.drag{
    position: absolute;
    left:50%;
    top:50%;
    transform: translate(-50%,-50%);
    width:200px;
    height:200px;
    text-align: center;

    z-index:11;
}

当然,看了上面的代码就能发现父容器下面的子代元素也是要使用绝对定位的,但是这个不会影响到后面的布局的,所以请放心使用(有问题可以找博主麻烦~)。要注意的地方是要使用z-index确定层级关系,必须确保子代元素(也就是这里的drag)是在最上层的。不然子代元素的文字是不会出现的。

上面的代码还有一个保证div居中的方法,细心的同学应该已经注意到了吧!不使用flex布局的情况下这样居中应该是比较简单的方法了。

那么这样写代码表现出来的效果是怎么样的呢?

这里写图片描述

####背景局部模糊
相比较上一个效果而言,背景局部模糊就比较简单了。这时父元素根本就不用设置伪元素为模糊了。直接类比上面的代码把子元素模糊掉,但是子元素的后代可能不能模糊了(这点要注意,解决办法就是上一个效果的描述那样)。
HTML布局稍微变了一下:

<div class="bg">
   <div class="drag">
        <div>like window</div>
   </div>
</div>

css代码如下:(大家注意对比)

/*背景局部模糊*/
.bg{
    width:100%;
    height:100%;
    background: url("../image/banner/banner.jpg") no-repeat fixed;
    padding:1px;
    box-sizing:border-box;
    z-index:1;
}
.drag{
    margin:100px auto;
    width:200px;
    height:200px;

    background: inherit;

    position: relative;
}
.drag >div{
    width:100%;
    height: 100%;
    text-align: center;
    line-height:200px;
    position: absolute;
    left:0;
    top:0;
    z-index: 11;
}
.drag:after{
    content: "";
    width:100%;
    height:100%;
    position: absolute;
    left:0;
    top:0;
    background: inherit;
    filter: blur(15px);/*为了模糊更明显,调高模糊度*/
    z-index: 2;
}

效果如下:
这里写图片描述

####背景局部清晰
背景局部清晰这个效果说简单也不简单,说难也不难。关键还是要应用好background:inherit属性。这里可不能使用transform让它垂直居中了,大家还是选择flex布局吧。如果这里再使用transform属性的话会让背景也偏移的。这样就没有局部清晰的效果了。
html布局不变,
注意看css的变化:

/*背景局部清晰*/
.bg{
    width:100%;
    height:100%;
    position: relative;
    background: url("../image/banner/banner.jpg") no-repeat fixed;
    padding:1px;
    box-sizing:border-box;
}
.bg:after{
    content: "";
    width:100%;
    height:100%;
    position: absolute;
    left:0;
    top:0;
    background: inherit;
    filter: blur(3px);
    z-index: 1;
}
.drag{
    position: absolute;
    left:40%;
    top:30%;
    /*transform: translate(-50%,-50%);*/
    width:200px;
    height:200px;
    text-align: center;

    background: inherit;
    z-index:11;

    box-shadow:  0 0 10px 6px rgba(0,0,0,.5);
}

效果展示:
这里写图片描述

在线演示

在线演示网站挂掉啦,服务器到期了– 2018年12月17日11:04:24

**在线求简历~ ** – 2021年03月21日 22:22:24
在这里插入图片描述

<think>好的,用户想用CSS实现背景模糊效果,特别是背景模糊,同时上面有其他内容。根据提供的引用资料,我需要整理几种方法,并确保回答结构清晰,符合用户的要求。 首先,用户提到的filter: blur()方法。引用1和2都提到使用filter属性,但要注意如果直接应用在背景元素上,上面的内容也会被模糊。这时候应该如何处理呢?可能需要将背景和内容分开,比如使用伪元素或者额外的层。引用4提到使用伪元素来解决白边问题,同时避免后代元素被模糊。 然后,backdrop-filter属性,引用3和4提到这个属性可以直接在元素后面区域添加模糊效果,而不影响元素本身的内容。这种方法更简单,但需要注意浏览器兼容性,可能需要添加前缀。 接下来,我需要分步骤说明每种方法,给出代码示例。例如,方法一使用filter,但需要处理父元素的overflow:hidden来消除白边,同时将内容层与背景层分开。方法二使用backdrop-filter,直接应用在需要模糊的元素上,但设置透明背景。方法三则是伪元素的方式,将背景和内容分离,避免影响文字。 还要注意用户可能遇到的问题,比如白边、内容模糊、兼容性等,需要给出解决方案。比如filter方法中的overflow:hidden,或者推荐使用backdrop-filter并提示兼容性情况。 最后,生成相关问题,可能涉及性能优化、其他滤镜效果、兼容性处理等,帮助用户进一步了解相关知识。</think>### 如何用 CSS 实现背景模糊效果实现 CSS 背景模糊效果主要有三种方法,分别适用于不同场景。以下是具体步骤和示例: --- #### 方法一:使用 `filter: blur()`(需处理白边问题) 1. **原理**:通过 CSS 的 `filter` 属性对背景元素添加模糊效果。 2. **注意事项**: - 直接应用 `filter: blur()` 会导致背景元素的内容(如文字)也被模糊。 - 模糊区域边缘可能产生白边,需通过父元素设置 `overflow: hidden` 解决[^2]。 3. **代码示例**: ```html <div class="container"> <div class="blur-background"></div> <div class="content">文字内容(不会被模糊)</div> </div> ``` ```css .container { position: relative; overflow: hidden; /* 解决白边问题 */ } .blur-background { filter: blur(10px); background-image: url("bg.jpg"); width: 100%; height: 100%; position: absolute; } .content { position: relative; /* 确保文字在模糊层上方 */ } ``` --- #### 方法二:使用 `backdrop-filter: blur()`(推荐) 1. **原理**:通过 `backdrop-filter` 直接对元素背后的区域进行模糊,不影响元素自身内容[^3]。 2. **优势**: - 无需分离背景和内容层,代码更简洁。 - 支持多层叠加模糊效果3. **代码示例**: ```css .blur-box { backdrop-filter: blur(10px); background: rgba(255, 255, 255, 0.3); /* 需设置透明度 */ padding: 20px; } ``` ```html <div class="blur-box">文字内容(不会被模糊)</div> ``` **注意**:需检查浏览器兼容性(Safari 需添加 `-webkit-` 前缀)。 --- #### 方法三:伪元素 + `filter`(兼容性更广) 1. **原理**:通过伪元素 `::before` 创建背景层并模糊,避免影响主内容[^4]。 2. **代码示例**: ```css .blur-card { position: relative; overflow: hidden; /* 隐藏伪元素的白边 */ } .blur-card::before { content: ""; position: absolute; top: 0; left: 0; width: 100%; height: 100%; background-image: url("bg.jpg"); filter: blur(10px); z-index: -1; /* 将背景置于主内容下方 */ } ``` --- ### 对比总结 | 方法 | 适用场景 | 兼容性 | |--------------------|---------------------------------|---------------------| | `filter` | 独立背景模糊,内容与背景分离 | 所有现代浏览器 | | `backdrop-filter` | 局部模糊(如导航栏、弹窗) | 需兼容 Safari 前缀 | | 伪元素 | 兼容旧版浏览器或复杂布局 | 广泛支持 | ---
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值