2016-06-01 6 views
3

ПроблемаFlexbox элементы с переливом содержимого блокировать Flexbox контейнер

содержания Блока как кнопка вызывает мои гибкие элементы для расширения и переполнения контейнера Flexbox.

Ожидаемое поведение

В этом примере, кнопки должны оставаться бок о бок с кнопки текста перелива скрытой многоточие. Ширины гибких элементов должны быть основаны на браке, а не на содержании, и оставаться внутри контейнера, оставаясь отзывчивым, поскольку контейнер меняет ширину и элементы гибкости добавляются или удаляются. Еще одно предостережение заключается в том, что я не могу использовать переполнение: скрытые элементы flex или кнопки parent div для моего конкретного сценария.

Адрес fiddler.

Block content causes flex items to overflow container

Пример Html

<div class="container" style="width: 400px;"> 

    <div class="child one"> 
    Child One 
    <br>Lorem ipsum 
    <br>dolor sit amet 
    </div> 

    <div class="child two"><div><button class="text">Child Two with a loooooooooooooooooong naaaaaaaaaaaaaaaaaaaaaaaaaaaaaame</button><button>button two</button></div></div> 

<div class="child three">Some Text</div></div> 

Пример CSS

div { 
    border: 3px solid; 
} 

.container { 
    padding: 10px; 
    background-color: yellow; 
    display: -webkit-flex; 
    display: flex; 
} 

.child { 
    flex: 1 1 auto; 
    padding: 10px; 
    margin: 10px; 
    background-color: #eee; 
} 

.child.one { 
    color: green; 
} 

.child.two { 
    flex: 6 1 auto; 
    color: purple; 
} 

.child.two button { 
    display: inline-block; 
} 

.child.three { 
    color: blue; 
} 

.text { 
    text-overflow: ellipsis; 
    overflow: hidden; 
} 

EDIT: Теперь, вместо того, чтобы пытаться отобразить несколько кнопок, я меняю требование только один кнопка. Мне все равно было бы интересно, если кто-то сможет решить это с помощью нескольких кнопок.

+0

Этот вопрос относительно сложный и может быть полезен при разбивании на компоненты. Рассмотрите несколько вопросов, которые занимаются меньшими проблемами. –

+0

Единственное, что проще было бы устранить требование, чтобы кнопки отображались бок о бок. Если есть решение, которое делает это требование спорным, я все уши. –

+0

Я думаю, что проблема в том, что когда содержимое кнопок длинное, браузер не знает, какую ширину отображает кнопка, и не хватает информации для браузера, чтобы разобраться в этом сами по себе, поэтому он по умолчанию пытается попробовать чтобы соответствовать содержимому. Именно поэтому переполнение не соблюдается. Вот скрипка с возможным решением. Я обманул, удалив div, обертывая кнопки. http://jsfiddle.net/y2eqmjsz/16/ –

ответ

2

Я придумал ответ для тех из вас, кто заинтересован. Однако мне пришлось изменить мои первоначальные требования. Вместо того, чтобы пытаться отображать две кнопки, бок о бок, я уменьшил ее до одной кнопки. Учитывая это, вот ответ ... Это похоже на работу в браузерах.

fiddle example of resolution

example image

Добавьте следующие стили:

.child { 
    width: 1%; 
} 

.child.button { 
    width: 100%; 
} 

Я был бы очень заинтересован в кого-то объяснить, что с шириной%? Похоже, это больше похоже на то, как минимальная ширина может работать.

EDIT: Благодаря Michael_B для ссылки на explanation of width relationship in flex items.

+0

Я подозревал, что это была проблема, но сегодня не было времени, чтобы вникать в ваш вопрос. Вы сталкиваетесь с минимальным алгоритмом калибровки на гибких элементах.И вы правы в отношении отношения между 'width: 1%' и 'min-width'. http://stackoverflow.com/a/36247448/3597276 –

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