首页
/ Material UI 支持组件总览:Material Design 组件覆盖范围、支持模式与源码对照

Material UI 支持组件总览:Material Design 组件覆盖范围、支持模式与源码对照

2026-09-06 12:49:29作者:齐冠琰

本文围绕 Material UI 仓库中的《Supported components》文档展开,完整梳理 Material UI 对 Material Design 规范中各组件的支持清单与支持模式(原生支持、MUI X 扩展、Base UI 组合、可组合实现或暂不支持),并结合仓库源码(@mui/material@mui/lab 包的导出清单)交叉验证每一项组件声明的实际落点,帮助开发者快速判断某个 Material Design 组件在 Material UI 体系中的实现位置与使用方式。

设计立场:遵循 Material Design 指南,但保留工程判断

官方文档(supported-components.md)开宗明义地阐述了 Material UI 对 Material Design 规范的态度:

我们在实际可行的情况下遵循 Material Design 指南(当指南与常识冲突时应用常识——这种情况比人们预期的更常见),我们不期望支持每一个组件,也不期望支持每个组件的每一个特性,而是提供构建块(building blocks),让开发者能够创建有吸引力的用户界面与体验。

这段话确立了两条核心原则:

  1. 指南是参考而非铁律。当 Material Design 规范与工程常识冲突时(这类冲突比表面看起来更频繁),Material UI 会优先采用符合开发者直觉的方案,而不是机械照搬规范。
  2. 提供积木而非成品。Material UI 的定位是提供可组合的构建块,覆盖“每个组件的每个特性”并不在承诺范围内。这解释了为什么清单中既有完整实现的组件,也有标记为 “Composable”(可用现有构建块自行拼装)的条目。

对于希望为 Material UI 新增某个未列出的组件或特性的贡献者,文档给出的流程是:先检索项目中相关的已有 Issue 或新建一个 Issue 讨论实现方案,然后再提交 Pull Request——即“先讨论、后实现”的贡献约定。

完整支持组件清单

清单以演示表格形式维护在 MaterialUIComponents.js 中,共列出约 50 项 Material Design 组件与特性。以下完整继承该清单,并标注每项的支持模式:

组件 支持的 Material Design 版本 Material UI 支持模式
Accordion MD 1(legacy) 原生支持(Native support)
Alert 无对应指南 原生支持
App Bar: top MD 2 原生支持
App Bar: bottom MD 2 原生支持
Autocomplete 无对应指南 原生支持
Banner MD 2 Composable(可组合实现)
Avatar 无对应指南 原生支持
Badge 无对应指南 原生支持
Bottom Navigation MD 2 原生支持
Breadcrumbs 无对应指南 原生支持
Button MD 2 原生支持
Floating Action Button MD 2 原生支持
Button Group 无对应指南 原生支持
Card MD 2 原生支持
Checkbox MD 2 原生支持
Chip MD 2 原生支持
Data Grid MD 2 MUI X 提供支持
Date Pickers MD 2 MUI X 提供支持
Dialog MD 2 原生支持
Divider MD 2 原生支持
Drawer MD 2 原生支持
Icons MD 2 原生支持
Image List MD 2 原生支持
Link 无对应指南 原生支持
List MD 2 原生支持
Masonry 无对应指南 原生支持
Material Icons Google Fonts 图标库 原生支持
Menu MD 2 原生支持
Modal MD 2 原生支持
Navigation Rail MD 2 无支持(No support)
Number Field 使用 Base UI 组合实现
Pagination 无对应指南 原生支持
Paper MD 2 原生支持
Progress MD 2 原生支持
Radio Group MD 2 原生支持
Rating 无对应指南 原生支持
Select MD 2 原生支持
Skeleton 无对应指南 原生支持
Slider MD 2 原生支持
Snackbar MD 2 原生支持
Speed Dial 无对应指南 原生支持
Stepper MD 1(legacy) 原生支持
Switch MD 2 原生支持
Table MD 2 原生支持
Tabs MD 2 原生支持
Text Field MD 2 原生支持
Timeline 无对应指南 原生支持
Toggle Button 无对应指南 原生支持
Tooltip MD 2 原生支持
Transfer List 无对应指南 原生支持
Tree View 无对应指南 MUI X 提供支持
Typography MD 2 原生支持

几点值得注意的分布特征:

  • 原生支持的条目最多,覆盖表单(TextField、Select、Checkbox、Switch、Radio、Slider)、反馈(Dialog、Snackbar、Alert、Skeleton)、导航(Tabs、AppBar、Drawer、Bottom Navigation、Menu、Pagination、Breadcrumbs)、内容(Card、Table、List、Image List、Chip、Typography、Paper)等核心场景。
  • MUI X 提供支持的条目(Data Grid、Date Pickers、Tree View)指向的是 Material UI 的商业扩展产品线,说明数据密集型组件被拆分到独立产品中维护。
  • Composable(可组合) 的 Banner 表示 Material UI 不单独提供该组件,但可用现有构建块自行拼装——这正是文档“提供 building blocks”立场的直接体现。
  • No guidelines 表示 Material Design 规范中没有该组件的对应章节,属于 Material UI 自研扩展(如 Autocomplete、Avatar、Speed Dial、Rating、Skeleton)。

