2016-08-10 2 views
2

Ich möchte zwei, drei oder mehr divs horizontal angeordnet, dann füllt jede Breite den gesamten verfügbaren Platz. Zum Beispiel nehmen sie bei zwei Divs jeweils die Hälfte des Raums ein, bei drei Divs nehmen sie 1/3 des Raums ein und so weiter.Wie mache ich mehrere divs horizontal mit gleicher Breite anordnen?

Ich habe versucht, Display-Inline-Block, und können die divs nebeneinander angeordnet werden, aber wie Sie die verfügbaren Breite des übergeordneten Container füllen?

EDIT: Vorzugsweise ohne Display flex-Methode (Ich bin mir nicht sicher, ob seine kompatibel mit IE11 voll)

.container{ 
 
    border: solid 1px green; 
 
    height: 50px; 
 
    box-sizing: border-box; 
 

 

 
} 
 
.button{ 
 
    display:inline-block; 
 
    border: solid 1px black; 
 
    height: 20px; 
 
}
<div class="container"> 
 
<div class="button "> 
 
div1 
 
</div> 
 
<div class="button "> 
 
div2 
 
</div> 
 
<div class="button "> 
 
div3 
 
</div> 
 
</div>

+0

Kennen Sie Bootstrap? – JazZ

+2

http://stackoverflow.com/questions/35325371/how-can-i-let-a-div-fill-100-width-if-no-other-elements-are-beside-it/35325430#35325430 –

+0

FYI , SO hat heutzutage einen eigenen Snippet-Mechanismus. Sie können es mit dem Symbol über dem Bearbeitungsfenster erreichen, das wie ein Dokument mit einem <<> 'aussieht. – zwol

Antwort

3

Sie können display: table im Container und display: table-cell auf Schaltflächen verwenden.

.container{ 
 
    border: solid 1px green; 
 
    height: 50px; 
 
    box-sizing: border-box; 
 
display: table; 
 
width: 100%; 
 

 
} 
 
.button{ 
 
    display: table-cell; 
 
    border: solid 1px black; 
 
    height: 20px; 
 
}
<div class="container"> 
 
<div class="button "> 
 
div1 
 
</div> 
 
<div class="button "> 
 
div2 
 
</div> 
 
<div class="button "> 
 
div3 
 
</div> 
 
</div>

+0

Dies ist die beste Nicht-Flexbox-Lösung. –

4

Dies ist trivial mit flexbox Layout:

.container{ 
 
    border: solid 1px green; 
 
    height: 50px; 
 
    box-sizing: border-box; 
 
    display: flex; 
 
} 
 
.button{ 
 
    display:inline-block; 
 
    border: solid 1px black; 
 
    height: 20px; 
 
    flex: 1; 
 
}
<div class="container"> 
 
<div class="button "> 
 
div1 
 
</div> 
 
<div class="button "> 
 
div2 
 
</div> 
 
<div class="button "> 
 
div3 
 
</div> 
 
</div>

Alles, was ich tat, war die display:flex und flex:1 Eigenschaften zu container und button jeweils hinzufügen.

Flexbox is very widely supported nowadays, aber Sie können es vermeiden, wenn Sie sich für IE (bis einschließlich Version 11) oder älteres Android interessieren. Leider ohne flexbox, was Sie tun möchten, ist viel schwieriger. Ich werde jemand anderen eine Nicht-Flexbox-Antwort schreiben lassen.

+0

Danke, ich war besorgt, dass IE11 würde es auffrischen, da ich eine Menge Links online finden, sagen, dass es ein Buggy. – sjs

+0

@sjs Wenn du es schaffst, alle Fehler zu vermeiden, die hier aufgelistet sind (https://github.com/philipwalton/flexbugs), wird eine Flexbox in IE11 gut aussehen. –

+0

Beachten Sie, dass in einem * flex-Formatierungskontext * die Eigenschaft 'display' auf Flex-Childs ignoriert/außer Kraft gesetzt wird. Es macht keinen Sinn, 'display: inline-block' zu verwenden, wie Sie es in Ihrem Code haben. –

Verwandte Themen