Material Web 组件之 Elevation 完全指南:用 `<md-elevation>` 实现 0-5 级阴影体系
UI组件前端设计系统【免费下载链接】material-webMaterial Design Web Components项目地址https://gitcode.com/gh_mirrors/ma/material-web点击查看免费下载Elevation高度是 Material Design 中两个表面沿 z 轴方向的相对距离Material Web Components 通过md-elevation自定义元素与--md-elevation-levelCSS 自定义属性把 M3 的六档阴影体系0~5完整落地到 Web 平台。读完本篇你将掌握如何用一行标记为任意容器自动铺满的投影、通过 transition 属性在悬停/按压等交互状态间平滑切换阴影、如何用颜色 token 定制阴影色并理解底层双阴影合成key ambient shadow的实现原理。Elevation 是什么根据 M3 规范 的定义Elevation 是两个表面沿 z 轴垂直于屏幕的方向的相对距离。Material 的阴影系统被刻意限制为只有少数几个档位这一创意约束迫使你在设计 UI 的阴影叙事elevation story时做出深思熟虑的取舍而不是随意堆砌阴影。Material 使用六档高度等级每档对应一个 dp密度无关像素数值命名反映了元素相对 UI 表面的距离0、1、2、3、4、5。其中元素的静止resting状态可以使用 0 到 3 级而4 和 5 级专门保留给用户交互状态例如 hover悬停和 dragged拖拽。这意味着你应当把最高的两级高度当作交互反馈手段而不是让普通静态卡片常年停留在高位。在 Material Web Components 中这一套体系由一个轻量的自定义元素承载// elevation/elevation.ts customElement(md-elevation) export class MdElevation extends Elevation { static override styles: CSSResultOrNative[] [styles]; }元素内部实现非常精简internal/elevation.ts 只做两件事在connectedCallback里设置aria-hiddentrue避免 VoiceOver 把它识别为与内容并列的分组并渲染出一个span classshadow作为阴影承载节点。也就是说md-elevation本身没有任何可见内容纯粹是一层可感知的投影层。基础用法为任意表面添加高度Elevation 可以通过--md-elevation-levelCSS 自定义属性在 0 到 5 之间取值。投影会自动填满最近的position: relative元素的尺寸与形状圆角会被继承。style .surface { position: relative; border-radius: 16px; height: 64px; width: 64px; --md-elevation-level: 3; } /style div classsurface md-elevation/md-elevation !-- Content -- /div使用上有三个关键点宿主必须有定位上下文阴影节点通过position: absolute; inset: 0铺满而它的定位基准是最近的position: relative祖先因此承载表面必须设置position: relative源码见 internal/_elevation.scss 中的:host, .shadow, .shadow::before, .shadow::after样式块。圆角自动继承阴影使用border-radius: inherit所以只要给宿主设置圆角阴影就会跟随宿主形状每档阴影的具体圆角是否叠加由 Material 规范决定本组件实现中直接继承宿主的圆角值。md-elevation可以出现在内容任意位置组件使用display: flex; pointer-events: none不会拦截鼠标事件也不会影响内容的可点击性。从源码的阴影公式internal/_elevation.scss可以看到阴影是两层 box-shadow 合成的.shadow::before为key shadow主投影opacity: 0.3负责给出物体的着地感.shadow::after为ambient shadow环境投影opacity: 0.15负责大范围的环境光晕。每档等级对应的 key shadow 目标值源码注释中给出为LevelKey box-shadowAmbient box-shadow00px 0px 0px 0px0px 0px 0px 0px10px 1px 2px 0px0px 1px 3px 1px20px 1px 2px 0px0px 2px 6px 2px30px 1px 3px 0px0px 4px 8px 3px40px 2px 3px 0px0px 6px 10px 4px50px 4px 4px 0px0px 8px 12px 6px实现上Sass 用一组clamp(0, var(--_level) - N, M)的分段函数把连续的--_level映射到离散的 y / blur / spread 值再乘以1px得到最终 box-shadow。这种用 CSS 计算把 0~5 离散值换算成阴影参数的手法正是组件支持动画的关键——因为阴影参数是直接由 CSS 变量实时推导的改变--md-elevation-level时无需重建任何样式。动画在高度等级间平滑过渡在表面切换高度等级时可以给宿主添加transition-duration与transition-easing-function或transition-timing-function属性阴影就会平滑过渡。组件内部已经把transition-duration、transition-property、transition-timing-function全部设置为inherit因此宿主上的过渡设置会被阴影层完整继承。style .surface { /* ... */ transition-duration: 250ms; transition-timing-function: ease-in-out; --md-elevation-level: 3; } .surface:active { --md-elevation-level: 0; } /style div classsurface md-elevation/md-elevation !-- Content -- /div要点说明组件默认在:host与.shadow::before/::after上设置transition-property: box-shadow, opacity确保只有阴影相关的属性参与过渡避免不必要的重排上面示例利用:active状态实现按压时降至 0 级的物理反馈这正符合 M3 中静止状态 0~3、交互状态 4~5的用法延伸——反过来hover 时升到 4/5 也同样是推荐的交互模式过渡时长如 250ms与缓动函数如 ease-in-out完全由你在宿主上控制组件不做硬编码。仓库的演示代码也验证了这一模式elevation/demo/stories.ts 中每个 demo 盒子都设置了transition-duration: 250ms; transition-timing-function: ease-in-out;而 elevation/demo/demo.ts 通过levelknob 让你可以在 0~5 之间实时拖动切换渲染时用Math.min(Math.max(level, 0), 5)把输入夹在合法区间内直观观察阴影过渡效果。无障碍Elevation 是一个纯视觉组件不承载任何语义与交互信息因此没有无障碍方面的顾虑。组件实现中唯一与无障碍相关的处理是在挂载时为自身设置aria-hiddentrue避免屏幕阅读器把阴影层误读为内容分组源码注释见 internal/elevation.ts。在使用时你无需为投影层提供任何 ARIA 属性或替代文本。Theming用 Material 主题定制阴影Elevation 支持 Material theming可以从颜色维度进行定制。它遵循与其它组件一致的 token 体系Sass 侧见 elevation/_elevation.scss 的forward ./internal/elevation show theme样式侧见 internal/_elevation.scss 的theme($tokens)mixin支持且仅支持两个 tokenToken默认值--md-elevation-level0--md-elevation-shadow-color--md-sys-color-shadow这两个 token 的定义来自 tokens/_md-comp-elevation.scsslevel取自md-sys-elevation.level0默认即为 0对应无投影shadow-color取自md-sys-color.shadow也就是系统色板中的 shadow 色tokens/_md-sys-color.scss 中注册的shadowtoken默认通常接近黑色。值得留意的是tokens/_md-sys-elevation.scss 中有一处针对 Web 平台的特殊处理注释明确指出Web 端的高度等级应使用等级数字而非 dp 值level0~level5 被映射为整数 0~5这正是你在页面上看到--md-elevation-level: 3而不是12dp之类写法level3 对应的 dp 值的原因。主题化示例自定义阴影颜色style .surface { position: relative; border-radius: 16px; height: 64px; width: 64px; } :root { --md-elevation-level: 5; --md-sys-color-shadow: #006A6A; } /style div classsurface md-elevation/md-elevation !-- Content -- /div这个例子做了两件事通过:root把--md-elevation-level提升到 5所有表面默认获得最高级投影把系统 token--md-sys-color-shadow覆盖为青绿色#006A6A让阴影呈现品牌色。因为组件样式中的阴影颜色读取的是var(--_shadow-color)而_shadow-color又回落到var(--md-elevation-shadow-color, ...)最终落到--md-sys-color-shadow所以在:root覆盖任何一个环节都能全局生效——这也解释了为何示例中只需要改--md-sys-color-shadow一个变量。若只想改变单个表面的阴影色把--md-elevation-shadow-color直接写在对应类上即可。若使用 Sass 构建还可以通过组件暴露的theme($tokens)mixin 以编程方式注入 token// 需要引入 tokens 模块与 elevation 模块 // use material-web/tokens; // use material-web/elevation; // .surface { include elevation.theme((level: 5, shadow-color: #006A6A)); }thememixin 的 token 白名单定义在 tokens/_md-comp-elevation.scss 的$supported-tokens中传入白名单之外的 token 会在编译期直接error报错。API 一览md-elevation的公共 API 极为精简不暴露任何属性property、属性attribute与方法所有能力都通过 CSS 自定义属性对外提供--md-elevation-level取整数值 0~5控制高度等级默认0--md-elevation-shadow-color控制阴影颜色默认引用--md-sys-color-shadow。配合使用的还有宿主上的两个标准 CSS 属性transition-duration与transition-easing-function组件用transition-timing-function的inherit完成继承用于开启阴影动画。测试方面elevation/elevation_test.ts 通过createTokenTests(MdElevation.styles)对组件的样式 token 做一致性校验确保暴露的 token 与主题体系声明保持一致。总结是 M3 六档高度体系的 Web 实现用--md-elevation-level: 0~5控制自动铺满并继承最近position: relative宿主的尺寸与圆角静止用低档0~3交互用高档4~5这是 Material 对高度体系的创造性约束也是最容易出彩的设计决策点动画零成本给宿主加transition-duration/transition-easing-function配合状态切换改变--md-elevation-level即可获得流畅的阴影过渡因为底层阴影参数由 CSS 变量实时推导主题化只碰颜色两个 token 中--md-elevation-shadow-color默认指向--md-sys-color-shadow改一个系统变量即可全局换色纯视觉、零负担组件不拦截事件、无无障碍问题天然适合作为任意表面的一层投影叠加层。赞分享UI组件前端设计系统【免费下载链接】material-webMaterial Design Web Components项目地址https://gitcode.com/gh_mirrors/ma/material-web点击查看免费下载相关推荐Material Components Web Elevation 指南阴影体系、Sass Mixin 与 Elevation Overlay 实战Material Components Web Elevation 指南阴影体系、Sass Mixin 与 Elevation Overlay 实战 本文围绕前端UI组件设计系统超实用Markdown-Cheatsheet图片技巧主题适配与排版进阶指南超实用Markdown Cheatsheet图片技巧主题适配与排版进阶指南 Markdown Cheatsheet是一款终极的Markdown语法参考工具提如何掌握Material Design Lite阴影系统Elevation与Depth设计终极指南如何掌握Material Design Lite阴影系统Elevation与Depth设计终极指南 Material Design Lite是一个轻量级的前端前端UI组件上一篇capa入门教程5步学会分析可疑可执行文件下一篇Awesome Go的CQRS模式命令查询职责分离创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

