定位解决盒子层叠显示的问题
浮动可以让多个块级盒子一行没有缝隙排列显示, 经常用于横向排列盒子。
定位则是可以让盒子自由的在某个盒子内移动位置或者固定屏幕中某个位置,并且可以压住其他盒子。
定位=定位模式 + 边偏移
定位模式:用于指定一个元素在文档中的定位方式。
边偏移(方位属性):决定了该元素的最终位置。
静态定位是元素默认定位方式
静态定位是按照标准流特性摆放位置,它没有方位属性。
静态定位在布局时我们几乎不用的。
自恋型,相对于自己之前的位置进行移动。
特点:
配合方位属性实现移动
相对于自己原来的位置进行移动。
在页面中继续占有原位置,没有脱标。
无祖先元素或祖先元素中没有定位,默认相对于浏览器的可视区域进行移动。
祖先元素中有定位(相对、绝对、固定定位),相对于最近的且有定位的祖先元素进行移动。
参照最近的并且已经定位的父辈元素,一层一层向外找,如果父辈无定位,则参照浏览器的可视区域进行移动。
绝对定位脱离标准流,不占有原位置。
绝对定位的盒子显示模式具有行内块元素特点:加宽高生效,如果没设宽高,也没内容,盒子的宽度就是0。
认死理型,固定定位是元素固定于浏览器可视区的位置。(主要使用场景: 可以在浏览器页面滚动时元素的位置不会改变。)
特点:
需要配合方位属性实现移动
相对于浏览器的可视区域进行移动(跟父元素没有任何关系、不随滚动条滚动)
脱离标准流,不占有原位置。可以看做是一种特殊的绝对定位。
子元素:绝对定位
父元素:相对定位
好处:
粘性定位可以被认为是相对定位和固定定位的混合
特点:
注意:
层级:层叠顺序,垂直于屏幕,上下叠放的关系。
层级问题
定位的元素 层级高于没定位元素
都定位的元素,层级相同,显示时遵循 后来者居上(指html标签的先后顺序)
堆叠顺序(z-index)
不同布局方式元素的层级关系:
不同定位之间的层级关系:
在使用定位布局时,可能会出现盒子重叠的情况。此时,可以使用 z-index 来控制盒子的前后次序(z轴)
特点:
注意:
z-index只能应用于相对定位、绝对定位和固定定位的元素,其他标准流、浮动和静态定位无效。
子绝父相中的绝对定位的盒子水平居中
让盒子的左侧移动到父级元素的水平中心位置;
子绝父相中的绝对定位的盒子水平垂直居中
定位特殊特性
绝对定位和固定定位也和浮动类似。
前面我们讲过, display 是 显示模式, 可以改变显示模式有以下方式:
所以说, 一个行内的盒子,如果加了浮动、固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等。
脱标的盒子不会触发外边距塌陷
绝对定位(固定定位)会完全压住盒子
定位方式 | 属性值 | 相对于谁移动 | 是否占位置 |
---|---|---|---|
静态定位 | static | 不能通过方位属性移动 | 占位置 |
相对定位 | relative | 相对于自己原来的位置 | 占位置 |
绝对定位 | absolute | 相对于最近的且有定位的祖先元素移动 | 不占位置(脱标) |
固定定位 | fixed | 相对于浏览器可视区域 | 不占位置(脱标) |
标准流
行内元素 设置宽高无效
块级元素 宽度不设置,默认是父元素的100%
块级元素 高度不设置,高度由内容撑开
浮动和定位
行内元素设置**(绝对、固定)定位或者浮动**后,设置宽高有效果。
块级元素设置**(绝对、固定)**定位或者浮动后,不设宽高,默认大小是内容的大小。
浮动或定位后的元素,默认宽度由内容撑开
浮动或定位后的行内元素,宽度和高度起作用
通过盒子模型,清楚知道大部分html标签是一个盒子。
通过CSS浮动、定位 可以让每个盒子排列成为网页。
一个完整的网页,是标准流、浮动、定位一起完成布局的,每个都有自己的专门用法。
标准流
浮动:可以让原本垂直布局的块级元素变成水平布局。
定位:可以让元素自由的摆放在网页的任意位置。