CSS3 box-flex - размер коробки зависит от внутреннего содержимого - PullRequest
14 голосов
/ 06 декабря 2011

Может кто-нибудь сказать мне, что я здесь делаю не так?Я хочу, чтобы ящики были ТОЧНОЙ одинаковой ширины между divA и divB.Тот факт, что в блоке divB текст немного длиннее в p2, не должен изменять ширину всего блока.Я не хочу использовать ширину жесткого пикселя для 'p1', чтобы он мог быть гибким для ширины области просмотра.Я просто хочу, чтобы поле p1 всегда было в два раза меньше размера p2, независимо от внутреннего содержимого.Может кто-нибудь помочь мне или предложить лучший метод ??

<!DOCTYPE HTML>
<html>
<head>
<style type="text/css"> 
div
{
display:-moz-box; /* Firefox */
display:-webkit-box; /* Safari and Chrome */
display:box;
width:100%;
border:1px solid black;
}

#p1
{
-moz-box-flex:1.0; /* Firefox */
-webkit-box-flex:1.0; /* Safari and Chrome */
box-flex:1.0;
text-align:right;
border:1px solid red;
}

#p2
{
-moz-box-flex:2.0; /* Firefox */
-webkit-box-flex:2.0; /* Safari and Chrome */
box-flex:2.0;
text-align:left;
border:1px solid blue;
}
</style>
</head>
<body>

<div id='divA'>
<p id="p1">Hello</p>
<p id="p2">Column 2</p>
</div>

<div id='divB'>
<p id="p1">Hello</p>
<p id="p2">Why is this box larger</p>
</div>

</body>
</html>

Ответы [ 3 ]

24 голосов
/ 15 февраля 2012

Если вы дадите дочерним элементам явную ширину, они будут вести себя.
Значение flex будет переопределять эти значения ширины, давая вам желаемую разметку.Коробки просто нужно значение, чтобы начать с.Без определенной ширины они сжимаются до ширины содержимого, затем применяется значение flex.

См. Здесь: http://jsfiddle.net/ZBE7r/

...
#p1, #p2 {
    width: 1px;
}
...

Это работает, только если все они имеют одно и то же явноеширина (может быть любым значением: 0, 1px, 100% и т. д.)

1 голос
/ 06 декабря 2011

Нашел эту цитату.Это может объяснить, почему он это делает.

"Звучит так, как будто работает должным образом. Сгибание применяется только после того, как рассчитаны предпочтительные размеры блоков. Так что в вашем примере это звучит как общая ширина блокадобавляет к чему-то гораздо большему, чем ширина контейнера. Затем браузер использует свойство flex, чтобы решить, какие прямоугольники нужно сжать, чтобы подогнать их под размер. Ваше среднее поле имеет наибольшее изгибание, поэтому оно сжато больше всего " link

0 голосов
/ 07 декабря 2011

Если вы измените теги p на теги div, это будет работать так, как ожидалось. Кажется, что flexbox вычисляет ширину, сначала проверяя начальную ширину элемента, а затем пропорционально заполняя оставшееся пространство. Оба являются элементами уровня блока, поэтому я не уверен, почему они обрабатываются по-разному, но это должно решить вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...