CSS3阴影效果怎么加_textshadow和boxshadow区别【技巧】

发布时间 - 2025-12-31 00:00:00    点击率:
text-shadow仅作用于文字内容,box-shadow才用于整个元素阴影;前者语法无spread-radius且不支持内阴影,后者可控制扩张、内陷及多层叠加,是UI阴影首选。

text-shadow 只作用于文字,不能给整个元素加阴影

很多人误以为 text-shadow 可以让按钮、卡片或 div 块级元素带阴影,其实它只影响元素内纯文本内容的渲染。哪怕你给一个 hello 加了 text-shadow,阴影也只会贴着 “hello” 这几个字边缘出现,不会延伸到背景、边框或空白区域。

常见错误现象:
– 给按钮加了 text-shadow 却发现点击区域没阴影感
– 用 text-shadow 模拟卡片浮起效果,结果阴影被父容器裁剪或完全不可见

  • text-shadow 语法是 text-shadow: h-offset v-offset blur-radius color,不支持扩展半径、内阴影、多层叠加写法(CSS4 才支持多层,但兼容性差)
  • 它不受 transformfilter: drop-shadow() 影响,是独立的渲染层
  • 性能较好,尤其适合标题、图标字体等小范围文字增强

box-shadow 是给整个元素盒模型加阴影,支持内阴影和多层

box-shadow 作用对象是元素的 border box(含 border,不含 margin),所以能真实模拟“浮起”“凹陷”“卡片投影”这类 UI 效果。它才是做 UI 阴影的主力。

使用场景:
– 卡片悬浮时加深阴影
– 输入框聚焦态添加柔和外扩阴影
– 按钮按下时切换为 inset 内阴影模拟按压感

立即学习“前端免费学习笔记(深入)”;

  • 基础语法:box-shadow: h-offset v-offset blur-radius spread-radius color,其中 spread-radiustext-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)在低端设备上可能影响绘制帧率

别用 text-shadow 替代 box-shadow 做布局阴影

曾见过用 8 层 text-shadow 模拟毛玻璃卡片阴影的写法,虽然视觉上有点像,但问题一堆:文字必须存在、换行后阴影错位、无法响应鼠标事件区域变化、无障碍阅读器识别混乱。

真正该选谁,看这个判断逻辑:

  • 只要阴影要包裹整个可点击区域(比如按钮、卡片、模态框),一律用 box-shadow
  • 只希望标题/Logo 文字本身有描边、浮雕、发光等装饰效果,才用 text-shadow
  • 如果需要阴影跟随元素变形(如旋转、缩放),box-shadow 会随 transform 自动适配;text-shadow 则始终相对于文字基线固定

替代方案:filter: drop-shadow() 更灵活但有坑

filter: drop-shadow() 看似万能——它基于元素 Alpha 通道生成阴影,能绕过 border-radius 裁剪、支持不规则图形(比如 SVG、PNG 透明图),但它不是盒模型属性,行为更接近图像滤镜。

容易踩的坑:

  • 它会作用于整个渲染层,父元素如果有 overflow: hidden,阴影照样被裁掉(和 box-shadow 一样)
  • 不支持 inset,也不能设 spread-radius
  • 在 Safari 旧版本中对 transform 元素的阴影位置计算有偏差
  • 开启硬件加速后,部分安卓 WebView 会出现阴影闪烁或消失
/* 推荐仅用于特殊场景,例如给带圆角的图片加自然阴影 */
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  # 浮起  # 不支持  # 你给  # 滤镜  # 也会  # 鼠标  # 就能  # 多个  # 才是  # 见过 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何记录自定义日志?(Log频道配置)  Laravel怎么导出Excel文件_Laravel Excel插件使用教程  Laravel怎么生成二维码图片_Laravel集成Simple-QrCode扩展包与参数设置【实战】  香港服务器选型指南:免备案配置与高效建站方案解析  PHP正则匹配日期和时间(时间戳转换)的实例代码  如何用IIS7快速搭建并优化网站站点?  ,网页ppt怎么弄成自己的ppt?  Laravel如何设置自定义的日志文件名_Laravel根据日期或用户ID生成动态日志【技巧】  HTML5建模怎么导出为FBX格式_FBX格式兼容性及导出步骤【指南】  Python高阶函数应用_函数作为参数说明【指导】  Bootstrap CSS布局之列表  如何在IIS管理器中快速创建并配置网站?  Python函数文档自动校验_规范解析【教程】  Laravel如何使用模型观察者?(Observer代码示例)  如何在HTML表单中获取用户输入并结合JavaScript动态控制复利计算循环  Laravel如何发送系统通知_Laravel Notifications实现多渠道消息通知  Chrome浏览器标签页分组怎么用_谷歌浏览器整理标签页技巧【效率】  iOS中将个别页面强制横屏其他页面竖屏  Laravel请求验证怎么写_Laravel Validator自定义表单验证规则教程  Win11怎样安装网易有道词典_Win11安装词典教程【步骤】  如何在VPS电脑上快速搭建网站?  西安专业网站制作公司有哪些,陕西省建行官方网站?  焦点电影公司作品,电影焦点结局是什么?  怎样使用JSON进行数据交换_它有什么限制  高端智能建站公司优选:品牌定制与SEO优化一站式服务  jQuery中的100个技巧汇总  如何快速搭建个人网站并优化SEO?  如何快速重置建站主机并恢复默认配置?  如何快速启动建站代理加盟业务?  如何在不使用负向后查找的情况下匹配特定条件前的换行符  详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)  如何快速搭建高效简练网站?  高防服务器:AI智能防御DDoS攻击与数据安全保障  Laravel如何处理和验证JSON类型的数据库字段  网站制作大概多少钱一个,做一个平台网站大概多少钱?  如何在阿里云完成域名注册与建站?  javascript基于原型链的继承及call和apply函数用法分析  Laravel Eloquent模型如何创建_Laravel ORM基础之Model创建与使用教程  Win11关机界面怎么改_Win11自定义关机画面设置【工具】  微信推文制作网站有哪些,怎么做微信推文,急?  如何用虚拟主机快速搭建网站?详细步骤解析  Laravel怎么返回JSON格式数据_Laravel API资源Response响应格式化【技巧】  如何挑选优质建站一级代理提升网站排名?  如何用腾讯建站主机快速创建免费网站?  JavaScript数据类型有哪些_如何准确判断一个变量的类型  怎么用AI帮你设计一套个性化的手机App图标?  JS经典正则表达式笔试题汇总  百度浏览器如何管理插件 百度浏览器插件管理方法  网站制作软件免费下载安装,有哪些免费下载的软件网站?  关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)