LZ混淆了Doctype定義下分類各個標(biāo)簽的塊級、內(nèi)聯(lián)概念和CSS的塊級、內(nèi)聯(lián)概念。Doctype定義中的inline/block第一個跟Doctype定義有關(guān),你看到的這個規(guī)則,是XHTMLStrict中定義的。那么這個語境下的inline和block是什么意思呢,它們是對html標(biāo)簽進(jìn)行的分類(比如p、div、form都屬于block,而span、a則屬于inline),而和它們最終的CSS屬性一點(diǎn)關(guān)系都沒有(你可以把p的display改為inline,瀏覽器不會打死你,但是接替你的頁面重構(gòu)可能會)。這個在Doctype里定義的規(guī)則直接導(dǎo)致了瀏覽器parse整個文檔的時候構(gòu)建成的樹是什么樣子的。這里有一篇非常棒的關(guān)于元素嵌套規(guī)則及其對文檔結(jié)構(gòu)影響的說明,你可以讀一下。總結(jié):Doctype這個語境下面,inline和block指的是一種分類各個標(biāo)簽的方法,這個方法由各個標(biāo)簽的語義和默認(rèn)的展現(xiàn)形式得來,區(qū)分它們主要是因?yàn)樗鼈冊诓煌膁octype里面會有不一樣的嵌套約束,會影響到瀏覽器生成的文檔結(jié)構(gòu)。CSS的block和inlineLZ第二個代碼規(guī)范的建議和CSS中高寬計(jì)算模式有關(guān)系:塊級只包含塊級的時候,進(jìn)入的模式是塊級∈塊級模式,相關(guān)計(jì)算規(guī)則大致是內(nèi)層寬自適應(yīng)于外層的content-box的寬;外層的content-box自適應(yīng)于內(nèi)部所有塊級容器的高;等等等等。塊級只包含內(nèi)聯(lián)元素的時候,進(jìn)入的模式是內(nèi)聯(lián)∈塊級模式,相關(guān)的規(guī)則大致是:內(nèi)聯(lián)構(gòu)成line-box,line-box的高由內(nèi)聯(lián)元素的高、line-height和vertical-align決定;通過斷行算法,內(nèi)聯(lián)元素組成N個line-box,line-box的寬由塊級元素的content-box的寬決定;各個line-box撐高塊級;等等等等。塊級元素同時包含塊級元素和內(nèi)聯(lián)元素的時候,會為每個內(nèi)聯(lián)元素創(chuàng)建匿名塊,從而拆解問題為塊級/匿名塊∈塊級模式和內(nèi)聯(lián)∈塊級/匿名塊模式,回到規(guī)則1,2去計(jì)算各個元素的最終寬、高。LZ第二個代碼規(guī)范可以這樣解釋:由于第三個規(guī)則的存在,所以為了能夠在所有時候都能完美的控制塊級元素的高和寬,內(nèi)聯(lián)元素和塊級元素并列時,在內(nèi)聯(lián)元素外包裹一層塊級元素。總結(jié):在CSS屬性這個語境下面,inline和block指的是元素最終的display屬性,區(qū)分它們主要是因?yàn)樗鼈儠?dǎo)致不一樣的高寬計(jì)算模式。