最浅显易懂的 CSS 之 定位 - 10

259 阅读3分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

定位指的是将指定的元素摆放到页面的任意位置,通过定位可以任意的摆放元素。css中使用 position 属性来设置元素的定位,他有五个可选值;

  • static:默认值,元素没有开启定位
  • relative:开启元素的相对定位
  • absolute:开启元素的绝对定位
  • fixed:开启元素的固定定位(也是绝对定位的一种)
  • sticky 粘性定位元素

1. position:static

这是默认属性,表示没有开启定位。通常情况下都不会使用,但是在项目中可能会修改一些组件的默认属性,会使用到此属性。

2. position:relative

相对定位 当元素的position属性设置为relative时,则开启了元素的相对定位

  • 当开启了元素的相对定位以后,而不设置偏移量时,元素不会发生任何变化
  • 相对定位是相对于元素在文档流中原来的位置进行定位
  • 相对定位的元素不会脱离文档流
  • 相对定位会使元素提升一个层级
  • 相对定位不会改变元素的性质,块还是块,内联还是内联
<div class="box" id="one">One</div>
<div class="box" id="two">Two</div>
<div class="box" id="three">Three</div>
<div class="box" id="four">Four</div>
.box {
  display: inline-block;
  width: 100px;
  height: 100px;
  background: red;
  color: white;
}

#two {
  position: relative;
  top: 20px;
  left: 20px;
  background: blue;
}

image.png

注意 当开启了元素的定位(position属性值是一个非static的值)时,可以通过 left | right | top | bottom 四个属性来设置元素的偏移量

  • left:元素相对于其定位位置的左侧偏移量
  • right:元素相对于其定位位置的右侧偏移量
  • top:元素相对于其定位位置的上边的偏移量
  • bottom:元素相对于其定位位置下边的偏移量

通常偏移量只需要使用两个就可以对一个元素进行定位,一般选择水平方向的一个偏移量和垂直方向的偏移量来为一个元素进行定位

3. position:absolute

绝对定位 当元素的position属性设置为 absolute 时,则开启了元素的绝对定位

  • 开启绝对定位,会使元素脱离文档流
  • 开启绝对定位以后,如果不设置偏移量,则元素的位置不会发生变化
  • 绝对定位是相对于离他最近的开启了定位的祖先元素进行定位的 (一般情况,开启了子元素的绝对定位都会同时开启父元素的相对定位,如果所有的祖先元素都没有开启定位,则会相对于浏览器窗口进行定位)
  • 绝对定位会使元素提升一个层级
  • 绝对定位会改变元素的性质,
  • 内联元素变成块元素,块元素的宽度和高度默认都被内容撑开
<div class="box" id="one">One</div>
<div class="box" id="two">Two</div>
<div class="box" id="three">Three</div>
<div class="box" id="four">Four</div>
.box {
   display: inline-block;
   background: red;
   width: 100px;
   height: 100px;
   float: left;
   margin: 20px;
   color: white;
}

#three {
   position: absolute;
   top: 20px;
   left: 20px;
}

image.png

4. position:fixed

固定定位 当元素的position属性设置为 fixed 时,则开启了元素的固定定位

固定定位也是一种绝对定位,它的大部分特点都和绝对定位一样 不同的是:

  • 固定定位永远都会相对于浏览器窗口进行定位
  • 固定定位会固定在浏览器窗口某个位置,不会随滚动条滚动

5. position:sticky

粘性定位 当元素的position属性设置为 sticky 时,则开启了元素的粘性定位

粘性定位可以被认为是相对定位和固定定位的混合。元素在跨越特定阈值前为相对定位,之后为固定定位。