鍍金池/ 問答/HTML/ 行高和內(nèi)聯(lián)盒的高度區(qū)別是?

行高和內(nèi)聯(lián)盒的高度區(qū)別是?

鏈接地址:http://www.zhangxinxu.com/wor...
圖片描述

還有文中說內(nèi)聯(lián)盒的高度是取最大的ling-height的高度。是怎么理解的呢?
圖片描述

回答
編輯回答
黑與白

以下是自己對CSS 文本框,行內(nèi)框,行框,vertical-align的理解終結

line-height屬性,也就是行高,指定了塊級元素內(nèi)的/內(nèi)聯(lián)元素內(nèi)單行文本渲染時的行內(nèi)框(inline-box,內(nèi)聯(lián)盒)的高度,一個塊內(nèi)可以有多個內(nèi)聯(lián)文本元素或匿名元素,它們可以有各自的line-height屬性,一行中的多個行內(nèi)框共同決定了行框(line-box)的高度-最高行內(nèi)框的頂部和最低行內(nèi)框的底部之間的距離就是行框(line-box)的高度,也就是我們看到的一行元素占據(jù)的高度。而這個行框(line-box)決定了多行文本之間在垂直方向的排列方式-下一行的行框(line-box)的頂部和上一行的行框(line-box)的底部貼緊。
文本按設置的font-size以及font-family屬性構成一個文本框(text-box),默認情況下這個文本框(text-box)的高度和設置的font-size相同,但是在不同的瀏覽器下可能會有所不同:firefox下和設定的font-size相同,而chrome下會是font-size的1.4倍左右。行內(nèi)框(inline-box,內(nèi)聯(lián)盒)文本框(text-box)之間的高度差的1/2會被添加到文本框(text-box)的頭部和底部,添加的部分就叫做半行間距。
也就是說 行內(nèi)框(inline-box,內(nèi)聯(lián)盒) 是由文本框(text-box)半行間距共同構成的。

通過圖示能更清楚些看到:
行內(nèi)框(inline-box,內(nèi)聯(lián)盒),文本框(text-box),行框(line-box)

那么行內(nèi)框(inline-box,內(nèi)聯(lián)盒)的上下位置又是通過什么決定的呢?
它就是vertical-align屬性-沒有繼承性,只對內(nèi)聯(lián)元素以及table-cell元素有效
vertical-align有不同的屬性,按參考線的不同可以分成3類:
1 相對baseline
baseline就是圖示中的藍色線條表示的,對于baseline的具體位置根據(jù)font-size以及font-family的不同而不同,基本上對應字體及大小下,小寫字母x的底部就是baseline線的位置;對應的屬性值有baseline(默認),sub(baseline往下),super(baseline向上),百分比(baseline+行高的百分比),具體長度值(baseline+指定長度),middle(baseline向上1/2個x-height)。其中提到的x-height就是小寫字母x的高度,在CSS中有一個ex的長度單位指的就是x-height,其具體值大約等于0.5em。

2 相對文本框(text-box)上下邊的
圖示中的綠色上下邊,對應的屬性值有text-top,text-bottom

3 相對行內(nèi)框(inline-box,內(nèi)聯(lián)盒)上下邊的
圖示中的紅色上下邊,對應的屬性值有top,bottom

同時要記住重要的一點在一個內(nèi)聯(lián)元素的所在的父元素(塊級元素)的開頭會添加一個寬度為0的匿名字符x,這個看不到的x字符做為以baseline為基準的對齊方式的基準

下面給出一些例子來看看對齊的效果以及對最終行框(line-box)高度的影響

例子1:

vertical-align:text-top; 
line-height: 72px; 
font-size: 36px;
.div-line{
    line-height: 72px;
    font-size: 36px;
}
.span-line-0{
    background-color: #F74A81;
    font-size: 36px;
    vertical-align: text-top;
}

    <div class="div-line" style="margin-top: 10px;">x
        <span class="span-line-0">00X00</span>
        <span class="span-line-0">abcdefhijklmn</span>
        <span class="span-line-0">opqrstuvwxyz</span>
    </div>

圖片描述
圖片描述

最終div的高度是90px:灰色區(qū)為行內(nèi)框(inline-box,內(nèi)聯(lián)盒),div構成一個行框(line-box),紅色虛線以及紅色背景的文字構成文本框(text-box),.span-line-0的vertical-align對齊方式為text-top,那么就和紅色虛線的文本框的頂部對齊,紅色虛線的行內(nèi)框的半行間距為(72-36)/2=18px,那么按行框構成的規(guī)則,整個行框的高度值為72+18=90px;

例子2:

vertical-align:base-line; 
line-height: 72px; 
font-size: 36px;
        .div-line{
            line-height: 72px;
            font-size: 36px;
        }
        .span-line-0{
            background-color: #F74A81;
            font-size: 36px;
        }

        .span-line-1{
            background-color: #F74A81;
            font-size: 20px;
        }
        .span-line-2{
            background-color: greenyellow;
            font-size: 40px;
        }
        
    <div class="div-line">
        <span class="span-line-0">00X00</span>
        <span class="span-line-1">abcdefhijklmnopqrstuvwxyz</span>
        <span class="span-line-2">abcdefhijklmnopqrstuvwxyz</span>
    </div>

圖片描述
圖片描述
共有3塊行內(nèi)框(inline-box,內(nèi)聯(lián)盒),對齊方式為默認的baseline,要確定baseline的集體位置才能計算出各個內(nèi)聯(lián)盒的相對位置,下面提供一個算法,僅供參考:

middle=baseline+0.5*x-height;
x-height=0.5em=0.5*front-size;
=>
middle=baseline+0.25*front-size;
=>
baseline=middle-0.25*front-size;

先middle對齊

匿名字符x行內(nèi)框的baseline位置為middle點往下9px;
第1個行內(nèi)框的(00X00)baseline位置為middle點往下9px;
第2個行內(nèi)框的(abcdefhijklmnopqrstuvwxyz)位置為middle點往下5px;
第3個行內(nèi)框的(abcdefhijklmnopqrstuvwxyz)位置為middle點往下10px;

接著以匿名字符x的baseline線對齊,
第1個行內(nèi)框的不動
第2個行內(nèi)框的向下調(diào)整移動4px
第3個行內(nèi)框的向上調(diào)整移動1px

第2個行內(nèi)框最低
第3個行內(nèi)框最高

最終相比設定line-height,高出5px,最終的行框高度為72+5=77px;
如果將第1個行內(nèi)框的(00X00)的font-size位置為18px,按上面的算法最終的行框高度為72+5.5=77.5px;

啰里啰嗦說了那么多,希望對你有幫助......

以上內(nèi)容參考了Vertical-Align: All You Need To Know

2017年9月1日 03:43
編輯回答
拮據(jù)

你問題太多我也不知道你到底想問什么
首先標題行盒的高度計算w3c規(guī)范中有描述,簡單概括就是需要包裹住所有的子盒子具體見 10.8,而內(nèi)聯(lián)盒的高度計算方式規(guī)范也有在10.6.1 。
第一張圖沒太看明白你什么意思
中間的問題,在zxx的這篇文章這不是死結論,而是幫你理解line box高度的,在某些情況下這個結論是不對的
第二張圖你這樣理解,中線間距往下移一個字體中線到基線的距離不就正好等于基線間的距離嗎,不過實際上這個圖在css中也基本沒什么用,css中你需要知道的是'line-height'這個值會對布局產(chǎn)生哪些影響

2017年4月14日 07:34