出版社出书费用面试题拆解:3个坑+完整示例

出版社出书费用面试题拆解:3个坑+完整示例

出版社出书费用面试题拆解:3个坑+完整示例 版本升级后 API 全变了,导致很多开发者在面试“出版社出书费用”相关后端业务时,因为对成本计算逻辑理解不深,直接被刷。别慌,今天这篇 完整示例 带你从零理清这个高频考点。…

2026/9/23 17:17:20 阅读更多 →
LFM线性调频信号与匹配滤波:Matlab脉压实现与避坑指南

LFM线性调频信号与匹配滤波:Matlab脉压实现与避坑指南

简介:LFM线性调频(chirp)信号及其匹配滤波器设计这份MATLAB算法资源,面向雷达、通信与信号处理方向的初学者与工程人员,用于理解LFM信号频率随时间线性变化的特性,并通过匹配滤波实现脉冲压缩、提高信噪比与…

2026/9/23 17:17:20 阅读更多 →
做宝搞源码解析避坑指南:3步搞懂核心逻辑

做宝搞源码解析避坑指南:3步搞懂核心逻辑

做宝搞源码解析避坑指南:3步搞懂核心逻辑 面试被问原理答不上来?别慌,很多老哥都卡在“知道怎么用,不知道怎么写”这一步。今天这篇避坑指南,不整虚的,直接带你拆解“做宝搞”的核心实现逻辑。哪怕你之前只看过文档,看完这篇,也能在面试官面前从容拆…

