position: relative
和position: absolute
在CSS中有什么区别?何时应该使用它们?
绝对定位的CSS
position: absolute;
绝对定位是最容易理解的。您可以从 CSS 的 position
属性开始:
position: absolute;
这会告诉浏览器,无论要定位的内容是什么,都应该从文档的正常流中移除,并在页面上精确放置。它不会影响 HTML 中在其之前或之后定位的元素在 Web 页面上的位置,但是除非你覆盖它,否则它将受到其父级定位的影响。
如果您想将元素与文档窗口顶部相距10像素,您可以使用绝对
定位的top
偏移将其定位到那里:
position: absolute;
top: 10px;
无论元素下方、上方或穿过什么内容,此元素始终会距页面顶部10px
(在视觉上)。
四个定位属性是:
top
right
bottom
left
要使用它们,您需要将它们视为偏移属性。换句话说,一个具有right: 2px
的定位元素没有向右移动2px
。它的右侧是从窗口的右侧(或它的定位父级)偏移2px
。其他三个也是如此。
相对定位
position: relative;
相对定位使用与absolute
定位相同的四个定位属性。但其位置不是基于浏览器视口,而是从该元素仍在正常流程中的位置开始。
例如,如果您的网页上有三段落,第三段落有一个position: relative
样式,那么它的位置将基于其当前位置进行偏移-而不是基于视口原始边缘。
第一段。
第二段。
第三段。在上面的示例中,第三段将从容器元素的左侧3em
位置偏移,但仍位于前两个段落下方正常流程中。它将保持文档的正常流程,只是稍微偏移一下。如果您将其更改为position: absolute;
,则跟随其后的任何内容都将显示在其上方,因为它将不再处于文档的正常流程中。
注意:
绝对定位的元素的默认width
是其中的内容宽度,而相对定位的元素的默认width
是可以填充的空间的100%
。
您可以有与绝对定位的元素重叠的元素,而不能使用相对定位的元素(原生地即不使用负边距/定位)。
参考来源:this resource
“相对定位”和“绝对定位”都是相对的,只是使用了不同的参照系。 “绝对定位”是相对于另一个包含元素的位置而言的。而“相对定位”是相对于元素本身没有定位时所在的位置而言的。
使用哪种定位方式取决于您的需求和目标。“相对定位”适用于将元素从元素流中原来的位置移开的情况,例如使某些字符出现在上标位置。“绝对定位”适用于将元素放置在由其他元素设置的坐标系统中的情况,例如在图像上“打印”一些文本。
特别地,使用没有位移的“相对定位”(只需设置position: relative
)来使元素成为参考框架,以便您可以在其中包含“绝对定位”的元素(在标记中)。
这段代码有一个绿色的
相对定位:
如果您指定了position:relative,则可以使用top或bottom以及left或right将元素相对于其在文档中通常出现的位置移动。
绝对定位:
当您指定position:absolute时,元素将从文档中移除,并放置在您告诉它去的确切位置。
这些内容来自 http://www.barelyfitz.com/screencast/html-training/css/positioning/,并附带了绝对和相对定位的示例用法。
相对定位:相对于其当前位置,但可以移动。或相对定位元素相对于自身定位。
绝对定位:绝对定位元素相对于其最近的已定位祖先元素进行定位。如果存在,则像fixed一样相对于窗口。
<div style="position:relative"> <!--2nd parent div-->
<div> <!--1st parent div-->
<div style="position:absolute;left:10px;....."> <!--Middle div-->
Md. Arif
</div>
</div>
</div>
这里,第二个父级div
的位置是相对的,因此中间的div
将根据第二个父级div
更改其位置。如果第一个父级div
的位置是相对的,则中间的div
将根据第一个父级div
更改其位置。详情请见
由于我的声望不够,无法评论,因此我将提供答案。但请不要将其视为答案,只是额外的信息,因为我自己在页脚和定位方面遇到了一些问题。
当设置页面时,使我的页脚始终保持在底部,使用绝对位置,并使用相对位置设置主容器/包装器时,我发现文本内容和菜单内的某些问题(页面上白色部分,介于页眉和页脚之间),当将它们设置为绝对位置时,页脚不再保持在下方。
定位,正如你所说,是一个复杂的主题。
我的解决方案是:将我想要放置在网页中“绝对”位置的内容设为相对位置,并将其放置在距离下拉菜单下方35em的位置。(35em是我的下拉菜单完全展开时的高度)
然后,将上边距设为-35em,以前被挤到侧边的内容。然后再添加margin-bottom:-35em。这样,内容就“在”我的下拉菜单下方,但在视觉上它与我的下拉菜单并排显示!而且,从下面的白色空间到页脚的距离只有10em,就像在开始尝试这个解决方案之前一样。所以我的解决方案是这样的:
html, body {
margin:0;
padding:0;
height:100%;
}
h1 {
margin:0;
}
#webpage {
position:relative;
min-height:100%;
margin:0;
overflow:auto;
}
#header {
height:5em;
width:100%;
padding:0;
margin:0;
}
#text {
position:relative;
margin-bottom:-32em;
padding-top:2em;
padding-right:2em;
padding-bottom:10em;
background-repeat:no-repeat;
width:70%;
padding-left:auto;
margin-left:auto;
margin-right:auto;
right:10em;
float:right;
top:-32em;
}
#dropdown {
position:absolute;
left:0;
width:20%;
clear:both;
display:block;
position:relative;
top:1em;
height:35em;
}
#footer {
position:absolute;
width:100%;
right:0;
bottom:0;
height:5em;
margin:0;
margin-top:5em;
}
相对定位 vs 绝对定位:
最初的回答
*{
margin:0px;
padding:0px;
box-sizing: border-box;
}
您可以将header类的position属性设置为relative,如下所示:
.header{
position: relative;
}
然后,您向logo类添加了以下属性:
.logo{
position:absolute;
top:40px;
left:40px
}
这样就完成了。您将图像放置在完全相同的位置。从肉眼观察,第一种方法和第二种方法之间的定位没有任何明显的差异。但是,如果您检查图像元素,则会发现它没有占用任何额外的空间。它占用的区域正好与其自身的宽度和高度相同。
所以这是怎么实现的?我告诉图像logo类,你将被放置在头部类的相对位置,因为你是该类的子类,并且我特别提到了它的位置是相对的。因此,它的任何子元素都将相对于其左上角定位。而你的位置需要固定在父元素内,所以你被赋予绝对值。你需要从顶部和左侧稍微移动到我想要的位置,因此你被赋予了top和left属性,值为40px。通过这种方式,你将仅相对于你的父元素放置。因此,如果明天我将你的父元素向上或向下移动或只是任何地方,你始终会在父标题的左上角的左上角40px处。因此,无论您的父级未来是否固定(因为它不像您那样是绝对的),您的位置都在父级内固定。absolute 可以使你的元素脱离流式布局,并且定位到最近的相对定位父级(所有父级默认情况下都是静态的)。这通常是你同时使用 absolute 和 relative 的方式。
你也可以单独使用 relative,但这是非常罕见的情况。
我制作了一个视频来解释这个问题。
top
,right
,bottom
和left
没有指定呢? - pseudosudo