能,但必须用transition控制filter属性本身;blur()值须从非零过渡到0px且单位为px,否则动画不触发;需启用硬件加速(如will-change: filter)、显式声明初始filter、保持函数顺序一致,并限制blur值在2–6px以兼顾Safari兼容与性能。
能,但必须用 transition 控制 filter 属性本身,而不是写 transition-filter(这个属性根本不存在);blur() 值从非零过渡到 0px 才能平滑变清晰,且单位必须是 px,否则动画不触发。
常见现象:鼠标移上去图片“啪”一下就清楚了,没有渐变;或者首次 hover 卡顿、边缘闪烁。根本原因不是 CSS 写错了,而是浏览器没对 filter 启用硬件加速,且 blur(0) 被当成“无滤镜”跳过插值计算。
transform: translateZ(0) 或 will-change: filter(后者更精准,但别滥用在父容器上)blur() 的单位只能是 px,写成 blur(4) 或 blur(4rem) 都会失效filter,得显式写 filter: blur(4px),而不是靠 hover 才加.img-hover { transition: filter 0.4s ease; },不能只写在 :hover 里iOS Safari 16.6 之前对 filter 的 transition 支持极差,常出现首帧白屏、跳变或卡顿;blur 值超过 8px 在中低端设备上 FPS 明显下降。
2px–6px 之间,blur(4px) 是兼顾效果与性能的常用值-webkit-filter,现代浏览器可省略(但留着更稳妥)scale() 和 blur() 触发多层重绘,容易加剧闪烁<img> 标签,确保其容器有明确宽高,不要依赖 object-fit: cover 动态缩放比如想同时过渡 grayscale() 和 blur(),但 hover 后颜色和模糊度不是同步变化,而是先后跳变——这是因为浏览器无法自动匹配不同函数的插值路径。
立即学习“前端免费学习笔记(深入)”;
filter: grayscale(0) blur(4px); → filter: grayscale(1) blur(0px);
brightness(1)、contrast(1) 也得写上,否则浏览器无法对齐插值维度drop-shadow(),它不支持过渡,混入后整个 filter 链可能退化为硬切transition: all 0.35s ease,并确保起始/结束态所有属性都定义完整最易被忽略的是:transition 必须带时长和缓动函数,transition: filter; 等于无效;blur 值为 0px 时仍需单位,否则 Safari 直接跳过过渡逻辑。