CSS 核心规则速查卡(20% 知识解决 80% 问题)

10 阅读3分钟

一、盒模型(Box Model)

核心规则

  • 所有元素都是矩形盒子,由内向外:contentpaddingbordermargin
  • box-sizing: border-box;width/height 包含 padding + border,避免溢出。建议全局设置

常见问题

  • 设置 width: 100% 再加 padding 出现横向滚动条 → 检查是否缺少 box-sizing: border-box
  • 两个块级元素上下 margin 重叠(取最大值) → 这是正常折叠,可用 flex/gridpadding 代替。

二、Flex 布局(一维)

核心属性(容器):

属性作用常用值
display: flex开启弹性布局
flex-direction主轴方向row(默认)、column
justify-content主轴对齐flex-startcenterspace-between
align-items交叉轴对齐stretch(默认)、centerflex-start
flex-wrap是否换行wrapnowrap
gap子项间距10px20px

核心属性(子项):

  • flex: 1 → 等分剩余空间(flex-grow: 1; flex-shrink: 1; flex-basis: 0%)。
  • align-self → 覆盖父级 align-items

常见问题

  • 为什么 gapspace-between 下看起来没效果? → space-between 已经分配了剩余空间,gap 仅在剩余空间不足时明显。
  • 为什么子项不换行? → 检查 flex-wrap: wrap 是否设置,以及子项宽度是否超过容器。
  • 为什么 margin: auto 在 Flex 中能实现居中? → auto 会吸收剩余空间。

三、Grid 布局(二维)

核心属性(容器):

属性作用常用值
display: grid开启网格布局
grid-template-columns定义列宽200px 1fr 200pxrepeat(3, 1fr)
grid-template-rows定义行高auto 1fr auto
gap网格线间距10px 20px(行 列)
justify-items / align-items单元格内对齐centerstretch

核心属性(子项):

  • grid-column: 1 / 3 → 从第 1 条列线跨越到第 3 条(占两列)。
  • grid-row: span 2 → 占两行。

常见问题

  • fr 是什么? → 剩余空间的比例单位,类似 flex: 1
  • 如何实现响应式网格(每行自动填充)? → grid-template-columns: repeat(auto-fill, minmax(200px, 1fr))

四、定位(Position)

参照物是否脱离文档流常用场景
relative自身原位置否(保留占位)作为绝对定位的容器、微调位置
absolute最近的已定位祖先浮层、角标、弹窗
fixed视口固定导航栏、返回顶部按钮
sticky父容器滚动区域混合(滚动到阈值时固定)吸顶表头、侧边栏

常见问题

  • absolute 元素不按预期定位 → 检查父级是否设置了 position: relative
  • sticky 不生效 → 父容器高度必须大于 sticky 元素,且不能有 overflow: hidden

五、常见布局坑点速查

现象可能原因解决方案
图片/视频超出父容器缺少 max-width: 100%; height: auto;添加该样式
行内元素(如 <span>)无法设置宽高默认 display: inline改为 inline-blockblock
两个按钮之间有看不见的间隙换行/空格产生的空白字符父容器 font-size: 0 或子元素 margin: 0,或使用 flex + gap
position: fixed 元素宽度异常固定定位元素宽度默认由内容撑开显式设置 widthleft/right
移动端点击元素出现灰色背景-webkit-tap-highlight-color设置 -webkit-tap-highlight-color: transparent

六、调试技巧

  1. 浏览器开发者工具(F12):

    • Elements 面板:选中元素 → Styles 可临时勾选/修改属性,Computed 看最终值。
    • 盒模型图:Styles 面板底部可看 margin/border/padding 具体数值。
    • 布局面板(Layout):查看 Grid/Flex 线框。
  2. 临时添加调试样式

    * { outline: 1px solid red !important; }  /* 显示所有元素边界 */
    
  3. 使用 AI 辅助

    • 粘贴代码 + 截图,问“为什么这个按钮没居中?”
    • 要求“解释这段 CSS 各行的作用”

七、学习建议

  • 不要背诵,而是理解规则间的组合关系。
  • 遇到问题先推演:主轴上用什么对齐?交叉轴呢?是否需要换行?
  • 小步验证:写最小示例(一个容器 + 三个色块),修改属性看实时效果。

最后:把这页速查卡保存下来,遇到布局问题时先对照排查。90% 的样式问题都能在这里找到方向。