定位
概述: 定位就是手动控制元素在包含块中的精准位置 一个元素只要position的取值不是static,就可以认为该元素是个定位元素 定位元素会脱离文档流(相对定位除外)
涉及的css属性:position
position属性
- 默认值: static 静态定位(不定位)
- relative: 相对定位
- absolute: 决定定位
- fixed: 固定定位
- sticky:粘性定位
脱离了文档流的元素:
- 文档流中的元素摆放时,会忽略脱离了非文档流的元素
- 文档流中元素计算自动高度时,会忽略脱离了文档流的元素
相对定位 relative
不会导致元素脱离文档流,只是让元素在原来位置上进行偏移,
盒子的偏移不会影响别的盒子
可以通过四个css属性设置其位置:
(以下都是相对原来位置的移动)
- left
- right
- top
- bottom
绝对定位 sbsolute
- 宽高为auto,适应内容
- 包含块变化: 找祖先元素中第一个定位元素 该元素的填充盒(padding)为其包含盒.(通常我们会把需要定位元素的父元素设置为相对定位 来确定需要定位元素的位置) 若找不到 则它的包含块为整个网页
固定定位 fixed
其他情况和绝对定位完全一样
包含块不同:固定为视口(浏览器的可视窗口) 通常用来做页面导航
粘性定位 sticky
sticky允许被定位的元素表现得像相对定位一样,直到它滚动到某个阈值点(例如,从视口顶部起10像素)为止,此后它就变得固定了。例如,它可用于使导航栏随页面滚动直到特定点,然后粘贴在页面顶部。
定位下的居中
某个方向上居中步骤:
- 定宽(高)
- 将左右(上下) 距离设置为零
- 将左右(上下) margin设置为auto
绝对定位和固定定位,margin为auto时,会自动吸收剩余空间
多个定位重叠时
堆叠上下文: 设置z-index,通常情况下 该值越大,越靠近用户
只有定位元素设置z-index有效
z-index可以是负数,如果是负数, 遇到常规流 浮动元素 则会被其覆盖
补充
- 绝对定位和固定定位 元素一定是块盒
- 绝对定位和固定定位 元素一定不是浮动
- 没有外边距合并