1. 程式人生 > >CSS行高——line-height 文字的垂直居中(display:block;情況下)

CSS行高——line-height 文字的垂直居中(display:block;情況下)

初入前端的時候覺得CSS知道display、position、float就可以在佈局上游刃有餘了,隨著以後工作問題層出不窮,才逐漸瞭解到CSS並不是幾個style屬性那麼簡單,最近看了一些關於行高的知識,就此總結一下。

所謂行高是指文字行基線間的垂直距離。要想理解這句話首先得了解幾個基本知識:

頂線、中線、基線、底線

複製程式碼
<!DOCTYPE html>
<html>
    <head>
        <title>Test</title>
        <style type="text/css" >
            span
            
{ padding:0px; line-height:1.5; } </style> </head> <body> <div class="test"> <div style="background-color:#ccc;"> <span style="font-size:3em;background-color:#999;">中文English</
span> <span style="font-size:3em;background-color:#999;">English中文</span> </div> </div> </body> <html>
複製程式碼

wps_clip_image-14492

從上到下四條線分別是頂線、中線、基線、底線,很像才學英語字母時的四線三格,我們知道vertical-align屬性中有top、middle、baseline、bottom,就是和這四條線相關。

尤其記得基線不是最下面的線,最下面的是底線。

行高、行距與半行距

行高是指上下文字行的基線間的垂直距離,即圖中兩條紅線間垂直距離。

行距是指一行底線到下一行頂線的垂直距離,即第一行粉線和第二行綠線間的垂直距離。

半行距是行距的一半,即區域3垂直距離/2,區域1,2,3,4的距離之和為行高,而區域1,2,4距離之和為字型size,所以半行距也可以這麼算:(行高-字型size)/2

wps_clip_image-14662

內容區、行內框、行框

內容區:底線和頂線包裹的區域,即下圖深灰色背景區域。

wps_clip_image-14718

行內框,每個行內元素會生成一個行內框,行內框是一個瀏覽器渲染模型中的一個概念,無法顯示出來,在沒有其他因素影響的時候(padding等),行內框等於內容區域,而設定行高時行內框高度不變,半行距【(行高-字型size)/2】分別增加/減少到內容區域的上下兩邊(深藍色區域)

行框(line box),行框是指本行的一個虛擬的矩形框,是瀏覽器渲染模式中的一個概念,並沒有實際顯示。行框高度等於本行內所有元素中行內框最大的值(以行高值最大的行內框為基準,其他行內框採用自己的對齊方式向基準對齊,最終計算行框的高度),當有多行內容時,每行都會有自己的行框。

複製程式碼
<div style="background-color:#ccc;">
                <span style="font-size:1em;background-color:#666;">中文English</span>
                <span style="font-size:3em;background-color:#999;">中文English</span>
                <span style="font-size:3em;background-color:#999;">English中文</span>
                <span style="font-size:1em;background-color:#666;">English中文</span>
            </div>
複製程式碼

wps_clip_image-14832

line-height

基本概念搞明白了我們就可以說說本文的主角line-height屬性了。

定義:line-height 屬性設定行間的距離(行高),不能使用負值。該屬性會影響行框的佈局。在應用到一個塊級元素時,它定義了該元素中基線之間的最小距離而不是最大距離。line-height 與 font-size 的計算值之差(行距)分為兩半,分別加到一個文字行內容的頂部和底部。可以包含這些內容的最小框就是行框。

可能的值

說明
normal 預設,設定合理的行間距。
number 設定數字,此數字會與當前的字型尺寸相乘來設定行間距。相當於倍數
length 設定固定的行間距。
% 基於當前字型尺寸的百分比行間距。
inherit 規定應該從父元素繼承 line-height 屬性的值。

貌似很簡單,但感覺沒什麼用出的樣子,那就讓我們看看line-height的幾個應用

div文字垂直居中

div居中對齊一直是個難題,水平還好解決些,margin:0 auto; 可以解決現代瀏覽器,IE下text-align:center。但垂直居中就沒那麼簡單了,預設是這樣子的。

