深入CSS | 青训营笔记

133 阅读4分钟

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

一.选择器的特异度

优先级:id>伪类>标签

因此: .bin .pre会覆盖.bin的属性

二.继承

某些属性会自动继承其父元素的计算值,除非显式指定一个值 这里的pre就是显示指定了值,因此他没有继承父元素的值

什么是子元素?

eg: strong为p的子元素

<p><strong></strong></p>

注意:与盒子模型相关的元素不可被继承 如果非要继承父级:运用显示继承

*{box-sizing:inherit;}

此代码将不可继承的box-sizing的所有元素都变为inherit,既可以从父类继承

三.初始值

  • css中,每个属性都有一个初始值为0
  • 可以使用initial关键字显示重置为初始值
    • eg:background-color:initial

四.css的求值过程

1659028099314.png

五.布局是什么

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

六.布局的相关技术

1.盒子模型

eg:

1659028224458.png

1.width

  1. 用来指定content box宽度
  2. 取值为长度,百分数,auto
  3. auto由浏览器根据其他的属性确定
  4. 百分数相对于容器的content box宽度而定
  5. 容器有指定的宽度时,百分数才生效,否则为auto

2.padding

  1. 指定元素的四个方向的内边距
  2. 百分数相对于宽度

3.border

用来指定边框的样式,粗细和颜色

边框有三个属性:

  • border-width
  • border-style (eg:border-style:solid(实线)/dotted(虚线))
  • border-color

可以进行组合:eg:

  • border:1px solid red
  • border-left:1px solid red

4.margin

  • 相当于当前盒子对于其他盒子的距离
  • 指定元素四个方向的外边距
  • 取值为长度,百分数,auto
  • 百分数相对于宽度,没有宽度为auto(水平居中)

5.overflow

在使用外边框时,边框内的文字超出边框时使用

  • overflow:visible 显示超出的文字

91b052c3cf2061529e5c0d0a04afb1c.png

  • overflow:hidden 去掉超出的文字

16fe66676e9933f5aa4a53c49b4bec8.png

  • overflow:scorll 使用下拉条

0bf51bbfc90085b7cca177175f29a48.png

6.四个方向

  • 分别为:top/right/left/bottem
  • 不管是padding还是border和margin都有四个方向

287e05b0bc434829c21fb2a3a9ff42c.jpg

2.行级和块级

1.块级

  • 不和其他的盒子并排摆放
  • 适用所有的盒子模型属性
  • 块级元素有:body,article,div,main,h1-6,p

2.行级

  • 和其他行级盒子一起放在一行或拆开成多行
  • 盒子模型中的width,height不适用
  • 行级元素有:span,em,strong,cite

3.display属性

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

4.overflow

  • 单词超出块元素换行
  • overflow-wrap:bread-word

5.行级排版上下文

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

6.块级排版上下文

  • 某些容器会创建一个BFC
  • 根元素
  • 浮动,绝对定位,inline-block
  • FLEX子项和Grid子项
  • overflow值不是visible的块盒
  • display:flow-root
  • BFC内的排版规矩:
    • 盒子从上到下拜访
    • 垂直margin合并
    • BFC内的盒子的margin不会与外面的合并
    • BFC不会和浮动元素重叠

7.Flex Box是什么

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

8.justify-content

1.flex-start

46f34ed27370403ef161fbe6e294558.png

2.flex-end

ce5501f19f23114f61d7d3fc76ff20c.png

3.center

1f61058baaa8339ed0023ed7a2c3371.png

4.space-between

3a39e82220e0be6a567997ceea4646c.png

5.space-around

feb9e0d631c2c6329a0c543096bac10.png

6.space-evenly

72ce160261d8e74985147c732bd1d4c.png

9.align-items

1.flex-start

adfe4148e8cfa65a8acf0cbf09413fe.png

2.flex-end

dadad11dbd02727069d7fa7418df43b.png

3.center

2deb62ea1429a8e4d94ae99facbcc19.png

4.stretch

4720a001e5625c429a92a43def0f9b0.png

5.baseline

1fb9370b6ea26fcdf2d6a5a68beae77.png

10.Flexibility(灵活)

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

  • flex-grow 有剩余空间时的伸展能力
  • flex-shrink 容器空间不够时的收缩能力
  • flex-basis 没有伸展或收缩时的基础长度

由于在这个环境运行与浏览器结果不一样,这里附上浏览器截图

f4f9ba18644f2e1c8441ea36270cd85.png

11.Grid布局

1.区别:

1659033627845.png

2.display:grid

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

3.划分网络

.container {
    grid-template-columns: 40px 50px auto 50px 40px; 
    grid-template-rows: 25% 100px auto; 
}

1659034552036.png 值可以是长度值,百分比,或者 等份网格容器中可用空间(使用 fr 单位)

4.grid line网格线

可以明确指定网格线(Grid Line)1659034597993.png

我们可以用网格线来定位:

grid-row-start:1
    -column-start:1
    -row-end:3
    -column-end:3;   

也可以写为:

grid-area:1/1/3/3

结果划分出了以下范围:

1659034907660.png

3.浮动

用来实现照片环绕文字的一个效果,在图片上使用之后文字会自动绕开图片

float:right/left

4.position属性

  1. static:默认值,非定位元素
  2. relative:相对于自身原本位置偏移,不脱离文档流
  3. absolute:绝对定位,相对非static祖先元素定位
  4. fixed:相对于视觉窗口绝对定位