深入CSS | 青训营笔记
这是我参与「第四届青训营 」笔记创作活动的的第3天
盒模型
-
width
- 指定content box宽度
- 取值为长度、百分数、auto
- auto由浏览器根据其它属性确定
- 百分数相对于容器的content box宽度
-
height
- 指定content box高度
- 取值为长度、百分数、auto
- auto取值由内容计算得来
- 百分数相对于容器的content box高度
- 容器有指定的高度时,百分数才生效
设置一个值,两个值,四个值的区别
-
boder
-
三种属性
- border-width
- border-style
- border-color
-
四个方向
- border-top
- boder-right
- border-bottom
- border-left
-
当四条边框颜色不同时,宽高为零,变成四个三角形组合而成的正方形,由此绘制三角形
-
margin
- 指定元素四个方向的外边距
- 取值可以是长度、百分数、auto
- 百分数相对于容器宽度
其中,可以使用 margin:auto 水平居中
margin collapse 外边距折叠
box-sizing:border-box 把内容、内边距、边距和为一体
overflow 控制溢出内容
overflow:●visible 显示●hidden 隐藏● scroll 溢出内容滚动显示
块级和行级的区别
| Block Level Box | Inline Level Box |
|---|---|
| 不和其它盒子并列摆放 | 和其它行级盒子一起放在一行或拆 开成多行 |
| 适用所有的盒模型属性 | 盒模型中的width、height不适用 |
| 块级元素 | 行级元素 |
| 生成块级盒子 | -生成行级盒子 -内容分散在多个行盒(line box)中 |
| body、article、div、main、 section、.h1~h6、p、ul、li等 | span、em、strong、cite、code等 |
| display:block | display:inline |
可以使用 display 属性进行更改
block 块级盒子 inline 行级盒子 inline-block 本身是行级,可以放在行盒中;可以设置宽 高;作为一个整体不会被拆散成多行 none 排版时完全被忽略
常规流Normal Flow
- 根元素、浮动和绝对定位的元素会脱离常规流
- 其它元素都在常规流之内(in-flow)
- 常规流中的盒子,在某种排版上下文中参与布局
- 行级排版上下文 块级排版上下文 Table排版上下文 Flex排版上下文 Grid排版上下文
行级排版上下文
-
Inline Formatting Context(IFC)
-
只包含行级盒子的容器会创建一个IFC
-
IFC内的排版规则
- 盒子在一行内水平摆放
- 一行放不下时,换行显示
- text-align决定一行内盒子的水平对齐
- vertical-align决定一个盒子在行内的垂直对齐 避开浮动((float)元素*
行级上下文中 overflow-wrap 默认normal值,可选break-word
normal模式下,单词过长会溢出,但是break-word模式下,单词过长就在单词内换行
块级排版上下文
-
Block Formatting Context (BFC)
-
某些容器会创建一个BFC
- 根元素
- 浮动、绝对定位、inline-block
- "Flex子项和Grid子项
- overflow值不是visible的块盒
- display:flow-root;
-
BFC内的排版规则
- 盒子从上到下摆放
- 垂直margin合并
- BFC内盒子的margin不会与外面的合并
- BFC不会和浮动元素重叠
Flex排版上下文
-
Flex Box是什么?
-
一种新的排版上下文
-
它可以控制子级盒子的:
- 摆放的流向(→←一↑↓)
- 摆放顺序
- 盒子宽度和高度
- 水平和垂直方向的对齐
- 是否允许折行
-
flex-grow 规定了 flex-grow 项在 flex 容器中分配剩余空间的相对比例
flex:1 | flex-grow:1 |
|---|---|
flex:100px | flex-basis:100px |
flex:2 1 | flex-grow:2;flex-shrink:1 |
flex:1 100px | flex-grow:1;flex-basis:100px |
flex:2 0 100px | flex-grow:2;flex-shrink:0;flex-basis:100px |
flex:auto | flex:1 1 auto |
flex:none | flex:0 0 auto |
Grid布局
二维排版布局
-
display:griddisplay:grid使元素生成一个块级的Grid容器- 使用
grid-template相关属性将容器划分为网格 - 设置每一个子项占哪些行列
-
grid line网格线
position属性
| static | 默认值,非定位元素 |
|---|---|
| position | 相对自身原本位置偏移,不脱离文档流 |
| absolute | 绝对定位,相对非static祖先元素定位 |
| fixed | 相对于视口绝对定位 |
-
position:position- 在常规流里面布局
- 相对于自己本应该在的位置进行偏移
- 使用top、left、bottom、right设置偏移长度
- 流内其它元素当它没有偏移一样布局
-
position:absolute- 脱离常规流
- 相对于最近的非static祖先定位
- 不会对流内元素布局造成影响
学习CSS的几点建议
- 充分利用MDN和W3C CSS规范
- 保持好奇心,善用览器的开发者工具
- 持续学习,CSS新特性还在不断出现
\