|
導讀網頁的本質就是超級文本標記語言,通過結合使用其他的Web技術(如:腳本語言、公共網關接口、組件等),可以創造出功能強大的網頁。因而,超級文本標記語言是萬維網(Web)編程的基礎,也就是說萬維網是建立... 網頁的本質就是超級文本標記語言,通過結合使用其他的Web技術(如:腳本語言、公共網關接口、組件等),可以創造出功能強大的網頁。因而,超級文本標記語言是萬維網(Web)編程的基礎,也就是說萬維網是建立在超文本基礎之上的。超級文本標記語言之所以稱為超文本標記語言,是因為文本中包含了所謂“超級鏈接”點。 本章給大家介紹css inline-block屬性各瀏覽器兼容以及水平間隙問題解決方案。有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。inline-block屬性 說明: 設置這個值之后對象自己呈遞為內聯對象,但是對象內的內容作為 block boxes 呈遞。也就是說設置了這個值的元素就等于可以在一個可以包含 block boxes的 inline box元素。而話說IE6、7雖然是能支持 inline-block 的,但是在他們眼里display:inline-block只是觸發layout 的一個條件,而非W3C規定的東西。不過我們正好可以利用IE的layout來模擬實現display:inline-block的效果。 inline-block各個瀏覽器的兼容方案 有兩種方法,都是先觸發IE的layout,然后再定義 display:inline,讓塊元素自身呈遞為內聯對象,如下: 1. 其中在所有能觸發layout的屬性中,排除position:absolute 和浮動以及width,height之后,能用的就只有display:inline-block了,如下: fn-ib{display:inline-block;}fn-i{*display:inline;}注意 兩個display 要先后放在兩個 CSS 聲明中才有效果,如果先定義了 display:inline-block,然后再將 display 設回 inline 或 block,layout 不會消失。 2. 第一種方法要放在兩個CSS聲明中,有時稍不注意就可能搞錯了,出發IE的layout還有 zoom:value,代碼如下: fn-ibz{display:inline-block;*display:inline;*zoom:1}從上我們看出IE6、7是支持屬性 inline-block的,只是沒有實現W3C的效果,所以我們利用layout再display:inline來模擬inline-block屬性的效果。 好了,現在有解決各個瀏覽器 inline-block 的方案了,接下來要解決是:在不同瀏覽器下看下面的例子:
inline-block元素在不同瀏覽器下有間隙是inline自身的性質,不是bug 然后我們發現在支持display:inline-block屬性的瀏覽器中 inline 和 block 元素 display:inline-block 后均會產生水平空隙;而在IE67以及IE(Q)模擬 display:inline-block 后分兩種情況:模擬之后的塊元素沒有間距,而內聯元素有間隙。為什么?這里再補充一個知識點:inline元素在默認狀態下排列都是有間隙的。所以以上現象就又如下解釋了: 支持display:inline-block屬性的瀏覽器,其元素本身就相當于inline元素,所以現代瀏覽器中都有間隙;而模擬的方案中,因為雖然將塊元素設置 display:inline 能使其想行內元素一樣水平排列,但是block 元素還是block 元素,不會真的變成inline 元素,所以就沒有空隙。 而產生空隙的根本原因是 HTML 中的換行符、空格符、制表符等字符產生了空白符。 inline-block之間的水平間隙問題解決方案 以上我們知道產生間隙的根本原因是HTML 中的換行符、空格符、制表符等字符,俺么我們把標簽與標簽之間的空格去掉,就不會有問題了么?所以代碼如下: HTML代碼如下: <div class="parent">
<strong class="fn-ibz">內聯元素</strong><strong class="fn-ibz">
內聯元素</strong><strong class="fn-ibz">
內聯元素</strong><strong class="fn-ibz">
內聯元素</strong>
</div>
<div class="parent">
<div class="fn-ibz">塊元素</div><div class="fn-ibz">
塊元素</div><div class="fn-ibz">
塊元素</div><div class="fn-ibz">
塊元素</div>
</div>效果圖:
改變DOM結構來解決inline-block之間的間隙問題 以上DEMO代碼我是做了處理的,所以我們就看不到間隙。但是問題由來了: 如果是靜態的話我們這么做確實沒多大問題,假如是后臺直接生成的呢?或者以后維護同事看到這代碼怎么這么寫的,改回來了呢。所以用CSS解決還是最好的途徑。我第一次看到這個情況第一反應就是用margin負值來解決,后來知道產生空隙的根本原因之后,覺得margin負值方法雖然能夠解決,但是沒有對癥下藥,間隙產生原因的是HTMl間的換行符、空格符、制表符等字符,而間隙會隨著字體大小等屬性變化而變化。所以就可以用CSS控制字符大小來找出一個。所以參考YUI3中解決的方案,我得到如下代碼: .f-w-p-parent{
font-size:0;
letter-spacing:-4px;
*letter-spacing:normal;
*word-spacing:-1px;
}
.f-w-p-inner{
font-size:12px;
letter-spacing:normal;
*word-spacing:normal;
vertical-align: top;
}效果圖:
CSSinline-block的間隙的方案 然后我們分析每一行代碼的作用:
inline-block的優點 這里不說inline-block布局比浮動布局節省瀏覽器資源,我們就得拋棄浮動布局,投向inline-block布局的懷抱(而且官網也沒這個說法),畢竟一個事物的出現畢竟有它存在的意義的,而且浮動布局也是認識度最高的布局方法。所以還是那句話,具體情況具體分析,明明使用浮動布局結構更清晰的,你非得用 inline-block而增加了大量亢余代碼,就算 inline-block布局 真的像傳說中的那樣最不耗資源,但是你html代碼增加了不也是耗資源了么。 就算有,我也覺得不大。所以改用絕對定位就用絕對定位,改用浮動就用浮動,如果碰到一個情況使用 inline-block 能更好的解決問題,那就大膽的用吧。畢竟inline-block相較與浮動和絕對定位還是有一些有點的。
以上就是css inline-block屬性各瀏覽器兼容以及水平間隙問題解決方案的詳細內容,更多請關注php中文網其它相關文章! 網站建設是一個廣義的術語,涵蓋了許多不同的技能和學科中所使用的生產和維護的網站。 |
溫馨提示:喜歡本站的話,請收藏一下本站!