2015-11-20 46 views

回答

2

這是一種使用嵌套的flexbox layout的現代方法。不幸的是,它需要一些額外的標記(容器div),但是在寬度和高度方面非常靈活,這與其他方法很難實現。您需要使用flex值(flex-grow,flex-shrink,flex-base)來獲得您想要的結果。它的表現非常像表格單元格。

圍繞柔性盒包裝頭部的好起點是this nice overview。黑色容器上的高度只是爲了演示,這些元素可以很好地適應您想要的每個尺寸。請注意,儘管沒有聲明高度,但右側會展開爲相同的大小。

div{padding:5px;} 
 

 
#container{ 
 
    border:1px solid red; 
 
    display:flex; 
 
    align-items:stretch; 
 
} 
 
#container > div{ 
 
    flex:1 1 auto; 
 
} 
 
#left{ 
 
    display:flex; 
 
    flex-direction:column; 
 
    border:1px solid blue; 
 
} 
 
#left > div{ 
 
    flex:1 1 auto; 
 
} 
 
#red{background-color:red;} 
 
#black{background-color:black;color:white;height:100px;} 
 
#right{ 
 
    background:#aaf; 
 
}
<div id="container"> 
 
    <div id="left"> 
 
    <div id="red"> 
 
    red container 
 
    </div> 
 
    <div id="black"> 
 
     black container 
 
     
 
    </div> 
 
    </div> 
 
    
 
    <div id="right"> 
 
    right 
 
    <br> 
 
    side 
 
    </div> 
 
</div>

+1

你的紅色和黑色方框也有固定的高度。你的代碼有什麼不同,除非你的右邊框沒有固定的高度? –

+1

這只是爲了證明這些盒子適應你想要的每個高度和寬度。正如你所看到的,我沒有在正確的容器上宣佈身高,但它仍然具有與左側相同的高度,因爲它會相應地縮放。如果右邊框比左邊高,那麼黑色和紅色框會相應地縮放。你可能想要編寫一些代碼。一個很好的概述是https://css-tricks.com/snippets/css/a-guide-to-flexbox/ – Christoph

+1

感謝您的解釋和鏈接。 –

1

我認爲您正在尋找類似於我創建HERE的示例。

HTML:

<div class="two"> 
    <div id="red">red div</div> 
    <div id="black">black div</div> 
</div> 
<div class="one"> 
    <div id="blue">blue div</div> 
</div> 

CSS:

* {box-sizing:border-box;} 
.two { 
    width: 48%; 
    margin: 0 1%; 
    float: left; 
} 
.one { 
    width: 48%; 
    float: left; 
} 
#red { 
    background: red; 
    height: 30px; 
    margin-bottom: 2px; 
    border: 1px solid black; 
    color: white; 
    overflow: auto; 
} 
#black { 
    background: black; 
    height: 30px; 
    border: 1px solid black; 
    color: white; 
    overflow: auto; 
} 
#blue { 
    background: #CFE2F3; 
    height: 62px; 
    border: 1px solid black; 
} 

在這個例子中,紅色和黑色文本框具有相同的高度和寬度,但他們坐在在彼此的頂部上。藍色框的寬度與前兩個框的寬度相同,但其高度是紅色框的高度的兩倍。

+1

我看到了一個缺陷 - 你使用固定的高度來實現它。這在大多數情況下可能不可行。 – Christoph

+1

@Christoph:如果內容是固定的,那麼我認爲你同意我的看法是可行的。但是如果內容是動態的,你永遠不能保證紅框和黑框的內容具有相似的長度。所以你仍然可以使用'overflow:auto'來固定高度。我已經更新了這個例子來證明這一點。 –

+1

其實你可以 - 用一個簡單的flexbox佈局。我會爲此發佈一個答案。 – Christoph