2016-08-10 3 views
2

Я хочу, чтобы два, три или более divs располагались горизонтально, затем каждая ширина заполняла все доступное пространство. Например, с двумя div, они будут занимать половину пространства, а три divs занимают 1/3 пробела и т. Д.Как сделать несколько div, расположенных горизонтально с равной шириной?

Я попытался использовать встроенный блок отображения, и вы можете расположить divs рядом друг с другом, но как вы заставляете их заполнять доступную ширину родительского контейнера?

EDIT: Предпочтительно без способа отображения гибкого (я не уверен, если его совместим с IE11 полностью)

.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

вы знаете самонастройки ли? – 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 имеет свой собственный механизм фрагмента в наши дни. Вы можете получить на нем значок над окном редактирования, который выглядит как документ с '<>' на нем. – zwol

ответ

3

В контейнере можно использовать display: table и display: table-cell на кнопках.

.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

это лучшее решение, отличное от flexbox. –

4

Это тривиальное с flexbox макете:

.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>

Все, что я сделал, это добавить display:flex и flex:1 свойствам container и button соответственно.

Flexbox is very widely supported nowadays, но вы можете избежать этого, если вам нравится IE (вплоть до версии 11) или старше Android. К сожалению, без flexbox, то, что вы хотите сделать, намного сложнее. Я позволю кому-то написать ответ не-flexbox.

+0

Спасибо, я был обеспокоен тем, что IE11 закроет его, так как я нашел много ссылок в Интернете, говоря о своей ошибкой. – sjs

+0

@sjs, если вам удастся избежать всех ошибок [перечисленных здесь] (https://github.com/philipwalton/flexbugs), flexbox будет отлично смотреться в IE11. –

+0

Имейте в виду, что в контексте форматирования * flex * свойство 'display' для дочерних элементов flex игнорируется/переопределяется. Нет смысла использовать 'display: inline-block', как у вас в коде. –

Смежные вопросы