2011-09-28 149 views
2

我有一個父div( - 在圖中)誰的寬度我不知道提前。CSS:固定寬度+動態寬度兒童,填充100%父寬度?

我有兩個孩子的div(a和b):

b - 是總是已知的固定寬度一個,並應始終位於右側

一個 - 應填充剩餘空間

----------------------------------- 
- aaaaaaaaaaaaaaaaaaaaaaaaaa bbbb - 
- a      a b b - 
- aaaaaaaaaaaaaaaaaaaaaaaaaa bbbb - 
----------------------------------- 

a和b都等於固定高度。

我想有一個簡單的解決方案,但我還沒有找到它。我已經嘗試過兩種方式,但其中一個或另一個被推到下面。

任何想法?

+0

的溶液是否有以確保A和B是相同的高度?或者他們已經是同等高度了?或者沒有關係? – thirtydot

+0

@thirtydot - 他們是相等和固定高度(更新的問題) – UpTheCreek

+0

經典的「簡單解決方案」已經發布。一個'div','float:right',另一個'margin-right'等於右邊'div'的寬度。 – thirtydot

回答

4

可能是你可以使用display:table屬性這樣http://jsfiddle.net/sandeep/NCkL4/8/

HTML:

<div class="left"></div> 
<div class="right">fixed</div> 

CSS:

#parent{ 
    overflow:hidden; 
    background:yellow; 
    position:relative; 
    display:table; 
} 
.left{ 
    display:table-cell; 
} 
.right{ 
    background:red; 
    width:50px; 
    height:100%; 
    display:table-cell; 
} 

,但它不支持IE7。

,或者你可以做到這一點的:

HTML:

<div class="right">fixed</div> 
<div class="left"></div> 

CSS:

.right {float:right; width:200px; } 
.left { background: green;} 

檢查這個http://jsfiddle.net/47YMn/1/

新小提琴http://jsfiddle.net/sandeep/47YMn/7/

+0

嗯,有趣的是 - 這是什麼瀏覽器支持? – UpTheCreek

+0

您的更新答案看起來很有希望 - 我會放棄。謝謝。 – UpTheCreek

+0

第一個不支持IE7&以下但第二個支持每個瀏覽器。 – sandeep

0

這一個使用浮動,而上面的其他優秀答案使用定位。這取決於你選擇的。各有其優點和缺點。

CSS

html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, blockquote, pre, 
a, abbr, acronym, address, big, cite, code, 
del, dfn, em, font, img, ins, kbd, q, s, samp, 
small, strike, strong, sub, sup, tt, var, 
dl, dt, dd, ol, ul, li, 
fieldset, form, label, legend, button, 
table, caption, tbody, tfoot, thead, tr, th, td { margin: 0; padding: 0; border: 0; outline: 0; vertical-align: baseline; font-weight: inherit; font-style: inherit; font-size: 100%; font-family: inherit; } 
body { font: normal 100%/1.5em "Helvetica Neue", Helvectica, Arial, sans-serif; color: #353E34; background: #FFF; text-align: left; } 
html>body { font-size: 16px; } 
.content-wrapper { width: 100%; float: left; } 
.content { margin-right: 220px; background: #9CC; } 
.sidebar { float: right; width: 200px; margin-left: -200px; background: #FDE95E; } 
.inner { margin: 10px; } 
.footer { clear: left; width: 100%; background: black; color: #FFF; text-align: center; padding: 4px 0; } 

HTML

<div class="content-wrapper"> 
    <div class="content"> 
    <div class="inner"> 
     <p>Content</p> 
    </div> 
    </div> 
</div> 
    <div class="sidebar"> 
    <div class="inner"> 
     <p>Sidebar</p> 
    </div> 
    </div> 
    <div class="footer"> 
    <p>Footer</p> 
    </div> 
0

這是一個乾淨,非常可以接受的方式。充分利用漂浮物在這裏的工作原理,在這裏使用了明確的解決方案,但是要清除漂浮物,您還可以在容器關閉標籤之前使用一個額外的div,上面有clear:right

http://jsfiddle.net/sg3s/sSJvT/

6

您正在尋找holy grail :)文章有一個完整的例子穿行,但這裏的摘要。

你的環繞div需要有一個與你想要的靜態寬度列相同的寬度。內部div向左浮動,通過使用負邊距將靜態寬度列移動到填充區域。

下面是本教程

<div id="container"> 
    <div id="center" class="column"></div> 
    <div id="left" class="column"></div> 
    <div id="right" class="column"></div> 
</div> 

和CSS標記

#container { 
    padding-left: 200px; /* LC width */ 
    padding-right: 150px; /* RC width */ 
} 
#container .column { 
    position: relative; 
    float: left; 
} 
#center { 
    width: 100%; 
} 
#left { 
    width: 200px;   /* LC width */ 
    right: 200px;   /* LC width */ 
    margin-left: -100%; 
} 
#right { 
    width: 150px;   /* RC width */ 
    margin-right: -150px; /* RC width */ 
} 

教程是2列的例子,但如果你擺脫左側立柱和去除左填充你應該很容易走的容器。

+0

我喜歡這個想法,但似乎添加填充權 - 我的包含div只是擴展它,而不是收縮孩子。 – UpTheCreek

+0

右欄可能只需要對CSS進行調整以使其正確顯示。我已經用一些html更新了我的答案 –

1

display: flex怎麼樣?

#parent{ 
    background:yellow; 
    display:inline-flex; 
} 
.left{ 
    display:flex; 
    flex: 1 1 auto; 
} 
.right{ 
    display:flex; 
    background-color:red; 
} 

http://jsfiddle.net/NCkL4/1037/