深入CSS(下) | 青训营笔记

128 阅读3分钟

盒模型布局规则 | 青训营笔记

这是我参与「第五届青训营 」笔记创作活动的第5天. 上一节中学习了什么是盒模型, 这一节将学习盒模型中常见的布局规则 : 块级和行级.

块级和行级

块级盒子

  • 不和其他盒子并列摆放,单独一行
  • 使用所有盒模型中的属性,如边距, border等属性.

行级盒子

  • 和其它行级盒子一起放在一行或者拆分成多行
  • 盒模型中的width, height不适用(用了也不生效), 由内容决定宽高, 内容越多,宽高越大.

盒子是CSS中的概念, 元素是html中的概念

块级元素

  • 默认情况下,块级元素生成块级盒子
  • 常见块级标签有 : body, article, div, main, section, h1-6, p, ul, li

行级元素

  • 生成行级盒子, 内容分散在多个行盒里面.
  • 常见行级标签有 : span, em, strong, cite, code

可以使用display:blockdisplay:inline把元素转换成块级或行级盒子.

display属性

具有以下几个属性值

  • block
  • inline
  • inline-block: 本身是行级的, 可以和inline元素放在同一行. 作为一个整体, 只能放在一行里面, 不能被拆散成多行. 可以设置宽高.
  • none : 排版时完全忽略, 不占据布局.

常规流

在 CSS 2.1 规范中定义了常规流(Normal Flow). 常规流中的任何一个盒子总是某个格式区域formatting context)中的一部分.

image-20230116153337726.png

常见的格式有行级排版, 块级排版, Flex排版和Grid排版. 下面介绍行级和块级.

行级 排版上下文

Inline Formatting Context ( IFC )

  • 如果一个盒子里只有一个行级盒子, 这样的容器就会创建一个IFC

  • IFC内的排版规则

    • 盒子在一行内水平展示, 一行放不下时, 换行展示.
    • text-align 决定一行内盒子的水平对齐
    • vertical-align 决定垂直方向的对齐
    • 行盒会避开浮动元素

overflow-wrap:break-word 可以使得超出元素的文字换行.

块级 排版上下文

Block Formatting Context ( BFC )

  • 某些容器会创建一个BFC

    • 根元素, 即html标签
    • 浮动, 绝对定位, inline-block
    • Flex子项和Grid子项
    • overflow的值不是visible的块盒, 如overflow:hidden
    • display:flow-root;
  • 排版规则

    • 盒子从上到下摆放
    • 垂直方向的margin会合并
    • BFC内盒子的margin不会与外面的合并, 例如将div元素设置为display:flow-root;overflow:hidden;来与上下文的盒子分隔开.
    • BFC不会和浮动元素重叠.

既有块级又有行级如何处理

通常不允许一个父级里面既有块级又有行级, 因此会创建匿名的盒子来包裹文字, 如下图右侧所示效果.

image-20230116154630655.png

值得注意的是, 给span标签设置border, 第一行文字没有右边框, 第三行文字没有左边框, 可以看出行内元素的排版.