静态和相对定位之间的差异

jrd*_*oko 81 css static positioning css-position

在CSS中,静态(默认)定位和相对定位有什么区别?

Mat*_*ott 156

静态定位是元素的默认定位模型.它们显示在作为普通HTML流程的一部分呈现的页面中.静态定位的元素不服从left,top,rightbottom规则:

静态定位的元素遵循正常的HTML流程.

相对定位,可以指定一个特定的偏移量(left,top等等),这是相对于在HTML流动的元件的正常位置.因此,如果我有一个文本框,div我可以在文本框上应用相对定位,使其显示在相对于通常放置在以下位置的位置的特定位置div:

相对定位的元素遵循HTML流程,但提供相对于HTML流程中的正常位置调整其位置的能力.

还有绝对定位 - 您可以指定元素相对于整个文档的确切位置,或者指定元素树中下一个相对定位的元素:

绝对定位的元素从HTML流中取出,可以放在文档中的特定位置......

当a position: relative应用于层次结构中的父元素时:

...或相对于相对定位的HTML树中的第一个父元素定位.

注意我们的绝对位置元素是如何被相对定位的元素绑定的.

最后是固定的.固定定位将元素限制在视口中的特定位置,该位置在滚动期间保持原位:

固定定位元素也取自HTML流,但不受视口约束,也不会随页面滚动.

您还可能会观察到固定定位元素不会导致滚动的行为,因为它们不被视为绑定到视口:

固定定位的元素对滚动没有影响.

绝对定位的元素仍然被视口绑定并将导致滚动:

除非在父元素上使用溢出,否则绝对定位元素仍受视口边界的影响.

..当然,你的父元素overflow: ?用来确定滚动的行为(如果有的话).

通过绝对定位和固定定位,元素从HTML流中取出.

  • @cram2208因为相对使得子项绝对定位的节点相对于它们定位,静态允许绝对定位的子项忽略它们的位置并相对于最近的相对定位元素定位.它是一个重要的概念 (7认同)
  • 答案很好,但(对于相对位置)不是基于元素正常位置的偏移量? (4认同)
  • 我同意Baztoune,这个相对定位元素的定义是误导性的.`static`和`relative`元素是相同的,除了后者你可以相对于它的原始位置**重新定位它**,而不是包含元素 - 这就是`absolute`进来的地方.而且,像任何元素一样使用除`static`之外的值定位,你可以使用`z-index`. (4认同)
  • 我想知道为什么CSS仍然会实现`position:static;`而不是简单地将它替换为`position:relative;`默认情况下?如果一个人不想定位除了'top:0;`和`left:0;`之外的项目,那么让我们不要这样做吧?是否仍然需要`position:static;`作为CSS的一部分? (3认同)

Sto*_*ffe 7

您可以在这里看到一个简单的概述:W3School

另外,如果我没记错的话,当声明一个元素相对时,默认情况下它将保持在原本应该的位置,但你能够相对于这个元素绝对地将元素放在其中,我发现它非常有用在过去.

  • w3schools ...我不会贬低这一点,但你必须忍受耻辱. (28认同)
  • 与此同时,在2017年,W3Schools并没有像过去那样糟糕(它仍然不完美,但他们认真对待社区的反对并且实际上有所改善). (4认同)

Und*_*ned 5

位置相对允许您使用顶部/底部/左/右进行定位.除非您使用保证金参数,否则静态不允许您这样做.Top和margin-top之间存在差异.

您不需要使用静态,因为它是默认值


小智 5

回答“为什么CSS仍将实现位置:静态;” 在一个场景中,为父级使用position:relative,为子级使用position:absolute限制子级的缩放宽度。在水平菜单系统中,您可能会有链接的“列”,使用“ width:auto”不适用于相对的父级。在这种情况下,将其更改为“静态”将允许宽度根据其中的内容而变化。

我花了好几个小时,想知道为什么我无法根据容器中的内容量来调整容器。希望这可以帮助!