深入理解CSS笔记|青训营

70 阅读5分钟

理解CSS

一、基础知识

1、层叠三大规则
①优先程度递减

样式表来源→选择器优先级→源码位置

②重要程度递增

用户代理样式(浏览器默认样式)→用户样式表(很少有)→作者样式表→作者样式表中的!important→用户样式表中的!important→用户代理样式表中的!important

2、选择器

基础:

  • #id~ID选择器
  • class~类选择器
  • *~通用选择器

组合器:

  • 子组合器(>)---匹配目标元素是其它元素的直接后代。
  • 相邻兄弟组合器(+)---匹配的目标后元素紧跟在其它元素后面
  • 通用兄弟组合器 (~)---匹配所有跟随在指定元素之后的兄弟元素

复合选择器---多个基础选择器可以连起来使用

属性选择器---通过约束属性值

伪类选择器---选中处于某个特定状态或相对于其父级或兄弟元素位置的元素

伪元素选择器---匹配在文档中没有直接对应HTML元素的特定部分或插入内容

3、选择器优先级

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

4、继承

可以使用inherit关键字显示指定一个属性值从其父元素继承

5、盒子模型

margin|border|padding|content

  • 控制盒子类型:display : block ,nine...

  • 控制盒中内容流:overflow : auto , hidden..

  • 是否可见: visiblity,vsible,hidden

二、布局

CSS3之前的布局

  • Normal Flow 常规流

  • Float 浮动流

  • Positioning 定位流

CSS3之后的新增布局

  • Flex弹性盒子布局(一维)

  • Grid网格布局(二维)

  • Multicol 多列布局

触发BFC,以下条件满足任何一个即可:

  • display: flow-root| inline-block

  • position: absolute|fixed

  • float:不为 none

  • overflow:不为visible

1.Grid

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

三、层叠上下文

对HTML元素的三维构想,将元素沿着垂直屏幕的虚构的Z轴排开。

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

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

四、变形、过渡、动画

1、transform变形
  • 2D相关属性:transform:

    • translate(移动)
    • rotate(旋转)
    • scale(放缩)
    • matrix(变形矩阵)
    • transform-origin:right top.center等表示变形时依据的原点,
  • 3D相关属性:

    • translate3d

    • rotate3d

    • scale3d

    • matrix3d等

    • transform-origin:right top,50px.30px等表示变形时依据的原点。

    • transform-systyle:flat或preserve-3d看子元素的3d表现

    • perspective:观看点距离z=0这个平面的距离,可以在transform中用perspective()使用作为当前元素.也可以直接使用,给后代元素一个统一值.

    • perspective-origin:观看者的位置,如top.bottom等.

    • backface-visibility:元素正面只有朝向观察者可见-visibility:

    • animation-*相关属性用来为元素添加动画

    • animation-name 定义好的关键帧的名字

    • animation-duration:动画时长

    • animation-timing-function 动画节奏

    • animation-delay:延时开始的时间.

    • animation-iteration-count 执行次数

    • animation-direction 是否反向或交替

    • animation-fill-mode 动画执行前后的样式采用

    • animation-play-state 动画运行状态

外链<link rel="stylesheet" href="style.css">

嵌入<style></style>

内联<p style="margin:lem 0">...</p>

CSS是如何工作的?

加载HTML→解析HTML→创建DOM树→展示页面

​ ↓ ↑添加样式到DOM节点

​ 加载CSS→解析CSS

选择器selector
  • 找出页面中的元素,以便给他们设置样式
  • 使用多种方式选择元素
    • 按照标签名、类名或id
    • 按照属性
    • 按照DOM树中的位置
组合:
  • 直接组合(AB)满足A同时满足B input:focus
  • 后代组合(AB)选中B,如果它是A的子孙nav a
  • 亲子组合(A>B)选中B.如果它是A的子元素section>a

兄弟选择器(A~B)选中B如果它在A后且和A同级h2~p

相邻选择器(A+B)选中B,如果它紧跟在A后面h2+p

alpha透明度(0-1)
  • #ff000078
  • rgba(255,0,0,0.47)
  • hsla10,100%,50%,(0.47)

字体:font-family

行高:line-height

粗细:font-weight

1、选择器优先级
  • 选择器的特异度(Specificity)
  • 比较id,(伪)类、标签的个数,多则大
2、继承:

​ 和文字相关的属性能继承.和盒模型相关的不能继承

3、布局相关技术
  • 常规流:行级、块级、表格布局、FlexBox、Grid布局
  • overflow visible hidden scroll

​ 谥出 (可见) (隐藏) (滚动条)

块级(disploy : block)∶不和其它盒子并列摆放 行级(disploy :inline):和艾它g级显子-起放龙-行或拆丹菅行、盒模型的width和heiqht不适用

行级排版上下:文会创建一个IFC
IFC内的排版规则
  • 盒子在一行内水平摆放

  • 一行放不下时,换行显示

  • text-align 决定一行内盒子的水平对齐

  • vertical-align决定一个盒子在行内的垂直对齐

  • 避平浮动元素

块级排版上下文
某些客器会创建一个BFC
  • 根元素

  • 浮动、绝才定位,inlink - block

  • Flex子项和Grid子项

  • overflow值不是visible的块盒

  • display :flow-root

BFC内排版规则
  • 盒子从上到下摆放

  • 垂直margin合并

  • BFC内盒子的wargin不会与外面的合并

  • BFC不会和浮动元素重合

Flex布局

主轴:justify-content

  • 左对齐 flex-start

  • 右对齐 flex-end

  • 居中

    • center
    • space - between
    • space - around
    • space - evenly

侧轴:align-items

  • 上对齐 flex-start

  • 下对齐 flex-end

  • 居中

    • center

    • stretch

    • baseline

Flexibility 可以设置子项的弹性:当容器有剩余空间时.会伸展;容器空间不够时,会收缩.

  • flex-grow有剩余空间时的伸展能力
  • flex-shrink容器空间不足时收缩的能力
  • flex-basis 没有伸展或收缩时的基础长度
Grid布局
  • display:grid 使元素生成一个块级的Grid容器
  • 使用grid-template 相关属性将容器划分为网样
  • 设置每一个子项占哪些行/列
  • 划分:行(grid-template-columns)列(grid-template-rows

Float 浮动:文字环绕图片

绝对定位(position属性)

static 默认值.非定位元素

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

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

fixed 相对于视口绝对定位