padding ,margin百分比賦值時(無論豎,橫)都是相對於容器寬度的
阿新 • • 發佈:2019-01-03
你未必知道的CSS小知識:元素豎向的百分比設定是相對於容器的寬度,而不是高度!
這是一個很讓人困惑的CSS特徵,我之前也談到過它。我們大家都知道,當按百分比設定一個元素的寬度時,它是相對於父容器的寬度計算的,但是,對於一些表示豎向距離的屬性,例如padding-top,padding-bottom,margin-top,margin-bottom等,當按百分比設定它們時,依據的也是父容器的寬度,而不是高度。
下面是一個例項演示,你可以調整容器的寬度,但你會發現,黃塊塊的padding-bottom的距離也會隨之寬度而變大或變小。
<!DOCTYPE html>
<html >
<head>
<meta charset="{CHARSET}">
<title></title>
<style type="text/css">
body {
font-family: Arial, sans-serif;
padding-top: 30px;
text-align: center;
}
.wrapper {
width: 400px;
margin: 0 auto;
border: solid 1px black;
}
.box {
width: 100px;
height: 100px;
background: gold;
margin-left: auto;
margin-right: auto;
padding-top : 10%;
padding-bottom: 10%;
margin-bottom: 5%;
}
.range {
display: block;
margin: 20px auto;
}
output {
text-align: center;
display: block;
font-weight: bold;
padding-bottom: 20px;
}
output span {
font-weight: normal;
}
</style>
</head>
<body>
<div class="wrapper" id="w">
<div class="box" id="b"></div>
</div>
<input type="range" min="120" max="400" value="400" class="range" id="r">
<output>寬度是: <span id="op">400px</span></output>
<output>黃塊塊的Padding bottom是:<br><span id="op2">10%</span></output>
</body>
<script type="text/javascript">
var cw = document.getElementById('w'),
r = document.getElementById('r'),
b = document.getElementById('b'),
op = document.getElementById('op'),
op2 = document.getElementById('op2');
r.onchange = function() {
cw.style.width = this.value + 'px';
op.innerHTML = this.value + 'px';
op2.innerHTML = window.getComputedStyle(b, null).getPropertyValue('padding-top');
};
</script>
</html>
上面的程式碼中,我們對內部子元素聲明瞭3個豎向的距離,都是百分比形式。當移動滑塊時,我們的js程式碼只需修改了容器的寬度。但是,這個這三個屬性高度都跟隨著變化,可以看出,它們的百分比計算是基於容器的寬度,而不是高度的