2026/9/23 17:17:20 阅读更多 →

最新新闻

okbiye AI答辩PPT:功能与作用全解析

okbiye AI答辩PPT:功能与作用全解析

答辩是毕设的最后一道关,很多同学论文写得很好,却栽在了答辩PPT上:答辩前才开始做PPT,一页一页做了一周还是做不好,内容不知道怎么提炼,排版不专业,配色辣眼睛;讲稿写不好&#xff0…

2026/9/23 21:27:23 阅读更多 →
开源框架中的 Swiper 与 Switch 组件:从原理到实战

开源框架中的 Swiper 与 Switch 组件:从原理到实战

1. 引言在现代前端开发中,开源组件库极大地提升了开发效率。其中,Swiper 和 Switch 是两个非常常见且实用的组件:Swiper 用于实现轮播图、滑动切换等交互效果,而 Switch 则用于开关切换类交互。本文将从原理、用法到实战&#xff…

2026/9/23 21:27:23 阅读更多 →
Apache DolphinScheduler 飞书(Feishu)告警插件接入指南:Webhook 配置、代理参数与消息发送原理

Apache DolphinScheduler 飞书(Feishu)告警插件接入指南:Webhook 配置、代理参数与消息发送原理

任务调度大数据后端前端 【免费下载链接】dolphinscheduler Apache DolphinScheduler is the modern data orchestration platform. Agile to create high performance workflow with low-code 项目地址: https://gitcode.com/gh_mirrors/do/dolphinscheduler 点击查…

