引言
Materialize CSS 是一套实现 Material Design 风格的 CSS 与 JavaScript 组件库,提供栅格、按钮、卡片、Sidenav、Modal、表单和响应式工具。它不是 Vue 或 React,也不提供虚拟 DOM、Proxy 响应式或服务端状态管理。本文基于 Materialize CSS 1.0.0 的公开文档,给出可以在普通 HTML 项目中验证的接入方式。
官方文档:Materialize CSS。开始维护旧项目前,先确认依赖版本、浏览器范围和安全要求;不要把未在官方文档中出现的类名或 API 当成框架功能。
1. 安装与加载
使用 npm 安装时,将 CSS 和 JavaScript 引入应用入口:
npm install materialize-css@1.0.0
import 'materialize-css/dist/css/materialize.min.css';
import M from 'materialize-css';
document.addEventListener('DOMContentLoaded', () => {
M.AutoInit();
});
如果使用静态 HTML,可以加载官方构建文件,并在 DOM 创建完成后调用具体组件的 init。不要重复加载多份 Materialize 脚本,也不要对同一节点重复初始化。
2. 响应式栅格
Materialize 使用 12 列栅格。s12 表示小屏占满一行,m6 表示中屏占 6 列,l4 表示大屏占 4 列:
<div class="container">
<div class="row">
<div class="col s12 m6 l4">
<div class="card">
<div class="card-content">
<span class="card-title">部署检查</span>
<p>按环境核对配置、资源路径和运行日志。</p>
</div>
<div class="card-action">
<a href="/guides/deploy/">查看步骤</a>
</div>
</div>
</div>
</div>
</div>
先在窄屏上确认标题、按钮和表单不会溢出,再通过 m、l 断点增加列数。栅格只负责布局,内容的最小宽度和可读性仍由页面本身负责。
3. Sidenav 与导航
Sidenav 需要一个带 sidenav 类和唯一 ID 的列表,以及触发链接:
<a href="#mobile-nav" data-target="mobile-nav" class="sidenav-trigger">
<i class="material-icons" aria-hidden="true">menu</i>
<span class="sr-only">打开导航</span>
</a>
<ul id="mobile-nav" class="sidenav">
<li><a href="/">首页</a></li>
<li><a href="/posts/">所有文章</a></li>
</ul>
const elems = document.querySelectorAll('.sidenav');
M.Sidenav.init(elems, {edge: 'left'});
触发器应有可读名称和键盘焦点,关闭后焦点要回到触发器。使用现有导航系统时,应先确认不会同时加载两套菜单脚本。
4. Modal 与表单
Modal 的触发链接通过 href 或 data-target 指向弹窗 ID:
<a class="waves-effect waves-light btn modal-trigger" href="#deploy-modal">
查看说明
</a>
<div id="deploy-modal" class="modal" role="dialog" aria-labelledby="deploy-title">
<div class="modal-content">
<h2 id="deploy-title">部署说明</h2>
<p>在测试环境确认变更后,再按站点流程发布。</p>
</div>
<div class="modal-footer">
<a href="#!" class="modal-close waves-effect btn-flat">关闭</a>
</div>
</div>
const modals = document.querySelectorAll('.modal');
M.Modal.init(modals, {
onOpenStart: modal => console.log('open', modal.id),
});
服务端仍需校验表单字段、权限和 CSRF;前端组件只负责交互,不提供安全边界。错误提示应关联到对应输入框,并能被键盘和辅助技术读取。
5. 与现有项目共存
接入 Materialize 时先划定 CSS 影响范围,检查 .row、.container、按钮和表单控件是否与项目原有样式冲突。可以从一个独立页面或一个组件开始,逐项记录覆盖的选择器,再决定是否引入主题变量。不要把“加载了框架”写成性能提升或开发效率提升的固定比例;应使用目标项目的构建大小、页面交互和用户反馈验证。
发布前检查
- 在声明的 Materialize 版本中核对类名、初始化方法和配置项。
- 移动端测试栅格、Sidenav、Modal、表单和键盘焦点。
- 确认 CSS/JS 只加载一次,静态资源路径和缓存版本可回滚。
- 服务端继续负责鉴权、CSRF、输入校验和错误处理。
- 用构建产物大小和真实页面测试描述性能,不使用无来源百分比。
Materialize CSS 适合快速搭建具有统一视觉语言的页面,但它不会替代应用框架。需要更完整的前端 SEO 与响应式检查时,可参考本站的 CSS 核心技法 和 站内链接审计实战。
评论 (0)
暂无评论,快来抢沙发吧!