CSS | 青训营笔记

76 阅读3分钟

文章第一句话为“这是我参与「第四届青训营 」笔记创作活动的第3天

布局

布局包括常规流、浮动和绝对定位。其中,常规流包括行级 块级 表格布局 Flex布局 Grid布局

块级和行级

display属性

 display:  [ <display-outside> | <display-inside> ] | <display-listitem> | <display-internal> | <display-box> | <display-legacy> ;

display-outside指定了元素在流式布局中的角色

可选值:

  • block 块级元素
  • inline 行内元素

display-inside 指定了元素内部内容的布局方式

可选值:

  • flow-root 该元素生成一个块元素框,它建立一个新的块格式化上下文,定义格式化根的位置。
  • table 类似HTML中的元素
  • flex 类似块元素,根据flexbox模型布置内部
  • grid 类似块元素,并根据网格模型布置内部 image.png
  • 行级排版上下文 IFC

    IFC: Inline Formatting Context

    只包含行级盒子的容器会创建一个IFC

    IFC内的排版规则

    • 盒子在一行内水平摆放
    • 行放不下时,换行显示
    • text- align决定一行内盒子的水平对齐
    • vertical align决定个盒子在行内的垂直对齐
    • 避开浮动(loat)元素*

    块级排版上下文 BFC

    BFC: Block Formatting Context (BFC)

    某些容器会创建一个BFC

    • 根元素
    • 浮动、绝对定位、inline-blockFlex子项和Grid子项
    • overflow值不是 visible 的块盒
    • display: flow-root;

    BFC内的排版规则:

    • 盒子从上到下摆放
    • 垂直margin合并
    • BFC内盒子的 margin不会与外面的合并
    • BFC不会和浮动元素重香

    表格布局 table

    Flex布局

    Flexible Box 模型,通常被称为 flexbox,是一种一维的布局模型。它给 flexbox 的子元素之间提供了强大的空间分布对齐能力

    当使用 flex 布局时,首先想到的是两根轴线 — 主轴交叉轴。主轴由 flex-direction 定义,另一根轴垂直于它。我们使用 flexbox 的所有属性都跟这两根轴线有关,所以有必要在一开始首先理解它。 e87d277b7e95b4e7a525627d521626a.png

    概念

    —种新的排版上下文

    它可以控制子级盒子的:

    • 摆放的流向(↑ ↓ ← →)
    • 摆放顺序
    • 盒子宽度和高度
    • 水平和垂直方向的对齐
    • 是否允许折行

    flex-direction

    image.png

    justify-content

    水平方向 image.png

    align-items

    垂直方向 image.png

    Grid布局

    1. display: grid;使元素生成一个块级的Grid容器
    2. 使用 grid-template 相关属性将容器划分为网络
    3. 设置每一个子项占哪些行列

    盒模型 box-sizing

    标准盒模型 content-box

    image.png 如果你设置一个元素的宽为 100px,那么这个元素的内容区会有 100px 宽,并且任何边框和内边距的宽度都会被增加到最后绘制出来的元素宽度中。

    image.pngbox-sizing: content-box时,设置的width和height分别指向内容区content的宽高

    怪异盒模型 border-box

    设置的边框和内边距的值是包含在 width 内的。也就是说,如果你将一个元素的 width 设为 100px,那么这 100px 会包含它的 border 和 padding,内容区的实际宽度是 width 减去 (border + padding) 的值。border-box不包含margin

    box-sizing: border-box时,设置的width和height包括内容区content、内边距padding、边框border

    外边距重叠 margin collapse

    会形成外边距重叠的三种情况:

    • 同一层相邻两个元素的外边距重叠
    • 没有内容将父元素和后代元素分开
    • 空的块元素

    清除边距重叠

    1. 设置float属性 float属性值不为none

    2. 设置position属性 position属性值不为static

    3. 清除浮动clearfix

    .container::after {
        content: '';
        display: block;
        clear: both;
    }
    

    当四条边框颜色不同时

    codepen.io/fat-tsai/pe…