css基礎之line-height


    什么是line-height(行高)?line-height設置1.5和150%有什么區別?這是一個比較常見的css面試題,帶着這個問題往下看。所謂行高是指一段文字中某一行的高度嗎?具體來說不是。w3school是這樣定義的:

    line-height 屬性設置行間的距離(行高),該屬性會影響行框的布局,在應用到一個塊級元素時,它定義了該元素中基線之間的最小距離而不是最大距離。

    何為基線?基線不是漢字的底端,從英文字母來看,字母a、b、c的底端就是基線所在位置,文字默認垂直對齊方式就是基線與基線對齊(baseline),下面圖中的藍色線就是基線。

    

    那么基線與基線之間的高度就稱為行高line-height。注意:塊級元素才有行高。

    

    line-height有5個可能的值,分別是normal、number、length、%、inherit。一一介紹:

  1. normal,默認值,不同的瀏覽器值不同,大概是元素font-size的1.1-1.2倍的范圍;
  2. number 一個數字,該數字被稱為縮放因子,縮放因子與元素font-size相乘得到行高;
  3. length 具體的行高就是length;
  4. % 百分比,乘以元素的font-size得到行高;
  5. inherit 繼承父級的行高;

    如果文字不夠直觀,不如看看下面的demo: 

<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
  <title>line-height</title>

<style type="text/css">
p{font-size: 20px; width:200px;}
p.c1{line-height: normal} /*line-height: 24px chrome下。line-height為font-size的1.2倍*/
p.c2{line-height: 1.5;} /*line-height = 20*1.5 = 30px*/
p.c3{line-height: 30px;} /*line-height: 30px*/
p.c4{line-height: 150%;} /*line-height = 20*150% = 30px*/
</style>
<script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.11.2.min.js"></script>
</head>
<body>

<p class="c1">line-height 與 font-size 的計算值之差(在 CSS 中成為“行間距”)分為兩半,分別加到一個文本行內容的頂部和底部。可以包含這些內容的最小框就是行框。</p>
<p class="c2">line-height 與 font-size 的計算值之差(在 CSS 中成為“行間距”)分為兩半,分別加到一個文本行內容的頂部和底部。可以包含這些內容的最小框就是行框。</p>
<p class="c3">line-height 與 font-size 的計算值之差(在 CSS 中成為“行間距”)分為兩半,分別加到一個文本行內容的頂部和底部。可以包含這些內容的最小框就是行框。</p>
<p class="c4">line-height 與 font-size 的計算值之差(在 CSS 中成為“行間距”)分為兩半,分別加到一個文本行內容的頂部和底部。可以包含這些內容的最小框就是行框。</p>

<script type="text/javascript">

$("p").each(function(){
console.info( $(this).css("line-height") )
})

</script>
</body>
</html>
View Code

 

     你會發現,當line-height設置成1.5和150%的效果是一樣的。那么行高設置為一個縮放因子和一個百分比的區別在哪里?區別就在於繼承上,當元素A的行高設置為縮放因子時,A元素的子元素B會繼承這個縮放因子並將縮放因子乘以B的font-size得到B元素的行高;當元素A的行高設置為百分比時,元素A的子元素B的行高直接繼承A元素計算后的行高。

    例如有兩個元素A、B,元素B是元素A的子元素:

    父元素A設置行高為縮放因子時

    元素A font-size:14px; line-height:1.5;   計算后行高為14*1.5 = 21px;

    元素B font-size:28px;  line-height:1.5 (繼承來的); 計算后行高為28*1.5 = 42px;

 

    父元素A設置行高為百分比時

    元素A font-size:14px; line-height:150%;   計算后行高為14*150% = 21px;

    元素B font-size:28px;  直接繼承父元素A的行高計算值21px,此時B的行高比font-size還小,就會導致B元素內的文字上下重疊,代碼如下

<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
  <title>line-height</title>

<style type="text/css">
.c1{font-size: 14px; line-height: 1.5; width: 200px;}
.c2{font-size: 28px;}

.c3{font-size: 14px; line-height: 150%; width: 200px;}
.c4{font-size: 28px;}
</style>
</head>
<body>

<div class="c1">line-height 與 font-size 的計算值之差(在 CSS 中成為“行間距”)分為兩半,分別加到一個文本行內容的頂部和底部。可以包含這些內容的最小框就是行框。
    <p class="c2">line-height 與 font-size 的計算值之差(在 CSS 中成為“行間距”)分為兩半,分別加到一個文本行內容的頂部和底部。可以包含這些內容的最小框就是行框。</p>
</div>
<div class="c3">line-height 與 font-size 的計算值之差(在 CSS 中成為“行間距”)分為兩半,分別加到一個文本行內容的頂部和底部。可以包含這些內容的最小框就是行框。
    <p class="c4">line-height 與 font-size 的計算值之差(在 CSS 中成為“行間距”)分為兩半,分別加到一個文本行內容的頂部和底部。可以包含這些內容的最小框就是行框。</p>
</div>

</body>
</html>
View Code

    因此,為了避免這種情況發生,建議將行高設置縮放因子,避免使用百分比或具體值。

 

本文地址http://www.cnblogs.com/wangmeijian/p/4222908.html by 王美建


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM