2013-01-02 49 views
15

我正在修改定製的grid,並想知道其他人是如何創建他們的網格系統的。由於twitter的引導程序似乎很受歡迎,因此我查看了它的代碼。現在我不知道他們爲什麼使用浮游物?我會使用display: inline-block; html元素有display: inline;display: block;我會盡量避免浮動。但由於某些原因,引導創作者決定使用浮動。首先,我認爲他們使用它們具有向後兼容性,因爲ie6不支持display: inline-block;,而ie7僅在默認情況下支持display: inline;的元素。但是ie6或多或少的出局了,因爲他們使用micro clearfix hack,它使用* zoom:1;目標ie6 +國際海事組織他們可以複製相同的display: inline-block;*display: inline; *zoom: 1;因此,最後的問題爲什麼浮動顯示在線塊?他們有沒有解決上述問題的問題?爲什麼bootstrap在.span上使用浮動而不是顯示:inline-block?

回答

-2

在語義網的術語中,當我們想要在文本的行內放置一個塊級元素,如<img>時,應該使用display: inline-block。我們不應該使用內嵌佈局來製作頁面主佈局。含有display: inline-block的元素也會從父元素的font-sizeline-height等屬性生效。這會降低頁面佈局的準確性。 在製作頁面主佈局時,您最好養成使用float而不是inline-block的習慣。

+0

感謝您的回答,但您確定意味着img是內聯元素,p是塊級元素,反之亦然,不是嗎?:) – orustammanapov

+0

實際上,'img'和'p'都是塊級別元素。我糾正了答案。 – Mojtaba

+2

對不起,我的錯誤是它沒有內聯元素,也沒有塊級元素。 ** img **標籤默認爲**內聯塊**。您可以像塊級元素一樣定義寬度和高度,但也可以與同一行上的其他元素內聯,而不會浮動。 – orustammanapov

16

內聯塊可識別白色空間,實際內容和堆棧的自動寬度按它們在HTML中的順序排列。浮動不是,但需要clearfix方法,並基於塊元素。這些元素在可用空間上水平地具有自動寬度。純粹的語義上來說,內聯塊的語義較少,因爲空白感知格式和順序的重要性。但純粹以功能性的方式來看,它們都不是爲了網格而製作的。如果不是用於僞CSS,那麼我們也會有非語義的HTML標籤clearfixe。所以我相信他們都不是贏家。但在未來幾年flexbox將成爲強制性的時候,目前沒有其他選擇。

隨着直列塊:

<div> 
    <div style="display:inline-block; width:30%;">col1 
    </div><div style="display:inline-block; width:70%;">col2</div> 
</div> 

標籤必須被粘合在一起/所附,以關閉任何溝。容器div是強制項目成爲單獨行的一部分所必需的。

花車:

<div class="clearfix"> 
    <div style="float:left; width:30%;">col1</div> 
    <div style="float:left; width:70%;">col2</div> 
</div> 

Clearfix是必要的強制「行」(解僱任何正常流量項目問題或浮動後浮)

無論使用一個或另一個的問題你的目標(和品味)。我必須說,只要你知道兩個寬度或者使用相對大小(%),我就喜歡內聯塊以上的浮動。我認爲它比浮動更直觀,更可預測,可以解決問題,如果它被應用程序使用,甚至不會出現問題。只有內聯塊的空白區域意識迫使你使用一些時髦的html ,這是一個缺點

具有諷刺意味的是,表格完全沒有任何問題(甚至是柱高和垂直對齊),因爲內嵌塊必須按順序排列,所以這裏有一個討論動機。

如果我們正在討論響應式,表內聯塊的表「丟失」。假設你在桌面上有4列,並且你想在平板電腦上使用2列,在移動設備上使用1列。通過嵌入塊,您只需給出其他寬度尺寸,並且希望包裹好(在倒塌時注意邊距)。使用表格,你必然會遇到實際的行,這些行很固定。 Flexbox需要很長時間,看起來很漂亮。您可以在某些情況下靈活調整佈局。

我用Bootstrap,但厭倦了他們缺乏給予人們的信用和他們的態度。但是,瞭解他們如何做某事可能會很方便。剛剛閱讀3.0他們正在使用相對網格大小。這給嵌套網格和對齊提出了問題。

---- --a- ---- ---- 
---b------ 
.... ..c. 

Col a是正常的母校。 Col c是b的小孩嵌套。除非你使用填充和邊界框模型,否則很難將c與相對大小對齊,因爲對於容器而言,排水溝是可變的。但這樣你就失去了很多靈活性。當你想讓col有一些背景和填充時,你就搞亂了網格系統,所以你必須使用你的風格的容器,這會混淆代碼。我還沒有研究過他們是否找到了解決辦法。我還沒有。我去了固定像素,但這意味着在響應式設計中,您只能擁有幾個固定寬度,並且對於移動設備中的所有內容都使用相對網格。

+0

偉大的答案!正如我先問的,我並不知道內嵌塊級元素的空白區域敏感性,就像你喜歡使用內聯塊而不是浮點數一樣。我也喜歡flexbox的想法,但我認爲我們還沒有,瀏覽器供應商會花時間正確地實施它,儘管webkit開發者做得很好...... – orustammanapov

+0

是的,可能需要幾年時間,因爲IE8將圍繞一些時間,或者有人爲它寫一個htc單元。如今,IE10已經支持舊的Flexbox語法,這已經被棄用了。所以是的,我們現在堅持浮動/嵌入塊或表格;) – Sanne

+0

這是一個比標記爲答案更好的答案。它實際上有一個真正的原因,爲什麼不使用內聯塊。這是一個不幸的原因,但它有一個問題。另一個答案是一個理論和學術,在「......因爲我這麼說」的眼中捅了捅。結尾。我在這種情況下使用浮動的唯一問題是,他們顯式關閉使用跨度的輸入元素的浮動,因此您的浮動跨度在所有輸入字段之前跳躍導致痛苦。 – chubbsondubs

2

我更喜歡使用display: inline-block;而不是float的網格系統,例如Pure(以前稱爲YUI網格),因爲它們沒有額外的樣式進行國際化;將文本方向更改爲從右到左並且佈局自動反轉;花車不這樣做。浮動還介紹了需要明確和其他跨瀏覽器怪異。正如Pure所證明的那樣,inline-block可能會超過float的任何不準確都可以得到彌補。至於批評display: inline-block;並不意味着要用於佈局,也許應該禁止跨瀏覽器居中使用display: table;。我還會質疑術語Semantic Web是否真的適用於CSS,因爲該術語主要關注HTML並使用其元素和屬性賦予機器可讀含義;整個CSS的重點在於像想要的那樣從根本上設計語義HTML,因此經典網站如CSS Zen Garden

我說只要技術沒有利用bug,不會阻礙用戶和設備的內容,並且得到足夠的支持,那麼它是可以接受的。沒有理由不能像非正統的,但支持的方式使用CSS,就像Stu Nicholls的CSSPlay一樣。

有趣的是,Flexible Box也被納入到純網格中,這是一種與現代瀏覽器(≥IE10和等效瀏覽器)兼容的卓越佈局系統。

相關問題