理解CSS | 青训营笔记

180 阅读4分钟

CSS是什么?

用来定义页面元素的样式

组成

选择器(Selector)

声明(Declaration)

属性(Property), 属性值(Value)

如何在页面使用CSS

外链(推荐)

嵌入

内联(不需要选择器,但不推荐)

CSS如何工作的

  1. 浏览器加载HTML
  2. 解析HTML
  3. 创建DOM树,加载CSS
  4. 解析CSS添加样式到DOM树形成渲染树
  5. 展示页面

选择器 Selector

  • 通配选择器:*
  • 标签选择器:h1 p 等
  • id选择器:# + id(id值是唯一的)
  • 类选择器:. + class(可重复)
  • 属性选择器:根据标签的某些属性来进行选择(可用来筛选一些特定的属性)

伪类

状态伪类

链接(是否点击过,鼠标指针是否停在链接上)

输入框(聚焦状focus)

结构伪类

根据DOM节点中的相对位置

组合类

image.png

选择器组:将多个标签通过逗号连接起来(h1,p,span,div...)

排版

颜色

RGB

#000000 rgb(0,0,0) (0~255)

HSL

Hue(色相)(0~360)

Saturation(饱和度)(0~100%)

Lightness(亮度)(0~100%)

hsl(0,0%,0%)

alpha 透明度

alpha为1时不透明,为0时透明

#ff000066

rgba(255,0,0,1)

hsla(0,100%,50%,1)

字体

font-family

font-family最后加一个通用字体族

font-size

字体大小

font-weight

字体的粗细

normal = 400

bold = 700

line-height

image.png

white-space

如何处理空白

normal(自动换行)

nowarp(不换行)

深入CSS(上)

CSS生效的规则

选择器优先级

特异度(选择器的特殊程度)

image.png

继承

某些属性会自动继承父元素的计算值

显示继承

* {
    box-sizing:inherit;
}

初始值

每个属性都有一个初始值

background-color的初始值为transparent

margin-left的初始值为0

background-color:initial(重置为初始值)

CSS生成过程

image.png

image.png

image.png

布局(Layout)是什么

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

布局相关技术

常规流

  • 行级
  • 块级
  • 表格布局
  • FlesBox
  • Grid布局

浮动

绝对定位

盒模型

image.png

width

  • 指定content box宽度
  • 取值为长度、百分数(相对于容器的content box宽度)

height

  • 指定content box高度
  • 取值为长度、百分数(容器有指定的高度时百分数才生效)

padding

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

image.png

border

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

margin

  • 指定元素四个方向的外边距
  • 取值为长度,百分数,auto(水平居中)
  • 百分数相对于容器的宽度
margin collapse

深入CSS(下)

块级VS行级

盒子

Block Level Box

  • 不和其他盒子并列摆放
  • 使用所有的盒模型属性

Inline Level Box

  • 和其他行级盒子一起放在一行或拆开成多行
  • 盒模型中的width、height不适用

元素

块级元素

body, article, div, main, section等生成块级盒子

display:block

行级元素

span, em, strong等生成行级盒子,内容分散在多个行盒中

display:inline

display

  • block 块级盒子
  • inline 行级盒子
  • inline-block 本身是行级,可放在行盒中,不可以被拆散成多行

行级排版上下文

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

  • IFC内排版规则

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

块级排版上下文

  • 某些容器会创建一个BFC

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

Flex Box是什么?

  • 一种新的排版上下文

  • 可以控制子级盒子

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

Grid网格布局

image.png

float浮动

实现文字环绕图片

position位置

  • static 默认值
  • relative 相对位置
  • absolute 绝对定位,相对与非static祖先元素定位
  • fixed 相对于视口绝对定位