火次果
火次果

暂无菜单项

首页/文章/技术文章/web前端/HTML5/
打开 MD 链接

图片阴影怎么写:box-shadow 与滤镜取舍

发布于 17小时前
2

图片加阴影有两条路径,选错的那条通常也能出效果,代价是边缘糊、或者被父容器裁掉。差别在于计算依据:一条看盒子,一条看像素。

使用笔记本电脑的场景,用于展示网页元素的阴影效果
矩形图片优先用盒模型阴影,按轮廓投影留给透明素材

两种做法的差异

写法 依据 适合对象 代价
box-shadow 元素的矩形盒边界 矩形图片、卡片、容器 低
filter: drop-shadow() 渲染结果的 Alpha 通道 透明 PNG、SVG、不规则图形 较高,易在动画中掉帧

img 属于替换元素,但仍然参与盒模型。矩形图片走 box-shadow 即可得到干净锐利的边;box-shadow 不知道内容形状,透明 PNG 的圆角与镂空地带不会出现内缩的阴影,这时才需要 filter。

四个参数

img {
  display: block;
  box-shadow: 2px 2px 6px rgba(0, 0, 0, .2);
}
  • 水平偏移 2px:正值向右;
  • 垂直偏移 2px:正值向下;
  • 模糊半径 6px:越大越散;
  • 颜色用半透明黑,避免纯黑造成的脏边。

第四个参数 spread 省略时为 0,向外扩就用正值。display: block 用于去掉行内元素底部的基线间隙。

三个常见失误

  1. 父容器 overflow: hidden 把外扩的阴影裁掉。给容器加内边距,或把阴影移到父层。
  2. 大面积高斯模糊配合动画。滚动或 hover 频繁重算模糊会掉帧,改用 opacity 过渡。
  3. 阴影颜色取全黑。改用 rgba 控制透明度,深色背景上对比更自然。

配合圆角

.thumb {
  border-radius: 10px;
  overflow: hidden;
}

.thumb img { box-shadow: none; }
.thumb { box-shadow: 0 4px 12px rgba(0, 0, 0, .18); }

圆角裁剪与阴影放在同一层处理,避免容器裁切把内层阴影切掉。

常见问题(FAQ)

什么时候必须用 filter: drop-shadow()?
图形带透明区域、需要按可见轮廓投影时。例如透明 PNG 的图标、带镂空的 SVG,此时 box-shadow 会沿着矩形边投影,形状对不上。
阴影被父容器切掉了怎么办?
出现频率最高的是父级 overflow: hidden。把阴影移到不裁剪的父层,或给容器补内边距留出投影空间。
box-shadow 的第四个参数是什么?
spread,取值范围可正可负,正值让阴影向外扩张,负值向内收缩。省略时按 0 处理。
hover 时放大阴影会不会卡?
大面积模糊的变化需要逐帧重算,容易掉帧。改为两层元素做 opacity 交叉淡入,视觉接近但成本更低。
为什么图片底部有一条缝?
img 默认为行内盒,底部会留出基线空间。设置 display: block 或 vertical-align: middle 消除该间隙。
支持作者
如果这篇内容对你有帮助,可以请作者喝杯咖啡
0 点赞
0 收藏
分享
0 讨论
反馈
0 / 600
细中粗
0 讨论
热门最新
总结
暂无总结
嗨,下午好!
所有的成功,都源自一个勇敢的开始
创作
社区
购物
会员
近期热门

暂无数据

火次果
火次果
首页
资迅中心
小店
AI导航
社区
所有的成功,都源自一个勇敢的开始
不辜负每一个勇敢的开始
关于FAQ协议
火次果 © 2026