扁平化设计关键在结构克制、视觉降噪、语义清晰三者缺一不可;需用HTML语义标签替代冗余div、禁用拟物化CSS样式、压缩表头层级、避免隐性容器泛滥。
扁平设计不是靠删阴影就完事,关键在结构克制、视觉降噪、语义清晰——三者缺一不可。
用 <div> 套 <div> 再套 <div> 是扁平化的最大敌人。浏览器渲染时 DOM 层级越深,重排重绘成本越高,辅助技术也越难解析。
<header> 替代 <div class="header">,不加额外 wrapper<main> 必须且只能出现一次,它就是页面主体的语义边界,别再给它包个 container
<section> 和 <article> 按内容逻辑切分,不是按视觉区块切分;一个 <section> 里嵌三层 <div> 就等于把扁平写成了浮雕<nav> 外再套 <div class="nav-wrapper"> —— flex 布局可以直接写在 <nav> 上“扁平”常被误解为“没样式”,其实是指去除拟物化干扰(如内阴影、高光、立体边框),但保留明确的交互反馈和视觉层级。
button 元素禁用 text-shadow、box-shadow(除 hover/focus 状态下轻量提示外)1px solid #ccc 或完全透明,别用 2px outset 这类拟物属性2px–4px,border-radius: 0 更激进但需全站一致input[type="text"] 和 select 的默认 outline 在 focus 时保留,但用 outline-offset: 2px 避免“跳动”appearance: none 后未重置 background 和 border,会导致 Safari 下按钮消失多层 <th rowspan="2"> + <th colspan="3"> 看似结构清晰,实则语义混乱、响应式崩坏、屏幕阅读器难以线性读取。
立即学习“前端免费学习笔记(深入)”;
<thead><tr>,列名用简明短语(如 “Q3 收入” 而非 “财务数据 > 季度汇总 > 第三季度 > 总收入”)data-* 属性保留在 <th> 上,供 JS 或 ARIA 扩展使用<abbr title="Quarter 3 Revenue">Q3 Rev</abbr> 提供完整语义,不影响视觉扁平display: none + aria-hidden="true"),比强行压缩表头更可靠布局工具只是手段,真正卡住扁平落地的是「隐性容器泛滥」——开发者习惯用布局容器兜底,结果语义退化、DOM 膨胀、CSS 选择器越来越长。
<div> 都有明确职责:是语义缺失被迫加的?还是仅为 margin/padding 临时包裹?后者一律删掉<Fragment> 或 <></> 应该是默认选项.wrapper .inner .content > p,改用 main > p 或 article p 直接命中语义节点扁平不是删减,是筛选:删掉所有不能回答“这个标签为什么存在”的节点,留下每个都承担明确语义或功能的元素。最易忽略的,其实是那些没写 class、没加 JS、看起来“什么都没干”的空 <div> —— 它们才是扁平化真正的绊脚石。