position(定位属性)

Position

 CSS position属性用于指定一个元素在文档中的定位方式。toprightbottom 和 left 属性则决定了该元素的最终位置。

在分析position元素定位之前,先来说说什么是文档流?(自我理解)

浏览器在默认情况下规定一个块元素在父元素内排列规则:

  1. 元素从上到下、从左到右排列
  2. 一个块级元素独占一行
  3. 行内元素不会独占一行
  4.  浮动元素在一行排不下则换行继续浮动

position 属性的五个值:

  • static
  • relative
  • absolute
  • fixed
  • sticky

一、static(默认值)

 该关键字指定元素使用 正常 的布局行为,即元素在文档常规流中当前的布局位置。此时 toprightbottomleft 和 z-index 属性无效

二、relative

relative:相对定位

 该关键字下,元素先放置在未添加定位时的位置,再在不改变页面布局的前提下调整元素位置(因此会在此元素未添加定位时所在位置留下空白)。position:relative 对 table-*-group, table-row, table-column, table-cell, table-caption 元素无效

 语法:

div{
    position:relative;
}

特点:

1. 参照相对没有定位前的自己

2. 有层级,后来居上-- 层级高

3. 占据自己原来的位置--在原来的文档流当中存在自己的位置

4. 不会改变元素的特征,行内还是行内,块级还是块级

5. 支持margin、padding、margin:auto

6. 不脱离文档流

三、absolute

absolute:绝对定位

元素会被移出正常文档流(脱离文档流),并不为元素预留空间,通过指定元素相对于最近的非 static 定位祖先元素的偏移,来确定元素位置。绝对定位的元素可以设置外边距(margins),且不会与其他边距合并。

语法:

div{
  position:absolute
}

特点:

1. 脱离文档流

2. 提升层级不占原来的位置,后来者居上

3. 不支持margin:auto,支持margin

4. 参照物:默认参照body,绝对定位的元素位置相对于最近的 已定位 的祖先元素

5. 行内元素支持宽高,块级元素内容撑开宽高改变元素特性

6. 一般配合相对定位使用-- 父相子绝 

四、fixed

fixed:固定定位

元素会被移出正常文档流,并不为元素预留空间,而是通过指定元素相对于屏幕视口(viewport)的位置来指定元素位置。元素的位置在屏幕滚动时不会改变。

语法:

div{
  position:fixed  
}

特点:

1.参照物:相对 浏览器窗口 定位

2.脱离文档流,提升层级

3.不支持margin:auto

4.可以改变元素特性,行内->块级

五、sticky

sticky:粘性定位(基于用户的滚动位置来定位)

元素根据正常文档流进行定位,然后相对它的最近滚动祖先包括table-related元素,基于toprightbottom, 和 left的值进行偏移。偏移值不会影响任何其他元素的位置。

粘性定位的元素是依赖于用户的滚动,在 position:relative 与 position:fixed 定位之间切换,表现为在跨越特定阈值前为相对定位,之后为固定定位。

注意:只有指定 top, right, bottom 或 left 四个阈值其中之一,才可使粘性定位生效。否则其行为与相对定位相同。

语法:

div.sticky {
  position: -webkit-sticky;
  position: sticky;
  top: 0;
}

---层级关系(z-index)

因为元素的定位与文档流无关,所以它们可以覆盖页面上的其它元素,这里 z-index 属性指定了一个元素的堆叠顺序(哪个元素应该放在前面,或后面)

  1. z-index--可以调换两个层的上下位置关系

  2. 值可为正也可为 值越大越在上面默认为0

  3. 只能 同级元素对比

  4. z-index 只对 定位的元素有效,其他元素均无效

{
    position:absolute;
    left:0px;
    top:0px;
    z-index:-1; /* 置于底层 */
}

 

参考文档:

https://developer.mozilla.org/zh-CN/docs/Web/CSS/position 

https://www.runoob.com/css/css-positioning.html

 

posted @ 2021-12-18 17:31  不知名前端李小白  阅读(532)  评论(0编辑  收藏  举报