CSS布局:定位
1.定位的基本介绍
1.1网页常见布局方式
- 标准流
- 块级元素独占一行→垂直布局
- 行内元素/行内块元素一行显示多个→水平布局
- 浮动
- 可以让原本垂直布局的块级元素变成水平布局
- 定位
- 可以让元素自由的摆放在网页的任意位置
- 一般用于盒子之间的层叠情况
1.2定位的常见应用场景
-
可以解决盒子与盒子之间的层叠问题:定位之后的元素层级最高,可以层叠在其他盒子上面
-
可以让盒子始终固定在屏幕中的某个位置
2.定位的基本使用
-
使用定位的步骤
-
1.设置定位方式
- 属性名:position
- 常见属性值:
定位方式 属性值 静态定位 static 相对定位 relative 绝对定位 absolute 固定定位 fixed -
2.设置偏移值
- 偏移值设置分为两个方向,水平和垂直方向各选一个使用即可
- 选取的原则一般是就近原则 (离哪边近用哪个)
方向 属性名 属性值 含义 水平 left 数字+px 距离左边的距离 水平 right 数字+px 距离右边的距离 垂直 top 数字+px 距离上边的距离 垂直 bottom 数字+px 距离下边的距离
-
3.静态定位
- 介绍:静态定位是默认值,就是之前认识的标准流。
- 代码:
position:static;
- 注意点:
- 静态定位就是之前标准流,不能通过方位属性进行移动
- 之后说的定位不包括静态定位,一般特指后几种:相对、绝对、固定
4.相对定位
- 介绍:自恋型定位,相对于自己之前的位置进行移动
- 代码:
position:relative;
- 特点:
- 需要配合方位属性实现移动
- 相对于自己原来位置进行移动
- 在页面中占位置 → 没有脱标
- 应用场景:
- 配合绝对定位组CP(子绝父相)
- 用于小范围的移动
5.绝对定位
-
介绍:拼爹型定位,相对于非静态定位的父元素进行定位移动
-
代码:
position:absolute;
-
特点:
- 需要配合方位属性实现移动
- 默认相对于浏览器可视区域进行移动
- 在页面中不占位置 → 已经脱标
-
应用场景:
- 配合绝对定位组CP(子绝父相)
-
绝对定位相对于谁移动?
- 祖先元素中没有定位 → 默认相对于浏览器进行移动
- 祖先元素中有定位 → 相对于 最近的 有定位 的祖先元素进行移动
6.子绝父相
- 场景:让子元素相对于父元素进行自由移动
- 含义:
- 子元素:绝对定位
- 父元素:相对定位
- 子绝父相好处:
- 父元素是相对定位,则对网页布局影响最小
- 子绝父绝特殊场景
- 场景:在使用子绝父相的时候,发现父元素已经有绝对定位了,此时直接子绝即可!
- 原因: 父元素已经有定位已经满足要求,如果盲目修改父元素定位方式,可能会影响之前写好的布局
- (例)子绝父相水平居中案例
- 子绝父相
- 先让子盒子往右移动父盒子的一半:
left:50% ;
- 再让子盒子往左移动自己的一半
- 普通做法:margin-left:负的子盒子宽度的一半
- 缺点:子盒子宽度变化后需要重新改代码
- 优化做法:transform:translateX(-50%)
- 优点:表示沿着X轴负方向(往左)始终移动自己宽度的一半,子盒子宽度变化不需要更改代码
- (例)子绝父相水平垂直都居中案例
- 子绝父相
- 让子盒子往右走大盒子一半:
left:50%;
- 让子盒子往下走大盒子一半:
top:50%;
- 让子盒子往左+往上走自己的一半:
transform:translate(-50%,-50%);
7.固定定位
-
介绍:相对于浏览器进行定位移动
-
代码:
position:fixed;
-
特点:
- 需要配合方位属性实现移动
- 相对于浏览器可视区域进行移动
- 在页面中不占位置 → 已经脱标
-
应用场景: 让盒子固定在屏幕中的某个位置
-
不同定位方式特点总结:
定位方式 属性值 相对于谁移动 是否占位置 静态定位 static 不能通过方位属性移动 占位置 相对定位 relative 相对于自己原来的位置 占位置 绝对定位 absolute 相对于最近的且有定位的祖父元素移动 不占位置(脱标) 固定定位 fixed 相对于浏览器可视区域 不占位置(脱标)
8.元素的层级关系
8.1 元素层级问题
- 不同布局方式元素的层级关系: 标准流 < 浮动 < 定位
- 不同定位之间的层级关系:
- 相对、绝对、固定默认层级相同
- 此时HTML中写在下面的元素层级更高,会覆盖上面的元素
8.2 更改定位元素的层级
- 场景:改变定位元素的层级
- 属性名:z-index:
- 属性值:数字 —数字越大,层级越高