深入CSS | 青训营笔记

69 阅读4分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 3 天

选择器的特异度与优先级

image.png

每一种选择器都有自己的权重,依次是
行内样式 > ID选择器 > 类、属性、伪类 > 元素、伪元素选择器

CSS特异性

继承

某些属性会自动继承其父元素的计算值,除非显式指定一个值。例如字体相关的属性都是可以继承的,但是盒模型的属性(宽度、高度等)是不可继承的。

继承

显式继承

可以通过给属性设置inherit来强制某个属性继承

image.png

初始值

当没有指明样式,也没有样式可以继承时,就会表现为初始值

  • CSS中,每个属性都有一个初始值
    • background-color的初始值为 transparent
    • margin-left的初始值为0
  • 可以使用initial关键字显式重置为初始值
    • background-color:initial

CSS求值过程

CSS求值过程

布局(Layout)

是什么

  • 确定内容的大小和位置的算法
  • 就没时间元素、容器、兄弟节点和内容等信息来计算

布局相关技术

image.png

盒模型

  • content-box

image.png

  • width/height

    • 指定content box宽度
    • 取值为长度、百分数、auto
    • auto由浏览器根据其它属性确定
    • 百分数相对于容器的content box宽度
  • width/height

    • 指定content box高度
    • 取值为长度、百分数、auto
    • auto由浏览器根据其它属性确定
    • 百分数相对于容器的content box高度
    • 容器有指定高度时,百分数才生效

    image.png

  • padding

    • 指定元素四个方向的内边距(border和content之间的距离)
    • 百分数相对于容器宽度

    image.png

  • border

    • 指定容器边框样式、粗细和颜色

    image.png

  • margin

    • 指定元素四个方向的外边距
    • 取值可以是长度、百分数、auto
    • 百分数相对于容器宽度
  • 使用 margin:auto 水平居中

  • margin collapse,元素之间的边距不会简单相加,而是取最大值

  • overflow 超出部分的显示

    • visible
    • hidden
    • scroll
  • border-box

和content-box不同,border-box的width和height指的是border的宽高
box-sizing

image.png

块级 vs 行级

Block Level BoxInline Level Box
不和其他盒子并列排放和其它行级盒子一起放在一行或拆开成多行
适用于所有盒模型属性盒模型中的width、height不适用
块级元素行级元素
生成块级盒子生成行级盒子;内容分散在多个行盒中
body、article、div、main、section、h1-6、p、ul、li、等sapn、em、strong、cite、code等
display:blockdisplay:inline

display属性

  • block 块级盒子
  • inline 行级盒子
  • inline-block 本身是行级,可以放在行盒中;可以设置宽高;作为一个整体不会被拆散成多行
  • none 排版时完全被忽略

常规流

  • 根元素、浮动和绝对定位的元素会脱离常规流
  • 其它元素都在常规流之内(in-low)
  • 常规流中的盒子,在某种排版上下文中参与布局

行级排版上下文

  • Inline Formatting Context(IFC)
  • 只包含行级盒子的容器会创建一个IFC
  • IFC内的排版规则
    • 盒子在一行内水平摆放
    • 一行放不下时,换行显示
    • text-align决定一行内盒子的水平对齐
    • vertical-align决定一个盒子在行内的垂直对齐
    • 避开浮动(float)元素*

块级排版上下文

  • Block Formatting Context (BFC)
  • 某些容器会创建一个BFC
    • 根元素、浮动、绝对定位、inline-block
    • Flex子项和Grid子项
    • overflow值不是visible的块盒
    • display:flow-root;

BFC内的排版规则

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

FlexBox

  • 一种新的排版上下文
  • 它可以控制子级盒子的:
    • 摆放的流向(→←↑↓)
    • 摆放顺序
    • 盒子宽度和高度
    • 水平和垂直方向的对齐
    • 是否允许折行

flex-direction

image.png

主轴与侧轴

image.png

justify-content

image.png

align-items

image.png

align-self

image.png

order

image.png

flexibility

  • 可以设置子项的弹性:当容器有剩余空间时,会伸 展;容器空间不够时,会收缩
  • flex-grow有剩余空间时的伸展能力
  • flex-shrink容器空间不足时收缩的能力
  • flex-basis没有伸展或收缩时的基础长度

flex

image.png

Grid布局

display:grid

image.png

划分网格

image.png

image.png

网格区域

浮动

主要做文字环绕图片的效果
浮动

position 属性

  • static 默认值,非定位元素

  • relative 相对自身原本位置偏移,不脱离文档流

    image.png

  • absolute 绝对定位,相对非static祖先元素定位

    image.png

  • fixed 相对于视口绝对定位