2026/9/23 21:27:22 阅读更多 →
变电站智能化术语标准:Q/CSG 110017.12-2012关键定义与工程实践

变电站智能化术语标准:Q/CSG 110017.12-2012关键定义与工程实践

简介:《南方电网一体化电网运行智能系统技术规范 第1部分 第2篇:术语和定义》(Q/CSG 110017.12-2012)是南方电网发布的智能电网领域企业标准,面向电网规划、二次系统设计、标准编写及系统集成人员,重点解决…

2026/9/23 21:27:22 阅读更多 →
MATLAB虚拟网络仿真代码从零搭建:离散事件内核、链路模型与参数标定避坑指南

MATLAB虚拟网络仿真代码从零搭建:离散事件内核、链路模型与参数标定避坑指南

简介:这份资源是一套基于MATLAB编写的虚拟网络仿真代码,面向网络工程、云计算与分布式系统方向的研究者、开发者及教学学习者,用于搭建可直接运行的虚拟网络映射仿真环境,帮助理解虚拟网络资源到物理网络基础设施的映射过程。压缩…

2026/9/23 21:27:22 阅读更多 →
PaddleSpeech 服务端错误码体系解析:从 ErrorCode 定义到 RESTful 接口的统一异常处理

PaddleSpeech 服务端错误码体系解析:从 ErrorCode 定义到 RESTful 接口的统一异常处理

人工智能语音音频 【免费下载链接】PaddleSpeech Easy-to-use Speech Toolkit including Self-Supervised Learning model, SOTA/Streaming ASR with punctuation, Streaming TTS with text frontend, Speaker Verification System, End-to-End Speech Translation and Keyword…

2026/9/23 21:26:20 阅读更多 →

日新闻

3招搞定手机怎么下载微信面试难题实战项目解析

3招搞定手机怎么下载微信面试难题实战项目解析

3招搞定手机怎么下载微信面试难题实战项目解析 面试被问“手机怎么下载微信”背后的原理,90%的人答不上来。别笑,这看似弱智的问题,实则是考察你对移动应用分发机制、安全校验及网络协议理解的试金石。我带过不少校招新人,他们背了八股文,却连一个A…

2026/9/23 0:00:23 阅读更多 →
2k显示屏性能优化踩坑:版本升级后API全变了,这份源码解析救了我

2k显示屏性能优化踩坑:版本升级后API全变了,这份源码解析救了我

2k显示屏性能优化踩坑:版本升级后API全变了,这份源码解析救了我 刚把开发环境的显示器从1080P换到2K,跑老项目直接报错,版本升级后 API…

2026/9/23 0:01:25 阅读更多 →
3步搞定美眉图实战项目,告别官方文档抓不住重点

3步搞定美眉图实战项目,告别官方文档抓不住重点

3步搞定美眉图实战项目,告别官方文档抓不住重点 官方文档翻了三遍还是云里雾里?别急,美眉图在实战项目中常被用来做数据可视化,但它的原理比你想的简单。今天咱们直接上手,用一个完整的小项目把美眉图跑通,不再死磕那些冗长的理论说明。…

2026/9/23 0:01:25 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/23 4:55:02 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/23 4:49:06 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/23 9:53:41 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/23 9:53:40 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/23 9:53:40 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/23 9:53:40 阅读更多 →