複製程式碼
<div style="width:150px;height:100px;background-color:#ccc;">
                <span>This is a test.<br/>
                        This is a test.
                </span>
            </div>
複製程式碼

wps_clip_image-14888

我們可以利用line-block這樣做

複製程式碼
<div style="width:150px;height:100px;line-height:100px;background-color:#ccc;font-size:0;">
                <span style="display:inline-block;font-size:10px;line-height:1.4em;vertical-align:middle;">This is a test.<br/>
                        This is a test.
                </span>
            </div>
複製程式碼

wps_clip_image-14910

單行就比較簡單了,把line-height設定為box的大小可以實現單行文字的垂直居中

複製程式碼
<div style="line-height:100px;border:dashed 1px #0e0;">
                This is a test.
            </div>
複製程式碼

wps_clip_image-14956

元素對行高影響

行框高度是行內最高的行內框高度,通過line-height調整,內容區行高與字型尺寸有關,padding不對行高造成影響。

複製程式碼
<div style="border:dashed 1px #0e0;margin-bottom:30px;">
                <span style="font-size:14px;background-color:#999;">This is a test</span>
            </div>
            <div style="border:dashed 1px #0e0;">
                <span style="font-size:14px;padding:20px;background-color:#999;">This is a test</span>
            </div>
複製程式碼

wps_clip_image-15002

第二個span雖然因為padding原因內容區變大,當行高並未改變

行高的繼承

行高是可繼承的,但並不是簡單的copy父元素行高,繼承的是計算得來的值。

複製程式碼
<div style="border:dashed 1px #0e0;line-height:150%;font-size:10px;">
                <p style="font-size:30px;">
                    1232<br/>
                    123
                </p>
            </div>
複製程式碼

按一般理解既然line-height可以繼承,那麼p元素的行高也是150%了,可是事實是這樣的

wps_clip_image-15035

非但沒有變成150%,反而連100%都沒有,重疊了!這就是繼承計算的結果,如果父元素的line-height有單位(px、%),那麼繼承的值則是換算後的一個具體的px級別的值;上例p得到的是10px*150%=15px的行高,而P的字型大小為30px,所以發生了重疊。

而如果屬性值沒有單位,則瀏覽器會直接繼承這個“因子(數值)”,而非計算後的具體值,此時它的line-height會根據本身的font-size值重新計算得到新的line-height 值。

複製程式碼
<div style="border:dashed 1px #0e0;line-height:1.5;font-size:10px;">
                <p style="font-size:30px;">
                    1232<br/>
                    123
                </p>
            </div>
複製程式碼

wps_clip_image-15080

所以在使用line-height時,除非你刻意否則儘量使用倍數設值

相關推薦

CSS——line-height 文字垂直居中(display:block;情況)

初入前端的時候覺得CSS知道display、position、float就可以在佈局上游刃有餘了,隨著以後工作問題層出不窮,才逐漸瞭解到CSS並不是幾個style屬性那麼簡單,最近看了一些關於行高的知識,就此總結一下。 所謂行高是指文字行基線間的垂直距離。要想理解這句話

cssline-height的一些深入理解及應用

out spa 行高 定義 blank 分享 tac 而且 -s 聲明:此文為轉載,點擊查看原文,原文發布日期為2009年,僅供大家參考,如有侵權24小時內刪除,聯系QQ:1522025433。 一、前言 前兩天在騰訊ISD團隊博客上看到一篇翻譯的文章“深入理解css 行高

line-height,元素居中

元素居中的css寫法: margin: 0 auto;水平居中 flex 佈局:上下垂直居中 position為absolute的時候使用left和top50%,然後再設定margin-top,margin-left值設為自己寬高的一半的負值。這樣也可以始終

CSS文字文字樣式之文字line-height詳解

一、基本介紹 line-height: 對於代替元素,line-height沒有影響 對於非代替元素,line-height才有影響 對於塊級元素,css屬性lin

cssLine Height屬性

1.line-height可以被定義為:body{line-height:normal;} 2.line-height可以被定義為:body{line-height:inherit;} 3.line-

