row
div的上下边距为10px(margin: 10px 2px
)。但是,10px
推动了主容器的位置。我要达到的目的是,该行在main-container
中具有顶部/底部边距。边距是如何逃避和推动main-container
的。
这是我的代码:
body {
padding: 0;
margin: 0;
}
.main-container {
position: relative;
display: block;
width: 183px;
height: 101px;
background-color: red;
}
.row {
position: relative;
display: block;
margin: 10px 2px;
width: 175px;
height: 15px;
background-color: green;
}
<div class="main-container">
<div class="row">
</div>
<div class="row">
</div>
</div>
但是,如果您运行下面的代码,则没有row
div。您可以看到main-container
的位置不同。这是main-container
所在的位置。
body {
padding: 0;
margin: 0;
}
.main-container {
position: relative;
display: block;
width: 183px;
height: 101px;
background-color: red;
}
<div class="main-container">
</div>
我该如何解决?
答案 0 :(得分:0)
您应将position
类中的.main-container
更改为position: absolute
,而不是position: relative
。
相对定位将随着页面的流动而移动元素,而绝对定位将本质上将其锁定在您将其设置在的任何位置。相对定位在诸如.row
类的情况下更加有用希望它取决于.main-container
类的位置。当您不希望其他元素(特别是父元素)确定其位置时,应使用绝对定位。
body {
padding: 0;
margin: 0;
}
.main-container {
position: absolute;
display: block;
width: 183px;
height: 101px;
background-color: red;
}
.row {
position: relative;
display: block;
margin: 10px 2px;
width: 175px;
height: 15px;
background-color: green;
}
<div class="main-container">
<div class="row">
</div>
<div class="row">
</div>
</div>
This article很好地解释了为什么父母和孩子都拥有position: relative
时会遇到问题。如果您将position
完全移出了父级,那么您甚至都不会发现差异。为什么?因为没有什么可以将其定位为相对。如果将其从.row
类中删除,则会发现相同的结果。相对定位查找的元素的定位不是 static
。在这种情况下,没有一个,因此它实际上并没有做任何事情,因为默认情况下所有父母(正文,html等)都具有position: static
。
body {
padding: 0;
margin: 0;
}
.main-container {
display: block;
width: 183px;
height: 101px;
background-color: red;
}
.row {
position: relative;
display: block;
margin: 10px 2px;
width: 175px;
height: 15px;
background-color: green;
}
<div class="main-container">
<div class="row">
</div>
<div class="row">
</div>
</div>
答案 1 :(得分:0)
<div class="main-container">
<div class="row">
</div>
<div class="row">
</div>
</div>
body {
padding: 10px;
margin: 0;
}
.main-container {
position: relative;
width: 183px;
height: 101px;
background-color: red;
}
.row {
position: relative;
left: 50%;
top: 35%;
transform: translate(-50%, -50%);
margin: 10px 0;
width: 175px;
height: 15px;
background-color: green;
}
在https://codepen.io/3rdsty4bl00d/pen/OGbENg?editors=1100#0中查看