深入CSS(下)

103 阅读3分钟

一、CSS盒模型- 行级与块级

1.块级VS行级

块级行级
不和其他盒子并列摆放和其他行级盒子一起放在一行或拆分成多行
适合所有的盒模型属性盒模型中的width和height不适用

2.组成元素

块级元素行级元素
生成块级盒子生成行级盒子,内容分散在多个行盒中
body、article、div、main、section、h1-6、p、ul、li等span、em、strong、cite、code等
display:blockdisplay:inline
注:
display属性:
1.block :块级盒子;
2.inline:行级盒子;
3.inline-block:本身是行级,可以放在行盒中;可以设置宽高;作为一个整体不会被拆散成多行
4.none:排版上完全被忽略

3.常规流

  • 根元素、浮动和绝对定位的元素会脱离常规流,其他元素都在常规流之内
  • 常规流中的盒子,在某种排版上下文中参与布局

3.1 行级排版上下文(inline Formatting Context --IFC)

  • 只包含行级盒子的容器会创建一个IFC
  • IFC内排版规则:
  1. 盒子在一行内水平摆放
  2. 一行放不下时,换行显示
  3. text-align决定一行内盒子的水平对齐
  4. vertical-align决定一个盒子子啊行内的垂直对齐
  5. 避开浮动元素

3.2 块级排版上下文 (Block Formatting Context --BFC)

  • 某些容器会创建一个BFC:根元素;浮动、绝对定位、inline-block;Flex子项和Grid子项;overflow值不是visible的块盒;display:flow-root;
  • BFC内的排版规则:
  1. 盒子从上到下摆放
  2. 垂直margin合并
  3. BFC内盒子的margin不会与外面的合并
  4. BFC不会和浮动元素重叠

3.3 Flex Box

  • 一种新的排版上下文(通过display:flex可以设置)
  • 可以控制子级盒子: 摆放的流向、摆放的顺序、盒子宽度和高度、水平和垂直方向的对齐、是否允许折行
  • flexibility

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

felx-grow (有剩余空间时的伸展能力)、flex-shrink(容器空间不足时收缩的能力)、flex-basis(没有伸展或收缩时的基础长度)

3.4 Grid布局

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

grid line网格线

grid-area 网格区域

二、浮动:

实现图片环绕文字等功能特性。(了解即可)

三、 绝对定位

position属性

static :默认值,非定位元素
relative :相对自身原本位置偏移,不脱离文档流
(在常规流里面布局,相对于自己本应该在的位置进行偏移;
使用topleftbottomright设置偏移长度;流内其他元素当它没有偏移一样布局)
absolute :绝对定位,相对非static祖先元素定位
(脱离常规流;相对于最近的非static祖先定位;不会对流内元素布局造成影响)
fixed :相对于视口绝对定位

自我感悟:

  • 保持好奇,实践出真知,一定要自己去敲代码实现理解
  • 勇于迈出尝试的第一步

    注:进一步学习可以充分利用MDN和W3C CSS规范并持续关注新出现的CSS新特性