CSS布局

88 阅读6分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第三天,点击查看活动详情

一、学习目标

  • 能够说出定位的常见应用场景
  • 能够说出不同定位方式的特点
  • 能够使用子绝父相完成元素水平垂直案例

二、定位

1. 定位的基本介绍

  • 网页常见布局方式
    • 标准流
      • 块级元素独占一行 → 垂直布局
      • 行内元素/行内块元素一行显示多个 → 水平布局
    • 浮动
      • 可以让原本垂直布局的块级元素变成水平布局
    • 定位
      • 可以让元素自由的摆放在网页的任意位置一般用于盒子之间的层叠情况
    • 定位的常见应用场景
      • 可以解决盒子与盒子之间的层叠问题
      • 定位之后的元素层级最高,可以层叠在其他盒子上面
      • 可以让盒子始终固定在屏幕中的某个位置

2. 定位的基本使用

  • 使用定位的步骤
  • 设置定位方式
    • 属性名:position
    • 常见属性值:

image.png

  • 设置偏移值
    • 偏移值设置分为两个方向,水平和垂直方向各选一个使用即可

    • 选取的原则一般是就近原则 (离哪边近用哪个)

image.png

3.静态定位

  • 介绍:静态定位是默认值,就是之前认识的标准流。
  • 代码:position:static
  • 注意点:
    • 静态定位就是之前标准流,不能通过方位属性进行移动
    • 之后说的定位不包括静态定位,一般特指后几种:相对、绝对、固定
  • 小结
  • 静态定位能通过方位属性进行移动吗?
    • 不能,静态定位的元素就是默认标准流的情况

4.相对定位

  • 介绍:自恋型定位,相对于自己之前的位置进行移动
  • 代码:position:relative
  • 特点:
    • 需要配合方位属性实现移动
    • 相对于自己原来位置进行移动
    • 在页面中占位置 → 没有脱标
  • 应用场景:
    • 配合绝对定位组CP(子绝父相)
    • 用于小范围的移动
  • 小结
    • 相对定位position的属性值是什么?
      • relative
    • 相对定位是否需要配合方位属性实现移动?
      • 需要配合方位属性实现移动
    • 相对定位的元素相对于谁进行移动?
      • 相对于自己原来位置进行移动
    • 相对定位的元素在网页中是否占位置
      • 在页面中占位置 → 没有脱标

5.绝对定位

  • 介绍:拼爹型定位,相对于非静态定位的父元素进行定位移动
  • 代码:position:absolute
  • 特点:
    • 需要配合方位属性实现移动
    • 默认相对于浏览器可视区域进行移动
    • 在页面中不占位置 → 已经脱标
  • 应用场景:
    • 配合绝对定位组CP(子绝父相)
  • 绝对定位相对于谁移动?
    • 祖先元素中没有定位 → 默认相对于浏览器进行移动
    • 祖先元素中有定位 → 相对于 最近的 有定位 的祖先元素进行移动
  • 小结
    • 绝对定位position的属性值是什么?
      • absolute
    • 绝对定位是否需要配合方位属性实现移动?
      • 需要配合方位属性实现移动
    • 绝对定位的元素相对于谁进行移动?
      • 祖先元素中没有定位 → 默认相对于浏览器进行移动
      • 祖先元素中有定位 → 相对于最近的有定位的祖先元素进行移动
    • 绝对定位的元素在网页中是否占位置?
      • 在页面中不占位置 → 已经脱标

6.子绝父相介绍

  • 场景:让子元素相对于父元素进行自由移动
  • 含义:
    • 子元素:绝对定位
    • 父元素:相对定位
  • 子绝父相好处:
    • 父元素是相对定位,则对网页布局影响最小
  • 小结
    • 子绝父相的含义是什么?
      • 子元素:绝对定位
      • 父元素:相对定位
    • 子绝父相的应用场景是什么?
      • 让子元素相对于父元素进行自由移动
    • 子绝父相的好处是什么?
      • 父元素是相对定位,则对网页布局影响最小

7.(拓展) 子绝父绝特殊场景

  • 场景:在使用子绝父相的时候,发现父元素已经有绝对定位了,此时直接子绝即可!
  • 原因:父元素已经有定位已经满足要求,如果盲目修改父元素定位方式,可能会影响之前写好的布局
  • (案例)子绝父相水平居中案例-解决方法
  1. 子绝父相
  2. 先让子盒子往右移动父盒子的一半
    • left:50%
  3. 再让子盒子往左移动自己的一半
    • 普通做法:margin-left:负的子盒子宽度的一半
      • 缺点:子盒子宽度变化后需要重新改代码
    • 优化做法:transform:translateX(-50%)
      • 优点:表示沿着X轴负方向(往左)始终移动自己宽度的一半,子盒子宽度变化不需要更改代码
  • (案例)子绝父相水平垂直都居中案例-解决方法
  1. 子绝父相
  2. 让子盒子往右走大盒子一半
    • left:50%
  3. 让子盒子往下走大盒子一半
    • top:50%
  4. 让子盒子往左+往上走自己的一半
    • transform:translate(-50%,-50%);

8.固定定位

  • 介绍:
    • 死心眼型定位,相对于浏览器进行定位移动
  • 代码:position:fixed
  • 特点:
    • 需要配合方位属性实现移动
    • 相对于浏览器可视区域进行移动
    • 在页面中不占位置 → 已经脱标
  • 应用场景:
    • 让盒子固定在屏幕中的某个位置
  • 小结
    • 固定定位position的属性值是什么?
      • fixed
    • 固定定位是否需要配合方位属性实现移动?
      • 需要配合方位属性实现移动
    • 固定定位的元素相对于谁进行移动?
      • 相对于浏览器可视区域进行移动
    • 固定定位的元素在网页中是否占位置?
      • 在页面中不占位置 → 已经脱标

image.png

9.元素的层级关系

  • 不同布局方式元素的层级关系:
    • 标准流 < 浮动 < 定位
  • 不同定位之间的层级关系:
    • 相对、绝对、固定默认层级相同
    • 此时HTML中写在下面的元素层级更高,会覆盖上面的元素
  • 更改定位元素的层级
    • 场景:改变定位元素的层级
    • 属性名:z-index
    • 属性值:数字
    • 数字越大,层级越高
  • 小结
    • 标准流、浮动、定位元素之间的层级关系是什么样?
      • 标准流 < 浮动 < 定位
    • 不同定位元素之间的层级关系是什么样?
      • 相对、绝对、固定默认层级相同
      • 此时HTML中写在下面的元素层级更高,会覆盖上面的元素
    • 通过什么属性可以修改定位元素的层级?
      • z-index:数字;