支持模式的判定逻辑(源码视角)

上表不是手工填写的静态文本,而是由 MaterialUIComponents.js 中的渲染逻辑根据每个条目的字段动态判定的,共有五种输出状态:

  1. Native support:当 materialUI 字段以 /material-ui 开头且没有 baseUI 字段时渲染。表示组件由核心库原生提供。
  2. Composed with Base UI:当条目配置了 baseUI 字段时渲染(目前仅 Number Field 一项)。这表明该组件的无样式逻辑层由独立项目 Base UI 提供,Material UI 侧通过组合方式复用,而非在核心包中重新实现。
  3. Support in MUI X:当 materialUI 字段以 /x 开头时渲染(Data Grid、Date Pickers、Tree View),指向扩展产品线文档。
  4. Composable:当 materialUI 字段值为字符串 'Composable' 时直接展示文本(Banner 一项)。
  5. ❌ No support:当 materialUI 字段为 null 时渲染(目前仅 Navigation Rail 一项,它只有 Material Design 指南链接而无实现路径)。

此外,Material Design 列的链接文本由指南 URL 决定:materialDesign 路径中包含 m1 的显示为 “MD 1 (legacy)”(Accordion、Stepper 两项),其余显示为 “MD 2”;没有 materialDesign 字段的显示 “No guidelines”(见 MaterialUIComponents.js)。

组件声明与源码落点交叉验证

将清单与仓库源码对照,可以确认各项声明的实际实现位置:

  • @mui/material 核心包packages/mui-material/src/index.js 集中导出了清单中绝大多数“原生支持”组件,且每个组件都遵循成对导出模式(默认导出 + 具名类型/工具导出),例如 export { default as Accordion } from './Accordion'; export * from './Accordion';index.js)。核心包导出面远大于清单列表——除清单中的组件外,还包括 BoxStackGridContainerButtonBaseInputBaseFormControlCollapseGrowFadeSlideZoomPopperPortalClickAwayListenerNoSsrTablePaginationTableSortLabelSwipeableDrawerAvatarGroupImageListItemBar 等构建块与工具组件,以及 useAutocompleteusePaginationuseScrollTriggeruseMediaQuery 等 Hooks。这印证了“提供 building blocks”的定位:许多未出现在 Material Design 清单中的组件,恰恰是拼装复杂界面的底层积木。
  • @mui/lab 实验包packages/mui-lab/src/index.js 中可以看到清单中的 Masonry、Timeline 系列(TimelineTimelineItemTimelineSeparator 等,index.js)与 Tree View(index.js)在核心包稳定化之前的实际落点,另有 Date Pickers 全家(DesktopDatePickerMobileDatePickerLocalizationProvider 等)与 LoadingButtonTabContext 等实验性组件。从源码结构看,清单中部分标记为原生支持的 Masonry、Timeline、Transfer List 类条目,在此仓库状态下仍由 lab 包承载,体现了“实验包孵化、核心包沉淀”的演进路径。
  • 无样式逻辑层外置:Number Field 标注为 “Composed with Base UI”,核心源码中不存在 NumberField 导出(在 mui-materialmui-lab 的导出清单中均无此项),与“组合自 Base UI”的声明一致。

实际使用建议

结合上述清单与源码对照,开发者在实际选型时可以遵循以下路径:

  1. 先查清单确定支持模式。若为“原生支持”,直接 import { Button } from '@mui/material' 并使用;若为 MUI X 条目,需引入对应的 MUI X 产品包。
  2. 善用可组合特性。Banner 这类 “Composable” 条目并非不可用,而是需要用 PaperStackBoxTypography 等构建块自行组装——这恰是核心包导出面(见 packages/mui-material/src/index.js)如此宽的原因。
  3. 关注指南版本差异。Accordion、Stepper 引用的是 MD 1(legacy)指南,其余组件对应 MD 2 指南,理解版本差异有助于对齐视觉预期。
  4. 参与新组件开发前先讨论。按文档约定,新增组件或特性前应先检索或创建相关 Issue 讨论实现方案,避免与既有规划冲突。

参考文件

登录后查看全文
热门项目推荐
相关项目推荐

项目优选

收起
kernelkernel
deepin linux kernel
C
33
18
ops-transformerops-transformer
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
C++
1.14 K
2.75 K
pytorchpytorch
作为 Ascend for PyTorch 社区的核心组件,TorchNPU 是昇腾专为 PyTorch 打造的深度学习适配插件,使 PyTorch 框架能够直接调用昇腾 NPU,为开发者提供昇腾 AI 处理器的超强算力。
Python
857
1.35 K
docsdocs
暂无描述
Markdown
898
5.82 K
ops-nnops-nn
本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
C++
921
1.84 K
jiuwenswarmjiuwenswarm
JiuwenSwarm 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。
Python
3.8 K
1.02 K
kernelkernel
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
531
596
cann-learning-hubcann-learning-hub
CANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。
Jupyter Notebook
1.02 K
519
ops-mathops-math
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
1.36 K
1.46 K
AscendNPU-IRAscendNPU-IR
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
548
391