理解CSS | 青训营

111 阅读3分钟

CSS选择器的特异度(Specificity)

特异度用于确定样式规则应用于哪个元素,当多个规则应用于同一个元素时,特异度决定了哪些规则具有更高的优先级。 特异度可以用a,b,c,d四个值来表示:

  • a代表内联样式的特异度
  • b代表id选择器的特异度,#a
  • c代表类选择器、伪类选择器和属性选择器的特异度,.,:,[]
  • d代表元素选择器和伪元素选择器的特异度,::

特异度计算的比较方式是先比较a的值,再比较b的值,然后是c的值,最后是d的值。

继承

某些属性自动继承父元素的计算值,除非显示指定一个值

当属性不自动继承父元素时,可以使用inherit等显示继承

初始值

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

CSS求值过程

屏幕截图 2023-07-29 105655.png 屏幕截图 2023-07-29 105720.png 屏幕截图 2023-07-29 105749.png

CSS盒子模型

屏幕截图 2023-07-29 105941.png

width/height

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

padding

  • 指定元素四个方向的内边距
  • 百分数相对于容器宽度

border

  • 指定容器边框样式、粗细和颜色
  • 三种属性
    • border-width
    • border-style
    • border-color
  • 四个方向
    • border-top
    • boder-right
    • border-bottom
    • border-left

通过透明,减小间隔,可以制作出三角形

margin

  • 指定元素四个方向的外边距
  • 取值可以是长度、百分数、auto
  • 百分数相对于容器宽度
	margin-left: auto;
	margin-right: auto;

块级和行级

Block Level Box

  • 不和其它盒子并列摆放
  • 适用所有的盒模型属性
  • 生成块级盒子
  • body、article、div、main、section、h1-6、p、ul、li等
  • display: block

Inline Level Box

  • 和其它行级盒子一起放在一行或拆开成多行
  • 盒模型中的width、height不适用
  • 生成行级盒子
  • 内容分散在多个行盒中
  • span、em、strong、cite、code等
  • display: inline

display

  • block:块级
  • inline:行级
  • inline-block:本身是行级,可以放在行盒中,作为一个整体
  • none:排版时被忽略

flex

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

Flexibility

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

grid

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

position

  • static 默认值,非定位元素
  • relative 相对自身原本位置偏移,不脱离文档流
  • absolute 绝对定位,相对非static祖先元素定位
  • fixed 相对于视口绝对定位