【问题标题】:Why div default value for position is static but not relative? [duplicate]为什么位置的div默认值是静态的而不是相对的? [复制]
【发布时间】:2014-05-14 11:15:50
【问题描述】:

就像标题一样,为什么 div(或 p 或 html 中的任何其他元素)具有 'position: static' 作为默认值?为什么不是“位置:相对”? 我没有看到在我的 CSS 中使用“位置:静态”有任何好处。 使用 'position: relative' 在 html 中定义所有 div 元素是否安全?

编辑: 我很清楚静态、相对、绝对和固定定位之间的区别。但主要问题是为什么 div 或任何其他 html 元素的默认定位是静态的?这个例子:

HTML

<div class="div1">
    <div class="div2">
        <div class="div3">
            <div class="div-last"></div>
        </div>
    </div>
</div>

CSS

.div1 {
    width: 700px;
    height: 700px;
    background-color: #000;
    position: relative;
}
.div2 {
    width: 600px;
    height: 600px;
    background-color: #333;
    position: relative;
    top: 20px;
    left: 20px;
}
.div3 {
    width: 500px;
    height: 500px;
    background-color: #777;
    position: absolute;
    right: 0;
    top: 30px;
}
.div-last {
    width: 400px;
    height: 400px;
    background-color: #AAA;
    position: absolute;
    bottom: 20px;
    left: 20px;
}

表明我不需要一个静态定位来按我的意愿排列我的 div。 这是上面代码的jsfiddle。 对不起我的土豆英语。 :D

编辑#2: 相关问题的答案是: “是的,是的。如果你尝试将一个元素绝对定位,它会相对于最近的祖先定位,它的 CSS 位置不是静态的。

如果每个元素都有 position:relative,这将是直接父元素。

但您可能希望将绝对元素相对于 DOM 树中更靠前的元素定位,或者绝对定位在页面主体上。”

所以,我不想/不需要“将绝对元素相对于 DOM 树中更靠前的元素定位,或者绝对在页面主体上。”,我之前是否需要了解其他技术预防措施我让所有的 div 都是相对的?

【问题讨论】:

  • 当所有元素都是相对定位时,绝对定位与相对定位没有区别,因为它是相对于下一个非静态定位的元素。
  • 我知道静态定位和相对定位的区别。我不明白为什么将静态作为默认值?相对定位更有用,您可以使用 top/left/right/bottom 并为元素的子项使用绝对定位。
  • 公平地说,这并不是完全重复,但您的问题可以通过链接问题中的信息来回答。
  • 您假设每个元素都需要这些定位方案,@user。您是否发现自己必须定位所有内容?
  • @BoltClock 是的,几乎在大多数情况下,我需要为 div 定义相对定位,或者定位元素的位置,或者对其子元素使用绝对定位。

标签: html css css-position


【解决方案1】:

如果 position: relative 是默认值,position: absolute; 将不再按预期工作。也就是说,因为position: absolute 使用层次结构中最近的非静态定位元素作为引用。如果没有静态定位元素,则所有元素都是非静态的,因此position: absolute 将使用父元素作为引用,因此不再定位绝对,而是相对于父元素。

【讨论】:

  • 我为您的建议和 w3 wiki 提供了 jsfiddle:“一个带有 position:relative 的元素首先像任何静态元素一样布局;块级或内联。但随后发生了一些有趣的事情:生成的框根据顶部、底部、左侧和右侧属性进行移动。" w3.org/wiki/CSS_static_and_relative_positioning
  • 这是一个误导性的答案。如果默认位置是相对的,并且您的父级有多个子级,则绝对定位其中一个子级会将其排除在流程之外。它将不再影响其下方儿童的位置。当 top 设置为零时,它也将位于父级的顶部。其他任何孩子都不会出现这种情况。 jsfiddle.net/0uq8a3vz 如果一切都是相对的,那么绝对会变成相对的说法是错误的。
  • @spex 你是对的,最后两个词可能会产生误导。我并不是指position: relative 中的“相对”,而是即使设置了position: absolute,定位也是相对于父元素的。我对其进行了编辑以使其更清晰。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-11
  • 2019-09-27
  • 1970-01-01
相关资源
最近更新 更多