Blur后出现白边是因为滤镜扩大渲染区域致边缘透出,首选父容器设overflow:hidden截断,次选scale放大加负margin补偿,内阴影仅适用于纯色背景应急。
CSS filter: blur() 实际绘制边界会随之扩大(通常向外延伸约 blur() 值的两倍),并越过原本的盒模型范围。若父容器没有设置 overflow: hidden,或者背景不连续,默认透明/白色底色便会暴露出来;视觉上虽然像“白边”,本质却是画布边缘透出。
overflow: hidden 最直接,但需要留意裁剪风险为模糊元素的直接父容器添加 overflow: hidden 属于最轻量的处理方式,可以直接截断溢出的像素:
.blur-container { overflow: hidden;}.blur-element { filter: blur(4px);}
overflow: hidden 不会生效(filter 改变的是渲染层,而不是盒模型)position: absolute 并且超出父级尺寸,就可能遭到意外裁剪transform: translateZ(0) 并触发硬件加速来缓解通过 transform: scale() 放大模糊内容,再用负 margin 将其拉回原位,使超出的部分自然被父容器覆盖:
.blur-element { filter: blur(4px); transform: scale(1.05); /* 放大5% */ margin: -2px; /* 约等于 blur 值 × 0.5 */}
scale 建议将数值控制在 1.03–1.08,过大会使文字/图标失真margin 具体取值没有严格公式,需要结合实际 blur 值微调:4px blur 通常 -1px~-3px 就够overflow,适用于必须保留绝对定位子元素的情况box-shadow: inset 可以利用深色或同色阴影覆盖边缘,但这种方式本质上只是“遮掩”,并非真正“修复”:
立即学习“前端免费学习笔记(深入)”;
.blur-element { filter: blur(4px); box-shadow: inset 0 0 12px 6px #fff; /* 白底用白阴影 */}
blur 值(比如 blur(4px) 搭配 12px 扩散)若要彻底解决,应从渲染边界着手:首先尝试 overflow: hidden,仍无效时再采用 scale + margin 补偿。内阴影只能作为应急措施,不宜设为默认方案。