You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

堆叠使用backdrop-filter: blur()的Div在不同屏幕尺寸下出现间隙/伪影的问题解决咨询

堆叠使用backdrop-filter: blur()的Div在不同屏幕尺寸下出现间隙/伪影的问题解决咨询

大家好,我最近在实现一个由10个堆叠切片组成的玻璃态进度条,每个切片都单独设置了backdrop-filter: blur()效果。这个效果在桌面端的Chrome和Edge上表现完美,但在高DPR的移动设备屏幕上(比如iOS 17的Safari、Android 120的Chrome),切片之间会出现细细的未模糊线条,实在很影响整体效果。

效果对比

  • 预期效果:实现无缝的垂直模糊渐变,切片之间没有任何可见边界
  • 实际问题:在移动和平板视口下,切片之间出现水平方向的1像素缝隙/间隙

最小复现代码

HTML

<div class="glass-container" id="glass"></div>

CSS

body {
  background: url('https://picsum.photos/600/400?blur=1') no-repeat center center fixed;
  background-size: cover;
  display: flex;
  justify-content: center;
  align-items: center;
  height: 100vh;
  margin: 0;
}

.glass-container {
  position: relative;
  width: 280px;
  height: 60px;
  border-radius: 30px;
  overflow: hidden;
  backface-visibility: hidden;
}

.glass-slice {
  position: absolute;
  left: 0;
  width: 100%;
  background-color: rgba(102, 102, 102, 0.25);
  will-change: backdrop-filter;
}

JavaScript

const container = document.getElementById('glass');
const blurValues = [10, 9, 8, 7, 6, 5, 4, 3, 2, 1];
const sliceCount = blurValues.length;

blurValues.forEach((blur, i) => {
  const slice = document.createElement('div');
  slice.className = 'glass-slice';
  slice.style.top = `${(i / sliceCount) * 100}%`;
  slice.style.height = `${100 / sliceCount}%`;
  slice.style.backdropFilter = `blur(${blur}px)`;
  slice.style.webkitBackdropFilter = `blur(${blur}px)`;
  container.appendChild(slice);
});

我已经尝试过的方案

  • 切换使用vh、px、fr(网格布局)等单位设置切片高度,但缝隙问题依然存在
  • 让切片之间重叠1像素可以隐藏缝隙,但会导致边缘变柔和,这不符合设计师的要求

我的问题

请问有没有办法在不使用可见重叠的情况下,消除这些切片之间的缝隙?

环境信息

React 18、Android Chrome 120、iOS Safari 17、设备DPR为2–3

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.07 09:44:30