2012-12-13 40 views
0

在我的html頁面我有這樣的情況:一個又一個的顯示CSS float。是否有可能打破流動?

<div1><div2><div3><div4><div5><div6><div7><div8><div9> ...

剛出浮動的div。他們都有CSS樣式浮動:左

我想實現這樣的結果:

<div1><div2> 
<div3><div4><div5><div6><div7> 
<div8><div9>... 

基本上,我想打破DIV3和DIV8流(或任何DIV祝)通過告訴它以新的行開始。所有其他元素應該在div進入新行之後。我試着用清除:左邊清除:左邊對div3或div8,但它沒有工作。 DIV會去新的生產線,但所有其他人將繼續他們在那裏,產生令人失望的結果:

<div1><div2><div4><div5><div6><div7><div9> 
<div3> 
<div8>... 

有這裏的任何好的和簡單的解決方案?謝謝。

+0

你可以把你的三個內容divs包裝divs。浮動內容並清除包裝div。 –

+2

老實說清楚:在div3上應該已經工作了,對於您的實際標記以及您在此發佈的內容,有一些不同之處。 –

回答

5

對於上帝的愛...不要將任何額外的divs引入您的標記。如果您的設計是正確的,則可以使用clear:left。 (你確實知道HTML有一個可供選擇的塊級元素的全部選擇)使用它們可能會使你的定位更容易一些......

CSS

div { 
    float:left; 
    margin-right:2ex; 
    width:3em; 
} 

#div3, #div8 { 
    clear:left; 
} 

HTML

<div>1</div><div>2</div> 
<div id="div3">3</div><div>4</div><div>5</div><div>6</div><div>7</div> 
<div id="div8">8</div><div>9</div> 

小提琴:http://jsfiddle.net/d68pr/

編輯 這裏是一個不需要任何標識,類或額外div-itus

<div>1</div> 
<div>2</div> 
<div>3</div> 
<div>4</div> 
<div>5</div> 
<div>6</div> 
<div>7</div> 
<div>8</div> 
<div>9</div> 

div:nth-child(3), div:nth-child(8) { 
    clear:left; 
} 

http://jsfiddle.net/TMxSE/

** **警告可能nth-child無法在某些瀏覽器。檢查您的流量統計信息,以確保IE8,以下是您的用戶羣中的一小部分。或者那些用戶的體驗是可以接受的。

+1

終於有了常識的另一個答案。重讀OP的帖子,他的設計出了問題,他所做的應該是這樣,因爲它基本上是你的答案和我說的要做的。 –

+1

應該注意,第n個孩子在IE8和更早的版本中不會工作,只是OP知道。 –

+1

好的答案!可能想要添加一個警告,說明在孩子們不能在IE8和以下工作,可能需要一個polyfill(不是我推薦使用的)。 – Modika

2

我想試試這個:

<div1><div2> 
<div style="clear:both"></div> 
<div3><div4><div5><div6><div7> 
<div style="clear:both"></div> 
<div8><div9>... 

OR

<div><div1><div2></div> 
<div><div3><div4><div5><div6><div7></div> 
<div><div8><div9></div>... 

放置在它自己的<div>每行默認情況下,將上面和下面清除

+1

'clear:left'將是OP所需要的,而不是'both'。 – cimmanon

+0

在這種情況下,將以相同的方式工作 – George

+1

額外的div是沒有必要的。 –

0

我覺得包裹在自己的每一行div會工作:

<div><div1><div2></div> 
<div><div3><div4><div5><div6><div7></div> 
<div><div8><div9>...</div> 
+2

究竟應該做什麼?它甚至不是有效的標記,更不用說回答任何問題。 –

+0

我剛剛使用OP的標記。 – Sharlike

+0

要做什麼?那裏沒有解決方案。 OP的帖子中的標記是爲了示範目的而不是顯示實際標記,因爲它不會顯示他正在描述的內容 –

0

試試看。我認爲這將起作用

<div style="clear:left"> 
    <div1><div2> 
</div> 
<div style="clear:left"> 
    <div3><div4><div5><div6><div7> 
</div> 
<div style="clear:left"> 
    <div8><div9> 
</div> 
+0

它可以工作,但有問題(恕我直言):1)外部包裝程序塊級別的元素2)如果將同樣的內聯樣式放入元素3和8,效果將是相同的3)不需要清除預期效果之前的任何元素('div'#1)。 – Dawson

1

你不需要額外的div來清除,把你想要開始下一行的div都清除。

<div></div> 
<div></div> 
<div></div> 
<div></div> 
<div></div> 
<div class="clear"></div> 
<div></div> 
<div></div> 


.clear{clear:both;} 

將5個div放在第一行,然後將剩下的打到第二行。演示:http://jsfiddle.net/calder12/jQGdv/1/

+0

我確實希望這不是針對我的,因爲我當然不是那種不願意退出的類型。部分原因是我喜歡你的回答,部分是爲了證明我實際上沒有投票。 – George

+1

我刪除了評論,以我的名義幼稚地發佈它。 –