1. 程式人生 > >div等元素height:100%高度為什麼不生效

div等元素height:100%高度為什麼不生效

以前一直很鬱悶一個問題,為什麼設定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都設定高度