text-shadow仅作用于文字内容,box-shadow才用于整个元素阴影;前者语法无spread-radius且不支持内阴影,后者可控制扩张、内陷及多层叠加,是UI阴影首选。
很多人误以为 text-shadow 可以让按钮、卡片或 div 块级元素带阴影,其实它只影响元素内纯文本内容的渲染。哪怕你给一个 hello 加了 text-shadow,阴影也只会贴着 “hello” 这几个字边缘出现,不会延伸到背景、边框或空白区域。
常见错误现象:
– 给按钮加了 text-shadow 却发现点击区域没阴影感
– 用 text-shadow 模拟卡片浮起效果,结果阴影被父容器裁剪或完全不可见
text-shadow 语法是 text-shadow: h-offset v-offset blur-radius color,不支持扩展半径、内阴影、多层叠加写法(CSS4 才支持多层,但兼容性差)transform 或 filter: drop-shadow() 影响,是独立的渲染层box-shadow 作用对象是元素的 border box(含 border,不含 margin),所以能真实模拟“浮起”“凹陷”“卡片投影”这类 UI 效果。它才是做 UI 阴影的主力。
使用场景:
– 卡片悬浮时加深阴影
– 输入框聚焦态添加柔和外扩阴影
– 按钮按下时切换为 inset 内阴影模拟按压感
box-shadow: h-offset v-offset blur-radius spread-radius color,其中 spread-radius 是 text-shadow 没有的关键参数,控制阴影大小扩张inset 关键字就能实现内阴影,比如 box-shadow: inset 0 2px 4px rgba(0,0,0,0.1)
box-shadow: 0 4px 12px rgba(0,0,0,0.15), inset 0 -2px 4px rgba(255,255,255,0.8)
box-shadow 不会触发重排(reflow),但大量使用模糊大值(如 blur-radius > 30px)在低端设备上可能影响绘制帧率曾见过用 8 层 text-shadow 模拟毛玻璃卡片阴影的写法,虽然视觉上有点像,但问题一堆:文字必须存在、换行后阴影错位、无法响应鼠标事件区域变化、无障碍阅读器识别混乱。
真正该选谁,看这个判断逻辑:
box-shadow
text-shadow
box-shadow 会随 transform 自动适配;text-shadow 则始终相对于文字基线固定filter: drop-shadow() 看似万能——它基于元素 Alpha 通道生成阴影,能绕过 border-radius 裁剪、支持不规则图形(比如 SVG、PNG 透明图),但它不是盒模型属性,行为更接近图像滤镜。
容易踩的坑:
overflow: hidden,阴影照样被裁掉(和 box-shadow 一样)inset,也不能设 spread-radius
transform 元素的阴影位置计算有偏差/* 推荐仅用于特殊场景,例如给带圆角的图片加自然阴影 */
img.rounded {
border-radius: 12px;
filter: drop-shadow(0 4px 12px rgba(0,0,0,0.15));
}最常被忽略的一点:阴影的视觉层级由堆叠上下文决定,而不是单纯靠 z-index。哪怕你给子元素写了很大的 box-shadow,如果父容器建立了新层叠上下文(比如设置了 opacity 或 will-change: transform),阴影也会被截断在父容器边界内。
# css
# css3
# go
# svg
# 安卓
# safari
# 区别
# 硬件加速
# overflow
# Filter
# 堆
# 对象
# 事件
# margin
# border
# transform
# 鼠标事件
# webview
# ui
# 浮起
# 不支持
# 你给
# 滤镜
# 也会
# 鼠标
# 就能
# 多个
# 才是
# 见过
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
网络优化76771 】
【
技术知识130152 】
【
IDC云计算60162 】
【
营销推广131313 】
【
AI优化88182 】
【
百度推广37138 】
【
网站推荐60173 】
【
精选阅读31334 】
相关推荐:
php控制舵机角度怎么调_php发送pwm信号控制舵机转动【解答】
Laravel 查询 JSON 列:高效筛选包含数组中任意值的记录
如何在 Python 测试中动态配置 @backoff 装饰器的重试次数
如何使用Golang优化模块引入路径_Golanggo mod tidy清理与优化方法
php在Linux怎么部署_LNMP环境搭建PHP服务的详细指南【指南】
Win11搜索栏无法输入_解决Win11开始菜单搜索没反应问题【技巧】
Win11怎么设置虚拟键盘_打开Win11屏幕键盘操作指南【技巧】
如何提升Golang程序I/O性能_Golang I/O密集型程序优化示例
Win10电脑怎么设置IP地址_Windows10网络属性固定IP配置
Python对象比较与排序_集合使用说明【指导】
如何使用Golang recover捕获panic_防止程序崩溃并处理异常
如何在Golang中使用time处理时间_Golang time时间解析与格式化方法
Python如何创建带属性的XML节点
Windows11如何设置专注助手_Windows11专注助手使用攻略【技巧】
使用类变量定义字符串常量时的类型安全最佳实践
Win10系统映像怎么恢复 Win10使用系统映像还原电脑【指南】
win11如何清理传递优化文件 Win11为C盘瘦身删除更新缓存【技巧】
php报错怎么查看_定位PHP致命错误与警告的方法【教程】
php怎么下载安装后设置默认字符集_utf8配置步骤【详解】
php怎么下载安装后无法解析php文件_服务器配置检查【解答】
如何在Golang中实现文件下载_Golang文件传输与内容类型处理方法
c++中如何计算坐标系中两点间距离_c++勾股定理求距离
如何减少Golang内存碎片化_Golang内存分配与回收优化方法
Mac版Final Cut Pro入门_Mac视频剪辑基础操作【教程】
Python与OpenAI接口集成实战_生成式AI应用场景解析
c++中的Tag Dispatching是什么_c++利用标签分发优化函数重载【元编程】
Win11怎么设置右键刷新选项_Windows11显示更多选项技巧
如何在 Go 中创建包含映射(map)的切片(slice)结构
Python对象生命周期管理_创建销毁说明【指导】
XML的“混合内容”是什么 怎么用DTD或XSD定义
Win11时间不对怎么同步_Win11自动校准互联网时间【设置】
php内存溢出怎么排查_php内存限制调试与优化方法【说明】
Windows蓝屏错误0x00000018怎么处理_驱动初始化错误解决
c++的STL算法库find怎么用 在容器中查找指定元素【实用教程】
Python函数参数高级用法_默认值与可变参数解析【教程】
Python性能剖析高级教程_cProfileLineProfiler优化案例解析
MAC如何隐藏文件夹及文件_MAC终端命令隐藏与第三方工具加密【教程】
Mac如何修改Hosts文件?(本地开发与屏蔽网站)
Mac怎么查看活动监视器_理解Mac进程和资源占用【指南】
php485在macos下怎么配置_php485 macOS系统配置指南【解答】
如何使用 Selenium 正确获取篮球参考网站球员名单元素列表
如何将竖排文本文件转换为横排字符串
Win11怎么设置开机密码_Windows11账户登录选项PIN码
Win11怎么关闭任务栏小组件_Windows11隐藏任务栏天气图标
C++中的constexpr和const有什么区别?(编译期常量)
如何在Golang中实现邮件发送功能_Golang SMTP发送与错误处理示例
Win11触摸板没反应怎么办_开启Win11笔记本触摸板手势教程【步骤】
Windows蓝屏错误0x0000002C怎么解决_系统IO异常排查方法
如何使用Golang指针与结构体结合_修改结构体内部字段
GML (Geography Markup Language)是什么,它如何用XML来表示地理空间信息?
2025-12-31
致胜网络推广营销网专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。