[ CSS ] line-height垂直居中!

在此之前,對於line-height 與垂直居中的問題,經常碰到。  比如,圖片與span在同一個box中的時候,竟然會各種偏移。要想達到理想的效果真的是各種難。 有時間,決定認真的啃一啃。 一 line-heigth: 1. line-height: 顧名思義,行高,指代

css不定使元素水平垂直居中

父元素高度不定,子元素水平垂直居中 html <div class="parent"> <div class="child">123456</div> <

各瀏覽器私有字首-相容line-height

line-height: 35px\9; /*IE8*/    *line-height: 35px; /* IE7支援 */     _line-height: 35px; /* IE6支援 */ 

css基礎 line-height 文字 簡單示例

utf-8 visual lin doctype class 優秀 字號 視頻 post 禮悟:   公恒學思合行悟,尊師重道存感恩。葉見尋根三返一,江河湖海同一體。 虛懷若谷良心主,願行無悔給最苦。讀書鍛煉養身心,誠勸且行且珍惜。   

css基礎 文字垂直居中 等於容器高度

spa 感恩 .cn 代碼 head 文字 分享 技術 blue 禮悟:   公恒學思合行悟,尊師重道存感恩。葉見尋根三返一,江河湖海同一體。 虛懷若谷良心主,願行無悔給最苦。讀書鍛煉養身心,誠勸且行且珍惜。    i

彈性盒子的設定文字垂直居中

彈性盒子的行高設定文字垂直居中 行高設定居中對齊,是針對內容寬度 在CSS3的border-sizing模式下,是內減模式 所以要減去padding和border 要小心 <!DOCTYPE html> <html lang="

css實現文字垂直居中且自動換,過多的文字顯示省略號

先貼個效果圖 可以看到,文字較少時可以垂直居中,文字多則換行,再多就顯示省略號 下面貼程式碼 <div class="scroll-row"> <di

css佈局-多文字垂直居中

場景:父元素 高度固定,如何使其中的文字垂直居中? 方法一: 程式碼: <style> *{padding: 0;margin:0;font-size: 12px;} div{float: left;width: 20

關於CSS中的line-height等於容器為什麼會居中

大家都用過line-height,可以實現垂直文字居中: //html <p> 這是文字 </p> //css p{ height: 40px; line-height: 40px; border: 1px solid red; font-si

CSSline-height屬性詳解

行高的概念看上去很簡單——文字行的高度,其實,行高所涉及到的基礎知識,對於今後理解其它屬性也很重要。 大片密密麻麻的文字往往會讓人覺得乏味,因此適當地調整行高(line-height)可以減低閱讀的困難與枯燥,並且使頁面顯得美觀。行高指的是文字行的基線間的距離,但是文字之間的空白距離不僅僅是行高決定的,同時

css實現文字垂直居中且自動換

<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta http-equiv="X-UA-Comp

固定容器高度的多文字垂直居中

需要 pad color ica round pre 絕對定位 span ddl 思路:把文字用span包裹起來,設置為inline-block,相當於圖片img的屬性。父div用table-cell的樣式,用vertical-align:middle實習上下居中 <

單行或多文字垂直居中

以前發現的問題沒關注,現在終於重點弄了一下 <div> <p>???</p> </div> 假如知道div的高度,但是不知道p裡面的內容是1行還是2行,想讓p垂直居中的話 可以js獲取p的高度和div的高度,然後p標籤margin-top的值

2018.12.15 2d形變,動畫,表格,多文字垂直居中

1複習(過度,陰影,偽類設計邊框,) <!DOCTYPE html><html><head> <meta charset="UTF-8"> <title>複習預習</title> <link href="css/font-awes

DIV+CSS如何讓文字垂直居中

在說到這個問題的時候,也許有人會問CSS中不是有vertical-align屬性來設定垂直居中的嗎?即使是某些瀏覽器不支援我只需做少許的CSS Hack技術就可以啊!所以在這裡我還要囉嗦兩句,CSS中的確是有vertical-align屬性,但是它只對(X)HTML元素中擁