div等元素height:100%高度為什麼不生效
阿新 • • 發佈:2019-01-01
以前一直很鬱悶一個問題,為什麼設定height:100%不生效,尤其是設定body:height:100%不生效,後來就很少使用了這個了。
今天在學習谷歌地圖時關於height:100%看到了解答:
In specific, all percentage-based sizes must inherit from parent block elements, and if any of those ancestors fail to specify a size, they are assumed to be sized at 0 x 0 pixels
具體地講,所有基於本分比的尺寸必須從父塊元素繼承,並且如果任一父項未能指定尺寸,則它們的尺寸假定為0 x 0畫素
所以我特地有查看了我只設定body的height:100%的情況,發現body的高度就為0,所以子元素的高度設定為height:100%也為0,如下
那原因是因為body設定的height:100%要從它的父塊元素那裡繼承,但它的父塊元素html沒有設定高度,檢視html的height:
當我再html設定了height:100%後,body和div設定的height:100%便生效了
body的height:100%有作用了:
div的height:100%有作用了:
當然html也有高度了:
可以測試本例子的完整程式碼:
<!DOCTYPE html>
<html >
<head>
<title></title>
<style type="text/css">
html,body { height: 100%;margin: 0; padding: 0;}
#map { height: 100%; }
</style>
<script src="http://maps.googleapis.com/maps/api/js?key=AIzaSyDY0kkJiTPVd2U7aTOAwhc9ySH6oHxOIYM&sensor=false" ></script>
</head>
<body>
<div id="map"></div>
<script type="text/javascript">
var map ;
function initMap(){
map = new google.maps.Map(document.getElementById('map'),{
center: {lat: -34.397, lng: 150.644},
zoom: 8
});
}
initMap();
</script>
</body>
</html>
通過谷歌地圖的學習明白了為什麼之前設定的height:100%不生效,尤其是body也設定了height:100%,但一直沒去想它的父元素height沒設定高度,導致高度為0.因為父元素沒高度,父元素的父元素也沒高度,要同時將body和html都設定高度。