Hkc

vuePress-theme-reco Hkc    2025
Hkc Hkc

Choose mode

  • dark
  • auto
  • light
TimeLine
GitHub
author-avatar

Hkc

25

Article

13

Tag

TimeLine
GitHub
  • Vue

  • Websocket

  • JS

  • CSS

    • 元素水平垂直居中
    • chrome控制字体小于12px
    • css绝对定位误区
    • 多行文本超出省略显示
  • Canvas

  • HTTP

  • GIT

  • SERVER

  • MORE

css绝对定位误区

vuePress-theme-reco Hkc    2025

css绝对定位误区

Hkc 2018-02-27 css

之前一直认为 CSS 绝对定位在没有其他有除 static 定位的包含块的情况下是以 body 进行定位,如果要想相对当前元素的父元素来定位,父元素一定要设置 position:relative。

后来发现然并卵,并不是这样的。 比如:

# html

<div class="root">
  <div class="cont">
    <div class="center"></div>
  </div>
</div>

# css

.root {
  width: 600px;
  height: 600px;
  background: #aaaaaa;
  margin: 0 auto;
  position: relative;
}
.cont {
  width: 300px;
  height: 300px;
  position: absolute;
  background: bisque;
  top: 10px;
  left: 10px;
}
.center {
  position: absolute;
  width: 100px;
  height: 100px;
  background: chocolate;
  top: 10px;
  left: 10px;
}

这里面 cont 相对于 root 绝对定位是没有问题的,但是 center 也是绝对定位的,那么它该相对于谁呢? 结果为:center 元素是相对于有绝对定位的 cont 元素来定位的,而不是 root;

所以正确的理解应该是:

相对定位:相对于块级元素自身位置进行定位;

绝对定位:绝对定位的盒子是相对于离它最近的一个已定位的盒子进行定位的(默认是 body);