为什么 "margin-top:10%" 超过其父 div 的 10%?
Why is "margin-top:10%" pushing more than 10% of its parent div?
在我的 div-1 中,高度是 300px,但是当我尝试在其中向 <p>
添加边距时,它在 px 上工作得很好,但百分比超过其父 div.
的 10%
* {
box-sizing: border-box;
margin: 0;
}
.div-1 {
border: 2px solid yellow;
background: rgb(15, 15, 145);
color: white;
height: 300px;
}
.div-2 {
border: 2px solid rgb(218, 20, 208);
background: rgb(53, 88, 13);
color: white;
height: 300px;
}
.div-1 p {
background: coral;
padding: 20px;
width: 20%;
margin: auto;
margin-top: 10%;
}
<div class="div-1">
<p>div1</p>
</div>
<div class="div-2">
<p>div1</p>
</div>
当你用百分比定义边距时,它是refer to the width of the containing block,尝试使用vh
而不是%
,或者使用其他解决方案,如果它不适合你的项目;另一种方法是使用 pseudo elements
;查看代码片段中的差异:
* {
box-sizing: border-box;
margin: 0;
}
.div-1,
.div-2 {
height: 300px;
color: white;
}
.div-1 {
border: 2px solid yellow;
background: rgb(15, 15, 145);
}
.div-2 {
border: 2px solid rgb(218, 20, 208);
background: rgb(53, 88, 13);
width: 70%;
}
.div-1.div--pseudo:before,
.div-2.div--pseudo:before {
content: '';
display: block;
width: 100%;
height: 10%;
background: rgba(255, 255, 255, .2);
}
.div-1 p,
.div-2 p {
background: coral;
padding: 20px;
width: 20%;
margin-left: auto;
margin-right: auto;
}
.div-1.div--simple p,
.div-2.div--simple p {
margin-top: 10%;
}
.div-1.div--hv p,
.div-2.div--hv p {
margin-top: 5vh;
}
<div class="div-1 div--simple">
<p>div1 top gap depends on container width</p>
</div>
<div class="div-2 div--simple">
<p>div2 top gap depends on container width</p>
</div>
<hr />
<div class="div-1 div--pseudo">
<p>div1 with using pseudo gap</p>
</div>
<div class="div-2 div--pseudo">
<p>div2 with using pseudo gap</p>
</div>
<hr />
<div class="div-1 div--hv">
<p>div1 with using VH</p>
</div>
<div class="div-2 div--hv">
<p>div2 with using VH</p>
</div>
您可以使用 css 变量:
:root {
--h300 : 300px;
}
* {
box-sizing : border-box;
margin : 0;
}
.div-1 {
border : 2px solid yellow;
background : #0f0f91;
color : white;
height : var(--h300);
}
.div-2 {
border : 2px solid #da14d0;
background : #35580d;
color : white;
height : var(--h300);
}
.div-1 p {
background : coral;
padding : 20px;
width : 20%;
margin : auto;
margin-top : calc(var(--h300) / 10);
}
<div class="div-1">
<p>div1</p>
</div>
<div class="div-2">
<p>div2</p>
</div>
在我的 div-1 中,高度是 300px,但是当我尝试在其中向 <p>
添加边距时,它在 px 上工作得很好,但百分比超过其父 div.
* {
box-sizing: border-box;
margin: 0;
}
.div-1 {
border: 2px solid yellow;
background: rgb(15, 15, 145);
color: white;
height: 300px;
}
.div-2 {
border: 2px solid rgb(218, 20, 208);
background: rgb(53, 88, 13);
color: white;
height: 300px;
}
.div-1 p {
background: coral;
padding: 20px;
width: 20%;
margin: auto;
margin-top: 10%;
}
<div class="div-1">
<p>div1</p>
</div>
<div class="div-2">
<p>div1</p>
</div>
当你用百分比定义边距时,它是refer to the width of the containing block,尝试使用vh
而不是%
,或者使用其他解决方案,如果它不适合你的项目;另一种方法是使用 pseudo elements
;查看代码片段中的差异:
* {
box-sizing: border-box;
margin: 0;
}
.div-1,
.div-2 {
height: 300px;
color: white;
}
.div-1 {
border: 2px solid yellow;
background: rgb(15, 15, 145);
}
.div-2 {
border: 2px solid rgb(218, 20, 208);
background: rgb(53, 88, 13);
width: 70%;
}
.div-1.div--pseudo:before,
.div-2.div--pseudo:before {
content: '';
display: block;
width: 100%;
height: 10%;
background: rgba(255, 255, 255, .2);
}
.div-1 p,
.div-2 p {
background: coral;
padding: 20px;
width: 20%;
margin-left: auto;
margin-right: auto;
}
.div-1.div--simple p,
.div-2.div--simple p {
margin-top: 10%;
}
.div-1.div--hv p,
.div-2.div--hv p {
margin-top: 5vh;
}
<div class="div-1 div--simple">
<p>div1 top gap depends on container width</p>
</div>
<div class="div-2 div--simple">
<p>div2 top gap depends on container width</p>
</div>
<hr />
<div class="div-1 div--pseudo">
<p>div1 with using pseudo gap</p>
</div>
<div class="div-2 div--pseudo">
<p>div2 with using pseudo gap</p>
</div>
<hr />
<div class="div-1 div--hv">
<p>div1 with using VH</p>
</div>
<div class="div-2 div--hv">
<p>div2 with using VH</p>
</div>
您可以使用 css 变量:
:root {
--h300 : 300px;
}
* {
box-sizing : border-box;
margin : 0;
}
.div-1 {
border : 2px solid yellow;
background : #0f0f91;
color : white;
height : var(--h300);
}
.div-2 {
border : 2px solid #da14d0;
background : #35580d;
color : white;
height : var(--h300);
}
.div-1 p {
background : coral;
padding : 20px;
width : 20%;
margin : auto;
margin-top : calc(var(--h300) / 10);
}
<div class="div-1">
<p>div1</p>
</div>
<div class="div-2">
<p>div2</p>
</div>