这是我参与「第四届青训营 」笔记创作活动的的第4天
1、positon定位
1.1 定位
-
定位是一种更加高级的布局手段;
-
通过定位可以将元素摆放到页面的任意位置;
-
使用position属性来设置定位;
可选值:
- static 默认值,元素是静止的没有开启定位;
- relative 开启元素的相对定位;
- absolute 开启元素的绝对定位;
- fixed 开启元素的固定定位;
- sticky 开启元素的粘滞定位;
1.2 相对定位——relative
-
当元素的position属性值设置为relative时,即开启了相对定位;
-
相对定位的特点:
- 元素开启相对定位以后,如果不设置偏移量元素不会发生任何变化;
- 相对定位是参照于元素在文档流中的位置进行定位的(即元素的初始位置为坐标原点)
- 相对定位会提升元素的层级(他所处的层级高于文档流的层级 所以会出现遮盖);
- 相对定位不会使元素脱离文档流(所以移动开启相对定位的元素,该元素下方的元素不会改变位置);
- 相对定位不会改变元素的性质,块还是块,行内还是行内;
-
偏移量(offset)
当元素开启定位以后,可以通过偏移量来设置元素的位置;(只有开启定位才可以设置偏移量)
top 定位元素和定位位置上边的距离(可以想成margin-top 设置margin-top会挤下去下面的元素 而设置top则会覆盖下边元素)
bottom 定位元素和定位位置下边的距离
定位元素垂直方向的位置由top和bottom两个属性来控制,通常情况下只使用一个值
left 定位元素和定位位置左侧距离
right 定位元素和定位位置右侧距离
定位元素水平方向的位置由left和right两个属性来控制,通常情况下只使用一个值
1.3 绝对定位——absolute
-
当元素的position属性值设置为absolute时,则开启了元素的绝对定位;
-
绝对定位的特点:
- 开启绝对定位后,如果不设置偏移量元素的位置不会发生改变;
- 开启绝对定位后,元素会从文档流中脱离;
- 绝对定位会改变元素的性质(和浮动相似),行内变成块,块的宽高被内容撑开;
- 绝对定位会使元素提升层级;
- 绝对定位元素是相对于其包含块进行定位的
-
包含块:(containing bolck)
正常情况下,包含块就是离当前元素最近的祖先块元素;
开启绝对定位的包含块就是离他最近的开启了定位的祖先元素(只要祖先元素定位值不是static)
如果所有的祖先元素都没有开启定位,则根元素就是它的包含块(把网页左上角当做坐标原点定位)
-
html(根元素、初始包含块)
-
绝对元素的布局
水平方向
-
当我们开启绝对定位后,水平方向的布局等式需要添加left和right两个值,此时规则和之前一样,只是多添加了两个值;
-
当发生过渡约束时(等式不成立时)如果9个值中没有auto,则自动调整right的值以使等式满足(不再调整margin-right)
如果有auto,则会自动调整auto的值以使等式满足;
-
可设置auto的值:margin width left right
left和right的默认值是auto,所以如果不设置right和left,则等式不成立时,会自动调整这两个值
垂直方向
-
垂直方向布局的等式也必须要满足;
-
可以实现元素垂直、水平双方向居中;(在包含块中居中)
实现方式top、bottom、left、right的值全设置为0,margin设置为auto即可
-
1.4 固定定位——fixed
- 将元素的position属性设置为fixed,则开启了元素的固定定位; - 固定定位也是一种绝对定位,所以固定定位大部分特点都和绝对定位一样; - 唯一不同的是,固定定位永远参照浏览器的视口进行定位; - 视口指的是浏览器的窗口,即永远在浏览器的左上角定位,滚动滚动条也不会消失(小广告) 视口和html根元素是不同的两个概念,滚动滚动条,浏览器的根元素会上移,视口会永远保持不变; - 固定定位的元素不会随网页的滚动条滚动1.5 粘滞定位(兼容性不是很好)——sticky
- 将元素的position属性设置为sticky,则开启了元素的粘滞定位; - 粘滞定位和相对定位的特点基本一致,不同的是粘滞定位可以在元素到达某个位置时将其固定;2、元素的层级
- 对于开启了定位的元素,可以通过z-index属性来指定元素的层级; - z-index需要一个整数作为参数,值越大元素的层级越高; - 元素的层级越高越优先显示 ; - 如果元素的层级一样,则优先显示结构上靠下的元素; - **只要开启了定位,则他们的层级都是一样的,需要通过z-index来指定层级** - 祖先元素的层级再高,也不会盖住后代元素。 -