2013-03-15 53 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