2016-08-09 47 views
0

這是我目前正在練習的HTML代碼。該CSS是不完整的,因爲我不知道該怎麼做我想做什麼:如何強制一個塊容器總是取所有可用的寬度?

.container { 
 
    margin: auto; 
 
    width: 700px; 
 
    border: solid blue 2px; 
 
} 
 
.container div { 
 
    padding: 10px 0; 
 
    vertical-align: top; 
 
} 
 
#orange { 
 
    background-color: coral; 
 
} 
 
#blue { 
 
    background-color: lightblue; 
 
} 
 
.container > div .content { 
 
    border: dotted black 1px; 
 
    height: 100px; 
 
    width: 250px; 
 
    margin: auto; 
 
    display: block; 
 
    text-align: center; 
 
}
<div class="container"> 
 
    <div id="orange"> 
 
    <div class="content">content 
 
     <br />width: 250px</div> 
 
    </div> 
 
    <div id="blue"> 
 
    <div class="content">content 
 
     <br />width: 250px</div> 
 
    </div> 
 
</div>

當容器足夠大,橙色和藍色塊應該並肩而立,像這樣:

enter image description here

如果我減少了容器的寬度,橙色和藍色塊內的水平差將縮小,直到他們的邊界滿足內容的伯德R:

enter image description here

這裏是我想要得到什麼,當我減少多一點的容器寬度:

enter image description here

有誰知道如何做到這一點? 如果可能,沒有JS。容器不依賴於屏幕大小,所以我不能使用基於設備寬度的媒體查詢。 而且,當然,解決方案必須與儘可能多的網絡瀏覽器(包括最新版本的IE)兼容。

編輯: 我使用flexbox,但我希望我能找到沒有辦法解決考慮。 順便說一句,我會感興趣的方式是在CSS代碼中編寫僅適用於IE9及以下版本的特定規則。

EDIT2: 這似乎是不可能做什麼,我想有以下限制:

  • 沒有JS
  • 的屏幕尺寸沒有條件,但對容器的大小,而不是

所以我想我將不得不放棄這些中的至少一個...

+3

探索[Flexbox的](https://css-tricks.com/snippets/css/a-guide-to-flexbox/) - '顯示:flex' – Pugazh

+1

使用'顯示:直列block'在'.container' –

+1

建議使用flexbox作爲@Pugazh。他所附的鏈接中的重要參考。 – LuudJacobs

回答

0

物權法將inline-block添加到需要並排的兩個框中,並且塊元素將按您的喜好行爲(始終使用所有可用寬度),因爲這是塊元素的默認行爲。

.container { 
 
    margin: auto; 
 
    font-size: 0; 
 
    width: 700px; 
 
} 
 
.container div { 
 
    padding: 10px 0; 
 
    display: inline-block; 
 
    vertical-align: top; 
 
    font-size: 1rem; 
 
} 
 
#orange { background-color: coral; } 
 
#blue { background-color: lightblue; } 
 

 
.container > div .content { 
 
    border: dotted black 1px; 
 
    height: 100px;  
 
    width: 250px; 
 
    margin: auto; 
 
    display: block; 
 
    text-align: center; 
 
}
<div class="container"> 
 
    <div id="orange"> 
 
    <div class="content">content<br />width: 250px</div> 
 
    </div> 
 
    <div id="blue"> 
 
    <div class="content">content<br />width: 250px</div> 
 
    </div> 
 
</div>

儘管在與塊行爲的文本流inline-block的運行,你需要避免的框之間的空格。這就是爲什麼我在容器中設置了font-size:0,並在內部框中重新設置font-size: 1rem以實現此目的。

+0

這不是我想要的,我會完成我的問題,所以你可以看到爲什麼... – Eria

+0

您可以使用mediaqueries製作它,但它取決於屏幕分辨率,而不取決於元素的寬度。元素查詢目前只是一個JavaScript插件,用於監聽框的大小變化並觸發元素。如果這個解決方案符合你的要求(添加一個JavaScript插件),我可以添加一個比這更好的答案。 –

+0

我會稍微等一下,看看有人有一個好主意。但是,如果沒有,我認爲解決方案將是flexbox ...所有容器寬度總是被橙色和藍色塊所覆蓋的事實是必不可少的,而且您的解決方案無法實現。 – Eria

1

使用flexbox的解決方案。

如果你希望有專門針對IE9的風格及以下,有2個選項:

  1. 有特定於IE 9及以下單獨的樣式表(.css文件),在HTML中引用它 - Target IE9 Only via CSS

  2. 編輯CSS這樣 - https://css-tricks.com/snippets/css/browser-specific-hacks

.container { 
 
    display: flex; 
 
    background-color: green; 
 
    justify-content: space-around; 
 
    padding: 10px; 
 
} 
 
#orange { 
 
    background-color: coral; 
 
    height: 100px; 
 
    min-width: 250px; 
 
    text-align: center; 
 
    margin: 5px; 
 
} 
 
#blue { 
 
    background-color: lightblue; 
 
    height: 100px; 
 
    min-width: 250px; 
 
    text-align: center; 
 
    margin: 5px; 
 
} 
 
@media (max-width: 500px) { 
 
    .container { 
 
    flex-flow: row wrap; 
 
    } 
 
}
<div class="container"> 
 
    <div id="orange"> 
 
    <div class="content"> 
 
     content 
 
     <br/>width: 250px 
 
    </div> 
 
    </div> 
 
    <div id="blue"> 
 
    <div class="content"> 
 
     content 
 
     <br/>width: 250px 
 
    </div> 
 
    </div> 
 
</div>

+0

除非我誤解了,媒體查詢評估的寬度是設備寬度。但是,例如,'.container'可以在800像素的屏幕上顯示50%的寬度。這使自己400px寬度。你的解決方案能夠工作嗎? – Eria

+0

@Eria - 編號如果您需要根據'.container'的大小應用樣式,則必須使用JavaScript。 – Pugazh

相關問題