深入CSS(二)| 青训营笔记

121 阅读5分钟
这是我参与「第五届青训营 」伴学笔记创作活动的第 4 天✌

课堂笔记


本堂课重点内容:

CSS盒模型--行级块级

  • 基本定义
  • 各自特征
  • 工作属性
  • 排版规则

详细知识点介绍

1.CSS块级和行级盒子基本定义

块级(Block Level Box)行级(Inline level Box)
不和其它盒子并列摆放和其它行级盒子一起放在一行或拆开成多行
适用所有的盒模型属性盒模型中 width、height 不适用
块级元素行级元素
生成块级盒子生成行级盒子,内容分散在多个行盒中
body、article、div、main、section、h1~h6、p、ul、li 等span、em、strong、cite、code 等
display:blockdisplay:inline

2. display属性

属性值说明
block块级盒子
inline行级盒子
inline-block本身是行级,可以放在行盒子,可以设置宽高;作为一个整体不会被拆散成多行
none排版时完全被忽略,不会被展示

3.排版上下文

①行级排版上下文(也叫⾏内格式化上下文)Inline Formatting Context (IFC)

当IFC中有一个块级元素插入时,会产生两个匿名块将父元素分割开来,产生两个IFC

IFC 内的排版规则

  • 盒⼦在一行内⽔平摆放

  • 一行放不下时,换⾏显示(overflow-wrap: break-word;单词过长就在单词内换行)

  • text-align 决定一行内盒⼦的⽔平对齐

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

  • 避开浮动(float)元素 *

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

 1)BFC内的排版规则:

1. BFC是一个块级元素,块级元素在垂直方向上依次排列。

2. BFC是一个独立的容器,内部元素不会影响容器外部的元素。

3. 属于同一个BFC的两个盒子,外边距margin会发生重叠,并且取最大外边距。

 2)某些容器会创建⼀个BFC

  • CSS3 的一种新的布局模式
  • 浮动(float的值不是none)、绝对定位(position的值不是static或者relative)、display(是inline-block、table-cell、flex、table-caption或者inline-flex)
  • Flex⼦项和 Grid ⼦项
  • overflow 值不是 visible 的块盒

4. Flex Box(Flexible Box)

  • CSS3 的一种新的排版上下文

  • 可以控制子集盒子的:

    • 摆放的流向(→ ← ↑ ↓)
    • 摆放顺序
    • 盒子宽度和高度
    • 水平和垂直方向的对齐
    • 是否允许折行
  • 主轴(main axis) 是沿着 flex 元素放置的方向延伸的轴(比如页面上的横向的行、纵向的列)。该轴的开始和结束被称为 main start 和 main end。

  • 交叉轴(cross axis) 是垂直于 flex 元素放置方向的轴。该轴的开始和结束被称为 cross start 和 cross end。

  • 水平对齐方式justify-content

属性值说明
flex-start默认值,左对齐
flex-end右对齐
center居中
space-between两端对齐,项目之间的间隔相等
space-around项目两侧的间距相同,项目之间的间距比两侧的间距大一倍
1.flex-start:

image.png

2.flex-end:

image.png

3.center:

image.png

4.space-between:

image.png

5.space-around:

image.png

  • align-items「项目」在交叉轴上对齐方式「单轴」 这个是 container 容器的属性,设置的是 items 项目元素在交叉轴上对齐样式
属性值说明
flex-start交叉轴的起点对齐
flex-end交叉轴的终点对齐
center交叉轴的中点对齐
baseline项目的第一行文字的基线对齐
stretch(默认值)如果项目未设置高度或设为auto,将占满整个容器的高度
  • align-content 交叉轴行对齐方式,多行,和 justify-content 属性一样。
1.flex-start:

image.png

2.flex-end:

image.png

3.center:

image.png

4.baseline:

image.png

5.stretch:

image.png

5. Flex属性

Flex伸缩布局决定性的特征是让伸缩项目可伸缩,也就是让伸缩项目的宽度和高度自动填充剩余的空间。这可以以flex属性完成。一个伸缩容器会等比地按照各伸缩项目的 扩展比率 分配剩余空间,也会按照收缩比率缩小各项目以避免溢出。

属性值说明默认值
flex-grow设置项目的放大比例0
flex-shrink设置项目的缩小比例1
flex-grow设置该元素的宽度auto

1.flex-grow

默认为0,即如果存在剩余空间,也不放大。 当所有项目的flex-grow属性值都为1时,三个项目会平分剩余的宽度

image.png

2.flex-shrink

默认为1,如果空间不足,该项目将缩小。 如果所有项目的flex-shrink属性都为1,当空间不足时,都将等比例缩小。如果一个项目的flex-shrink属性为0,其他项目都为1,则空间不足时,前者不缩小。负值对该属性无效。

未压缩: image.png

压缩后:

image.png

d2的flex-grow:0属性使其空间未被压缩

6. Gird布局

Grid布局即网格布局,是一种新的css模型,一般是将一个页面划分成几个主要的区域,定义这些区域的大小、位置和层次等关系,是目前唯一一种css二维布

  • 通过在元素上声明display:grid或者display:inline-grid来创建一个网格容器

  • grid-template-columns和grid-template-rows属性来定义网格中的行和列

  • grid-template-areas可以将网格中的一些单元格组合成一个区域(area),并为该区域指定一个自定义名称

  • grid-item样式

    • grid-column-start 属性,设置起始列
    • grid-column-end 属性,设置结束列
    • grid-row-start 属性,设置起始行
    • grid-row-end 属性,设置结束行

7. position布局

属性值说明是否脱离文档流
static 默认值默认位置,(static 元素会忽略任何top、bottom、left 或right 声明)
relative 相对定位位置被设置为relative 的元素,偏移的top,right,bottom,left 的值都相对于它原来的位置进行偏移
absolute 绝对定位位置设置为absolute 的元素,可定位于相对于包含它的元素的指定坐标
fixed 固定定位相对于浏览器窗口进行定位

总结:position值不为static和relative的元素都脱离了文档标准流

课后个人总结

  • 充分利用MDN和W3C CSS规范
  • 保持好奇心,善用浏览器的开发者工具
  • 持续学习,CSS新特新还在不断出现

引用参考

blog.csdn.net/weixin_4610…