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),仅供参考
企业数字化 ERP 产品动态
相关推荐
搞懂博客和微博的区别,3个最佳实践避坑指南 搞懂博客和微博的区别,3个最佳实践避坑指南 复制来的代码跑不通,报错信息一堆,不知道从哪下手调?别急,这往往不是代码本身的问题,而是你对底层机制的理解出了偏差。在技术选型和内容输出的最佳实践中,搞清“长文”与“短文”的边界,比盲目堆砌功能更… · 2026/9/23 17:16:45
3个关键优化点,搞定quadrature性能,保姆级教程 3个关键优化点,搞定quadrature性能,保姆级教程 报错一堆看不懂 StackTrace,CPU 飙到 100% 还没算出结果?别慌,今天这篇保姆级教程,专门拆解数值积分里的性能黑洞。… · 2026/9/23 17:16:45
从全加器到MIPS指令执行:计算机组成原理实验全链路解析 简介:这是杭州电子科技大学计算机组成原理课程的系统性实验合集,覆盖全加器、超前进位加法器、多功能ALU、寄存器堆、存储器设计,以及MIPS汇编器与模拟器、取指令与译码和R型指令实现,从数字电路基础到处理器指令执行层层递进&… · 2026/9/23 17:16:35
深度强化学习实现MEC计算卸载与资源分配:Python实战与避坑 简介:面向移动边缘计算(MEC)场景的深度强化学习研究,这份Python源码实现了基于DQN的计算卸载与资源分配算法,并附带Q-learning对比基线,适合人工智能、通信工程等专业学生用于毕设或课程设计。资源压缩包共… · 2026/9/23 17:52:03
3步搞定城市党建系统选型避坑指南 3步搞定城市党建系统选型避坑指南 很多后端老哥都卡在这个坎上:语法滚瓜烂熟,LeetCode 也能刷两把,但真让搭个“城市党建”这种政务类项目,脑子立马一片空白。不是代码写不出来,是根本不知道数据怎么流、权限怎么控、报表怎么出。这种从“写函… · 2026/9/23 17:51:38
Cytoscape.js 集合 every() 方法详解:全量条件校验与源码级剖析 Cytoscape.js 集合 every() 方法详解:全量条件校验与源码级剖析 【免费下载链接】cytoscape.js Graph theory (network) library for visualisation and analysis 项目地址: https://gitcode.com/gh_mirrors/cy/cytoscape.js
every() 是 Cytoscape.js 中集合… · 2026/9/23 17:51:38
DeepSeek-V2微调实战:企业知识库从RAG到精准推理的落地路径 简介:本资源是一份面向企业AI工程师与知识系统架构师的实战指南,聚焦DeepSeek大模型在跨行业知识库建设中的落地路径与微调方法论。文档系统梳理了从需求分析、数据预处理、模型选型部署到微调策略(全量/部分/提示微调)、性能评估… · 2026/9/23 17:51:37
PaddleNLP 词法分析(Lexical Analysis)实践指南:从 LAC 原理到训练、预测与部署 人工智能大模型NLP深度学习预训练微调RLHF模型量化 【免费下载链接】PaddleNLP Easy-to-use and powerful LLM and SLM library with awesome model zoo. 项目地址: https://gitcode.com/gh_mirrors/pa/PaddleNLP 点击查看 免费下载 导读
词法分析(Lex… · 2026/9/23 17:51:31
MATLAB一维卷积神经网络实战:从信号数据到模型部署 简介:这份资源聚焦一维卷积神经网络(1D-CNN)的MATLAB实现,面向具备一定深度学习基础、希望处理时间序列、音频信号或文本等一维数据的学习者与开发者。内容围绕1D-CNN的基本网络结构展开,涵盖输入层、卷积层、池化层、… · 2026/9/23 17:51:31
3招搞定手机怎么下载微信面试难题实战项目解析 3招搞定手机怎么下载微信面试难题实战项目解析 面试被问“手机怎么下载微信”背后的原理,90%的人答不上来。别笑,这看似弱智的问题,实则是考察你对移动应用分发机制、安全校验及网络协议理解的试金石。我带过不少校招新人,他们背了八股文,却连一个A… · 2026/9/23 0:00:03
你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 面试被问“高并发下如何保证消息不丢失”,你张口就是“用Redis”,结果面试官追问“如果Redis宕机了怎么办”,你瞬间卡壳。这种场景太常见了,很多新手在背八股文时,只记住了技术名词… · 2026/9/23 0:00:29