2013-03-15 181 views
4

我正在構建一個工具欄,我希望以下示例中的黃色部分留空(白色):CSS:在同一行上有3個div,佔用剩餘空間

http://jsfiddle.net/MWjGH/1/

<div class="left"> Some content </div> 
<span class="middle"> This should fill the space left </span> 
<div class="right"> Some other content </div> 

與CSS:

.left { 
    float: left; 
    background-color: #ddd; 
    display: inline-block; 
} 
.middle { 
    background-color: yellow; 
    display: inline-block; 
} 
.right { 
    float: right; 
    background-color: #ddd; 
    display: inline-block; 
} 

編輯:內容左,右是動態的,它可以改變,所以我不希望設置寬度他們

+0

中間是不能div的翼展。 – 2013-03-15 08:54:17

+0

左右是什麼寬度? – Pete 2013-03-15 08:55:03

+0

@Pete它是動態的,它可以改變 – 2013-03-15 08:57:16

回答

10

我不知道這是否適合你,因爲HTML稍作修改:

<div class="left"> Some content </div> 
<div class="right"> Some other content </div> 
<span class="middle"> This should fill the space </span> 

但我相信這是你想要的,

CSS:

.left { 
    float: left; 
    background-color: #ddd; 
} 
.middle { 
    background-color: yellow; 
    display: block; 
    overflow:hidden; 
} 
.right { 
    float: right; 
    background-color: #ddd; 
} 

DEMO:http://jsfiddle.net/pavloschris/MWjGH/12/

+1

在這些浮動元素上不需要'display:inline-block;'。浮動元素被視爲'display:block;'無論如何。 – 2013-03-15 09:16:48

+0

好的抱歉再次改變主意,但這是正確的答案。見http://jsfiddle.net/MWjGH/18/ – 2013-03-15 09:34:57

+0

overflow:hidden實際上改變了其元素內容的形狀?呵呵。今天我學到了一些東西。 – 2013-03-15 09:42:36

5

放中間DIV的浮動的div後:

<div class="left"> Some content </div> 
<div class="right"> Some other content </div> 
<div class="middle"> This should fill the space left </div> 

然後,讓他們留在block不更改任何display屬性(用於div默認)

.left { 
    float: left; 
    background-color: #ddd; 
} 
.middle { 
    background-color: yellow; 
} 
.right { 
    float: right; 
    background-color: #ddd; 
} 

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

+0

不改變任何東西 – 2013-03-15 08:58:27

+0

固定和增加工作小提琴。對不起,急着第一次嘗試。錯過了'內聯塊'。 – 2013-03-15 09:06:17

+0

完美答案,我知道它一定是那麼簡單。 – 2013-03-15 09:10:23

3

如果你沒有一個固定寬度的兩側欄,你總是可以display:table-cell

.left { 
    background-color: #ddd; 
    display: table-cell; 
} 
.middle { 
    background-color: yellow; 
    display: table-cell; 
    width:100%; 
} 
.right { 
    background-color: #ddd; 
    display: table-cell; 
} 

JSFiddle example

有了這個,你可以將min-width添加到外部列,而不必改變中間元素的寬度。

JSFiddle example with min-width applied

+0

好吧,這實際上是我需要的答案:請參閱http://jsfiddle.net/MWjGH/14/與添加的邊框,而以前接受的答案給出http://jsfiddle.net/hLmj7/3/ – 2013-03-15 09:26:51

+0

您的右和左divs將與中間的一個,但反之亦然:http://jsfiddle.net/MWjGH/16/ – 2013-03-15 09:29:17

+0

如果這不是所需的效果,然後[xpy的答案](http://stackoverflow.com/a/15428338/1317805)將是最相關的。 – 2013-03-15 09:31:27

0

試試這個:

不右對齊您的最後一個div

讓所有的容器float:left

,並給個寬度每個容器,使他們的總和應爲100 %;

working fiddle

,如果你不希望強制實施靜態寬度做到這一點:

給每個容器一個width:auto,但是被通知,即,

如果總和每個容器的寬度都會大於父項(在你的情況下爲正文)的容器寬度,然後會發生換行, div將滑動到下一行。

看到這個fiddle

+0

我不想強制執行寬度,左右的內容可以改變 – 2013-03-15 09:01:22

+0

現在看我的回答plz – 2013-03-15 09:05:33

0

我想包在一個包裝你的div,並指定背景顏色的包裝DIV 然後,你並不需要在所有指定的寬度。 jsfiddle

HTML:

<div class="toolbar"> 
    <div class="left"> Some content </div> 
    <div class="middle"> This should fill the space left </div> 
    <div class="right"> Some other content </div> 
</div> 

CSS:

.toolbar { 
    background-color: yellow;  
} 
.left { 
    float: left; 
    background-color: #ddd; 
    display: inline-block; 
} 
.middle { 
    display: inline-block; 
} 
.right { 
    float: right; 
    background-color: #ddd; 
    display: inline-block; 
} 

考慮加入clearfix到包裝DIV作爲div的內部是浮動:)

+0

中間元素的背景比較複雜,它包含邊框和全部,不能是應用於包裝 – 2013-03-15 09:04:39

+0

是的,在這種情況下,'display:table-cell;'或'table/tr/td'是要走的路! – haejeong87 2013-03-15 13:09:57

相關問題