前端小知識:為什麼你寫的 height:100% 不起作用?,小知識height

來源:互聯網
上載者:User

前端小知識:為什麼你寫的 height:100% 不起作用?,小知識height

(點擊上方公眾號,可快速關注)

作者:JiaXinYi

https://segmentfault.com/a/1190000012707337


這個知識不算冷門的,但是用的時候可能還是會有些懵逼,不能生效時搜一搜就能找到答案了,但是你真的懂了嗎?為什麼想要設定一個全屏元素的時候,高度不受%的控制?

1.百分比寬高的設定

按照w3c中的width和height屬性,可以明確%設定寬高是根據父元素的寬高來的:

http://www.w3school.com.cn/cssref/prdimwidth.asp

http://www.w3school.com.cn/cssref/prdimheight.asp

2.width:100%;

我們寫下這樣一段代碼,隨意設定一個背景色便於觀察元素

 
  1. <body>

  2.    <div style="width:100%;height:100%;background-color:blueviolet;">

  3.    width:100%;height:100%;

  4.    </div>

  5. </body>

  6. //寬100%,我們現在看到的高是屬於font-size的,而不是100%;


 

  1. <body>

  2.    <div style="width:100%;height:200px;background-color:blueviolet;">

  3.    width:100%;height:200px;

  4.    </div>

  5. </body>

  6. //效果如下


可以看到基本上寬的100%很容易就實現的,但是這裡的height卻不能設定成%比的(該元素會消失看不見),這是為什麼呢?

3.瀏覽器是如何計算高度和寬度的

Web瀏覽器在計算有效寬度時會考慮瀏覽器視窗的開啟寬度。如果你不給寬度設定任何預設值,那瀏覽器會自動將頁面內容平鋪填滿整個橫向寬度。即我們不設定寬,會自動填滿整個橫向寬度,如下:

 
  1. <div style="height:100%;">height:100%;</div>  


但是高度的計算方式完全不一樣。事實上,瀏覽器根本就不計算內容的高度,除非內容超出了視窗範圍(導致捲軸出現)。或者你給整個版面設定一個絕對高度。否則,瀏覽器就會簡單的讓內容往下堆砌,頁面的高度根本就無需考慮。

因為頁面並沒有預設的高度值,所以,當你讓一個元素的高度設定為百分比高度時,無法根據擷取父元素的高度,也就無法計算自己的高度。

即父元素的高度只是一個預設值:height: auto;我們設定height:100%時,是要求瀏覽器根據這樣一個預設值來計算百分比高度時,只能得到undefined的結果。也就是一個null值,瀏覽器不會對這個值有任何的反應。

各個瀏覽器對於寬高的解析也不相同,大家可以自己搜尋一下。

參考:http://www.webhek.com/post/css-100-percent-height.html

4.如何解決

現在你知道了吧,%是一個相對父元素計算得來的高度,要想使他有效,我們需要設定父元素的height;

要特別注意的一點是,在之中的元素的父元素並不僅僅只是,還包括了。

所以我們要同時設定這兩者的height,只設定其中一個是不行的:

 
  1.        html,body{

  2.            height: 100%;

  3.            margin: 0;

  4.            padding: 0;

  5.        }


5.關於line-height置中的一點誤解?
 
  1. <!DOCTYPE html>

  2. <html lang="en">

  3. <head>

  4.    <meta charset="UTF-8">

  5.    <meta name="viewport" content="width=device-width, initial-scale=1.0">

  6.    <meta http-equiv="X-UA-Compatible" content="ie=edge">

  7.    <title>Document</title>

  8.    <style>

  9.        html,body{

  10.            height: 100%;

  11.            margin: 0;

  12.            padding: 0;

  13.        }

  14.        div {

  15.            color: white;

  16.            text-align: center;

  17.            font-size: 30px;

  18.            line-height: 100%;

  19.            background-color: blueviolet;

  20.        }

  21.    </style>

  22. </head>

  23. <body>

  24.    <!-- <div >width:100%;height:100%;</div> -->

  25.    <div style="height:100%;">height:100%;</div>

  26.    <!-- <div >width:100%;height:200px;</div> -->

  27. </body>

  28. </html>

全部代碼如上,可以看到設定了line-height為100%沒有置中,這是為什麼呢,因為這時候的%是相對於字型尺寸的?所以直接作用於沒有絕對高度的元素是不行的。

line-height屬性說明:http://www.w3school.com.cn/cssref/prdimline-height.asp

這時候要想置中,可以如下,做一個div嵌套,一個負責高度,一個負責置中,雖然感覺並不會這樣用到,但是置中還是很靈驗的~

 
  1. <!DOCTYPE html>

  2. <html lang="en">

  3. <head>

  4.    <meta charset="UTF-8">

  5.    <meta name="viewport" content="width=device-width, initial-scale=1.0">

  6.    <meta http-equiv="X-UA-Compatible" content="ie=edge">

  7.    <title>Document</title>

  8.    <style>

  9.        html,

  10.        body {

  11.            height: 100%;

  12.            margin: 0;

  13.            padding: 0;

  14.        }

  15.        .div1 {

  16.            background-color: blueviolet;

  17.            position: relative;

  18.        }

  19.        .div2 {

  20.            font-size: 30px;    

  21.            color: white;

  22.            text-align: center;                    

  23.            width: 400px;

  24.            position: absolute;

  25.            left: 50%;

  26.            top: 50%;

  27.            transform: translateX(-50%)  translateY(-50%);

  28.        }

  29.    </style>

  30. </head>

  31. <body>

  32.    <!-- <div >width:100%;height:100%;</div> -->

  33.    <div style="height:100%;" class="div1">

  34.        <div class="div2">height:100%;</div>

  35.    </div>

  36.    <!-- <div >width:100%;height:200px;</div> -->

  37. </body>

  38. </html>


6.源碼

https://github.com/JiaXinYi/ife-study/blob/master/height/height.html


覺得本文對你有協助?請分享給更多人

關注「前端大全」,提升前端技能

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.