理解CSS(上) | 青训营笔记

74 阅读3分钟

一、CSS基础知识

1.层叠(Cascading)、优先级

image.png

  • 层叠三大规则:(优先程度递减)
    • 样式表来源
    • 选择器优先级
    • 源码位置

2.选择器有哪些

  • 基础选择器
    • #id:ID选择器。
    • Tagname:类型选择器或者标签选择器。
    • .class:类选择器。
    • *:通用选择器。该选择器匹配所有元素
  • 组合器
    • 子组合器(>) --匹配的目标元素是其他元素的直接后代。如: .parent >.child
    • 相邻兄弟组合器(+) - -匹配的目标元素紧跟在其他元素后面。如: p +h2
    • 通用兄弟组合器(~) --匹配所有跟随在指定元素之后的兄弟元素,如: liactive ~ li
    • 复合选择器多个基础选择器可以连起来使用,如: h1.page-header
  • 属性选择器
    • 通过约束属性值,div[data title="aa"]
  • 伪类选择器
    • 选中处于某个特定状态或相对于其父级或兄弟元素的位置的元素,如:first-child,:hover
  • 伪元素选择器
    • 匹配在文档中没有直接对应HTML元素的特定部分,或插入内容。如h2:: frstletter,div::before
  • 逻辑选择器
    • 较新的选择器:is() :has() :where() :not()

3.选择器优先级

内联 > id > class = attribute = pseudo-class > type = pseudo-element

4.注意

  • 选择器尽量少用id
  • 尽量不要用!important
  • 自己的样式加载在引用库样式的后面

5.继承

image.png

6.CSS的值和单位

image.png

7.盒模型

image.png

  • 负外边距
    • padding、border、margin中,只有margin可以设置负值

二、布局

1.CSS 3之前/之后常用布局

  • Normal Flow常规流
  • Float浮动流
  • Positioning定位流

  • Flex弹性盒子布局
  • Grid网格布局
  • Multicol多列布局
  • 一维空间布局
  • 二维空间布局
  • 文本、内容的多列展示

2.常规流布局

image.png

3.块级格式化上下文

  • BFC(block formatting context),是一种格式规范。如果说一个盒子是BFC或者有BFC特性,那么BFC表示的是block formatting context root。不管它外部显示类型是什么,但是它的内部显示类型是flow-root,其实就是这个盒子内部形成了一个新的块级格式化上下文。

  • 如何触发一个盒子的BFC特性?以下条件满足任何一个即可:

    • display: flow-root 1 inline-block
    • position: absolute| fixed
    • float: 不为none
    • overflow: 不为visible

4.外边距塌陷

  • 会产生外边距塌陷的情况:

image.png

  • 消除外边距塌陷的方法:

image.png

5.弹性盒子布局

  • Flexible Box Layout是为了提供更加高效灵活的布局方式,在即便是宽高未知的情况下,也能排列和分割一个盒子内部的布局。而且在不同布局方向(横向/纵向)的调整更为灵活。

6.网格布局

  • 2017年推出的Grid布局可以定义由行和列组成的二维布局,然后将元素放置到网格中。元素可以只占其中一个单元格,也可以占据多行或多列。

image.png

7.Grid和Flex布局的使用策略

  • Flex(适用于大面积或整体布局)
    • 一维布局
    • 基于内容
    • 浏览器兼容性更好
  • Grid(适用于小面积或组件中,或Grid Item中)
    • 二维布局
    • 基于布局
    • 2017年后浏览器的版本普遍支持

三、层叠上下文(The Stacking Context)

1.什么是层叠上下文

  • 层叠上下文是对HTML元素的三维构想,将元素沿着垂直屏幕的虚构的Z轴排开

2.形成新的层叠上下文的条件(任一即可)

  • position: relative或absolute;并且z-index不是auto
  • position: fixed或sticky
  • flex或grid的子元素;并且z-index不是auto
  • opacity的值小于1
  • transform的值不为none
  • will-change的值不为通用值
  • ...详见规范*

3.层叠顺序

层叠顺序不仅指不同的层叠上下文的顺序,同一个层叠上下文内,元素间也有顺序

4.编写z-index的建议

  • 使用css变量或者预处理语言的变量,管理z-index的值
  • 将预设间隔设置10或100,方便后续的插入

image.png