为什么需要定位
浮动可以让多个块级盒子一行没有缝隙排列显示 ,但是如果我们需要盒子自由的在某个盒子内移动位置或者固定屏幕中某个位置 , 并且可以压住其他盒子,就需要使用定位。
1 定位组成
定位 : 将盒子定在某一个位置,所以定位也是在摆放盒子,按照定位的方式移动盒子。
定位=定位模式+边偏移。
定位模式用于指定一个元索在文档中的定位方式。 边偏移则决定了该元索的最终位置。
定位模式
定位模式决定元素的定位方式, 它通过CSS的position属性来设置,其值可以分为四个:
值 | 语义 |
---|---|
static | 静态定位 |
relative | 相对定位 |
absolute | 绝对定位 |
fixed | 固定定位 |
边位移
边偏移就是定位的盒子移动到最终位置。有top. bottom. left 和right 4个属性。
2 静态定位static
静态定位是元素的默认定位方式,无定位的意思。语法:
1 | 选择器 { position: static; } |
●静态定位按照标准流特性摆放位置 ,它没有边偏移
●静态定位在布局时很少用到
3 相对定位relative
相对定位是元素在移动位置的时候,是相对于它原来的位置来说的(自恋型)。
语法:
1 | 选择器{ position: relative; } |
相对定位的特点:
1.它是相对于自己原来的位百来移动的(移动位置的时候参照点是自2原来的位置)。
2.原来在标准流的位置继续占有,后面的盒子仍然以标准流的方式对待它。( 不脱标,继续保留原来位置)
4 绝对定位absolute
绝对定位是元素在移动位置的时候,是相对于它祖先元素来说的(拼爹型)。
语法:
1 | 选择器 { position: absolute; } |
绝对定位的特点: ( 务必记住)
1.如果没有祖先元素或者祖先元素没有定位,则以浏览器为准定位( Document文档)。
2.如果祖先元素有定位(相对、绝对、固定定位) , 则以最近一级的有定位祖先元素为参考点移动位置。
3.绝对定位不再占有原先的位置。( 脱标)
5 子绝父相
子绝父相是定位中最常用的一种方式这句话的意思是:子级是绝对定位的话,父级要用相对定位。
①子级绝对定位,不会占有位置,可以放到父盒子里面的任何一个地方,不会影响其他的兄弟盒子。
②父盒子需要加定位限制子盒子在父盒子内显示。
③父盒子布局时,需要占有位置,因此父亲只能是相对定位。
这就是子绝父相的由来,所以相对定位经常用来作为绝对定位的父级。
因为父级需要占有位置,因此是相对定位,子盒子不需要占有位置,则是绝对定位
6 固定定位fixed
固定定位是元素固定于浏览器可视区的位置。主要使用场景:可以在浏览器页面滚动时元素的位置不会改变。
语法:
1 | 选择器 { position: fixed; } |
固定定位的特点: ( 务必记住)
1.以浏览器的可视窗口为参照点移动元索。
●跟父元索没有任何关系
●不随滚动条滚动。
2.固定定位不在占有原先的位置。
固定定位也是脱标的,其实固定定位也可以看做是一种特殊的绝对定位。
7 粘性定位sticky(了解)
粘性定位可以被认为是相对定位和固定定位的混合。Sticky 粘性的语法:
1 | 选择器 { position: sticky; top: 10px; } |
粘性定位的特点:
1.以浏览器的可视窗口为参照点移动元素(固定定位特点)
2.粘性定位占有原先的位置(相对定位特点)
3.必须添加top. left. right. bottom其中一个才有效
跟页面滚动搭配使用。兼容性较差, IE不支持。
总结

9 定位叠放次序z-index
在使用定位布局时,可能会出现盒子重叠的情况。此时,可以使用z-index来控制盒子的前后次序(z轴)语法:
1 | 选择器{ z-index: 1; } |
●数值可以是正整数、负整数或0,默认是auto ,数值越大,盒子越靠上
●如果属性值相同,则按照书写顺序,后来居上
●数字后面不能加单位
●只有定位的盒子才有z-index属性
z-index使用
z-index可以改变元素相互覆盖的顺序,默认为0,可正可负。
z-index值较大的元素将叠加在z-index值较小的元素之上。对于未指定此属性的定位对象,z-index 值为正数的对象会在其之上,而 z-index 值为负数的对象在其之下。只对定位元素有效
1 | <div style="width:200px;height:200px;z-index:30">//大 理应在上面,但未定位,在下面。 |
- 第一个div未设置position的3个属性,未定位,不起作用。
1)父子关系
- 如果父元素z-index有效,那么子元素无论是否设置z-index都和父元素一致,会在父元素上方
1 | <div style="position:relative;width:200px;height:200px;z-index:10;">//大,但有儿子,儿子在上面 |
- 如果父元素z-index失效(未定位或者使用默认值),那么定位子元素的z-index设置生效
1 | <div style="position:relative;width:200px;height:200px;"> |
2)兄弟关系
- 如果两个元素都没有设置z-index,使用默认值,一个定位一个没有定位,那么定位元素覆盖未定位元素
1 | <div style="position:relative;top:50px;width:200px;height:200px;"> //position给了relative,absolution,或者fixed 就是定位了z-index使用了默认值。 |
- 如果两个元素都没有定位发生位置重合现象或者两个都已定位元素且z-index相同发生位置重合现象,那么按文档流顺序,后面的覆盖前面的。
1 | <div style="width:200px;height:200px;">//未定位,未使用z-indenx ,把其当作默认值,在上面 |
10 定位的拓展
1.绝对定位水平垂直居中
1 | <style> |
2.定位特殊特性
绝对定位和固定定位也和浮动类似。
1.行内元索添加绝对或者固定定位,可以直接设置高度和宽度。
2.块级元索添加绝对或者固定定位,如果不给宽度或者高度,默认大小是内容的大小。
3.脱标的盒子不会触发外边距塌陷
浮动元素、绝对定位(固定位)元素的都不会触发外边距合井的问题。
4.绝对定位(固定定位)会完全压住盒子
浮动元素不同,只会压住它下面标准流的盒子,但是不会压住下面标准流盒子里面的文字(图片)但是绝对定位(固定定位)会压住下面标准流所有的内容。
浮动之所以不会压住文字,因为浮动产生的目的最初是为了做文字环绕效果的。文字会围绕浮动元素。
通过盒子模型,清楚知道大部分htm标签是-一个盒子。通过CSS浮动、定位可以让每个盒子排列成为网页。
网页布局总结
一个完整的网页,是标准流、浮动、定位一起完成布局的,每个都有自己的专门用法。
1.标准流
可以让盒子上下排列或者左右排列,垂直的块级盒子显示就用标准流布局。
2.浮动
可以让多个块级元素一行显示或者左右对齐盒子 。多个块级盒子水平显示就用浮动布局。
3.定位
定位最大的特点是有层要的概念,就是可以让多个盒子前后雪压来显示。如果元素白由在某个盒子内移动就用定位布局。