一份面向现代前端开发的简明指南,涵盖语义、可访问性、性能、布局与最佳实践。
使用正确的标签表达内容结构,而非滥用 <div> 和 <span>。
<header>, <nav>, <main>, <article>, <section>, <aside>, <footer>, <figure>, <figcaption>, <time> 等。<!DOCTYPE html> 触发标准模式。<html lang="zh-CN"> 正确标识页面语言。<meta charset="UTF-8"> 必须放在 <head> 最前面。<meta name="viewport" content="width=device-width, initial-scale=1.0"> 是移动端适配的基石。<title>(60 字符内)和 <meta description>(150~160 字符)。alt 属性;装饰性图片可用 alt=""。<button> 或 <a> 而非 <div role="button">,确保键盘可操作。<label for="id"> 或使用 aria-label。aria-* 属性增强复杂组件的语义(如 aria-expanded, aria-controls)。<head> 中,使用 <link rel="stylesheet"> 阻止 FOUC。<body> 底部,或使用 defer / async 属性。loading="lazy" 实现懒加载,srcset 配合 sizes 提供响应式图片。<link rel="preconnect"> 提前连接第三方源(如 Google Fonts、CDN)。<input> 都有对应的 <label>,并设置 for 属性。type="email", type="number", type="tel" 等原生输入类型,提升移动端体验。required,并配合 aria-required="true"。aria-describedby)。<img>, <input>, <br>)不需要闭合斜杠(HTML5 风格)。<!-- 注释 --> 标注复杂模块,提高可读性。<div style="color:red"><style>...</style> 放在 <head><link rel="stylesheet" href="style.css">div, p.class#id(尽量少用)[type="text"]:hover, :nth-child()::before, ::afterul > li, .card .title!important(谨慎使用)💡 尽量使用类选择器,保持低特异性,便于覆盖。
box-sizing: border-box; 让宽高包含 padding 和 border,更符合直觉。
一维布局模型,适合导航、卡片排列、居中、间距分配等。
二维布局模型,适合页面整体结构、复杂网格、画廊等。
@media 查询针对不同视口应用样式。min-width 逐步增强。rem(字体)、%、vw/vh、clamp()。auto、fr、minmax() 实现流动布局。.nav__item--active)。--primary-color: #2563eb; 方便主题管理。transform 和 opacity 做动画,避免改变 width/height/top/left。will-change: transform;)。id 作为样式钩子(用 class 更可复用)。<style> 或内联样式(除非必要)。data-* 属性与 CSS 属性选择器结合,实现动态样式(如 [data-active="true"])。@import 需谨慎,会增加请求次数;推荐使用 <link> 合并或构建工具。| 分类 | 推荐做法 | 避免 |
|---|---|---|
| HTML 结构 | 语义化标签、清晰的 heading 层级 | 滥用 div/span、跳级使用 h1~h6 |
| 可访问性 | alt、label、aria-*、键盘可操作 | 纯图片无文字、无焦点样式、缺少表单关联 |
| CSS 组织 | BEM 命名、CSS 变量、组件化 | 深嵌套(> 3层)、!important 滥用 |
| 布局 | Flexbox / Grid、相对单位、gap | float 布局、table 布局(非表格数据) |
| 响应式 | 移动优先、clamp()、媒体查询断点 | 固定 px 宽度、忽略触摸目标大小 |
| 性能 | 图片懒加载、CSS/JS 压缩、减少请求 | 大尺寸未压缩图片、过多 @import |
⚡ 持续迭代 · 保持学习 · 实践出真知