QINGFENG

重学 CSS – 尺寸与位置

发布于 2024/09/22

本文深入探讨了CSS中与尺寸和位置相关的核心概念。文章详细介绍了CSS盒模型、块级盒子和内联盒子的特性、标准盒模型和怪异盒模型的区别,以及浮动和定位的使用技巧。对于想要全面理解CSS布局原理的开发者来说,这篇文章提供了系统而深入的学习材料。

CSS 盒模型的注意点

  • Padding 不能为负值,而 Margin 可以为负值
  • 背景色会平铺到非 Margin 区域(Content + Padding + Border)
  • Margin-top 传递到父元素的现象和解决方案
    • 给父元素加边框
    • BFC
    • 用 padding-top 替代 margin-top
  • Margin 上下叠加的解决方案
    • margin-top 和 margin-bottom 上下叠加的问题和解决方案
    • 只给一个元素加 margin-top 或 margin-bottom
    • 用现代布局方式:flex、grid

块级盒子和内联盒子

CSS 有两种不同表现的盒子:块级盒子(Block)、内联盒子(Inline)

  • 块级盒子: div, p, h1…
  • 内联盒子: span, a, strong

块级盒子的特性

  • 独占一行
  • 支持所有样式
  • 不写宽度时,会和父容器的宽度相同
  • 所占区域是一个矩形

内联盒子的特性

  • 盒子不会产生换行
  • 有些样式不支持,如 width,height
  • 不写宽度的时候,宽度由内容决定
  • 所占的区域不一定是矩形
  • 内联标签之间会有一些空隙

标准盒模型和怪异盒模型

标准模型

如果你给盒子设置 width 和 height,实际设置的是 content box。padding 和 border 再加上设置的宽高一起决定整个盒子的大小。 Content-Box = width, height + content

怪异盒模型

在怪异模型中,所有宽度都是可见宽度,所以内容宽度是该宽度减去边框和填充部分 Border-Box = width, height + content + padding + border

应用

  • 量尺寸时不需要再去计算一些值
  • 解决一些需要设置百分比和盒模型值

浮动

清除浮动的方式

  • Clear 属性
  • BFC
  • 空标签
  • .clearfix::after{}

浮动特性注意点

  • 只会影响后面的元素
  • 文本不会被浮动元素覆盖
  • 具备内联盒子的特性:宽度由内容决定
  • 具备块级盒子的特性:支持所有样式
  • 浮动放不下:会自动换行

定位

Position 的值

  • sticky
  • static
  • fixed
  • relative
  • absolute

绝对定位的特性

  • 绝对定位的元素脱离的文档流,绝对定位的元素不占空间
  • 具备内联盒子的特性:宽度由内容决定
  • 具备块级盒子的特性:支持所有样式
  • 绝对定位的元素相对于最近的非 static 祖先元素定位。当这样的祖先元素不存在时,则相对去可视区。

固定定位的特性

  • 固定定位和绝对定位相似,但会固定在可视区中
  • 具备内联盒子的特性:宽度由内容决定
  • 具备块级盒子的特性:支持所有样式
  • 固定定位不受祖先元素影响

黏性定位的特性

黏性定位可以被认为是相对定位和固定定位的混合。元素在跨越特定阈值前是相对定位,跨越阈值后是固定定位