2016-01-02 3 views
1

В последнее время я играю с display:flex, так как я вижу, что он становится все более тенденциозным. В быстром тесте, используя подходы flex и non-flex CSS, я понял, что мои ширины и поля всегда соблюдаются при использовании flex. Является ли это хорошим подходом, учитывая, что мне, скорее всего, понадобится желоб между элементами? Кроме того, где же разница между промежутками? Это то, что я имею в виду:Почему ширина обрабатывается по-разному в flexbox?

HTML

<div class="container"> 
    <div class="box"> 
    <span class="inner-box">This gives me a 30px X 60px</span> 
    <span class="inner-box">This gives me a 30px X 60px</span> 
    <span class="inner-box">This gives me a 30px X 60px</span> 
    </div> 
    <div class="box2"> 
    <span class="inner-box">This gives me a width larger than the specified 30px</span> 
    <span class="inner-box">This gives me a width larger than the specified 30px</span> 
    <span class="inner-box">This gives me a width larger than the specified 30px</span> 
    </div> 
</div> 

CSS

.box{ 
    background: orange; 
    display:flex; 
    flex-direction:row-reverse; 
    padding:0 10px; 
} 

.box2{ 
    background: green; 
    text-align:right; 
    padding:0 10px; 
} 

.inner-box{ 
    width:30px; 
    background:#fff; 
    margin:0 0px; 
} 

Указание ширины во время выполнения Flexbox

Non-flexbox

DEMO

+2

В чем конкретно вопрос? Если 'display: flex' почитает' width', где 'display: inline' нет? Если да, то да, но это было не очень ясно. –

+0

@MrLister, вы правы, я пропустил, чтобы добавить главный вопрос, который у меня есть об этом. Я был в спешке, когда мне пришлось опубликовать это. Я отредактировал – LOTUSMS

+0

В вашем ручке у вас есть .box2 span {display: inline-block} ', а пробел между ними объясняется в [Как удалить пространство между элементами встроенного блока?] (Http://stackoverflow.com/д/5078239/1529630). В вашем вопросе у вас этого нет, поэтому они имеют значение по умолчанию 'display: inline', поэтому они игнорируют' width', как описано в [Установка ширины встроенных элементов] (http://stackoverflow.com/q/1423294/1529630). Ваш вопрос - обман одного из них. – Oriol

ответ

3

Вы используете <span> элементов. По умолчанию они встроены. width автоматически игнорируется для встроенных элементов.

В первом разделе div (.box), однако, span «ы значение инлайн display переопределяется материнской компании display: flex, который устанавливает flex formatting context. Следовательно, все дети становятся гибкими предметами, которые относятся к width и height.

Flex Items

гибком пункт устанавливает новый контекст форматирования для его содержимого. Тип этого форматирования определяется его значением display, , как обычно. Однако сами элементы гибки: flex-level коробки, а не блочные блоки: они участвуют в гибком контексте своего контейнера , а не в контексте форматирования блока.

источник: https://drafts.csswg.org/css-flexbox-1/#flex-items


Во втором div секции (.box2), то span элементы остаются display: inline, так как они не удаляются из block-formatting context, и любые width и height заданий игнорируются.

Попробуйте display: inline-block: http://codepen.io/anon/pen/yeggOy

Ссылки:

+0

Это отличный ответ. Я искал что-то подобное, чтобы разъяснить различия, но быть адвокатом дьявола здесь. Я попытался отобразить: встроенный блок, и хотя он соблюдал ширину, он переполнял текст и по-прежнему добавлял поля, в отличие от отображения flex – LOTUSMS

+0

Пробелы, которые вы видите, являются естественной особенностью элементов 'inline-block'. Вот [** пояснение **] (http://stackoverflow.com/a/32801275/3597276). Используя один (из нескольких) способов удаления пробелов, вот ваша [** пересмотренная демонстрация **] (http://codepen.io/anon/pen/OMWpNV). –

+1

Размер шрифта: 0 !!!!! Кто бы мог подумать, что этот шрифт будет иметь какое-то отношение к этому? Теперь это очень интересная концепция! – LOTUSMS

2

Ваш вопрос немного неясен, но если, как заметил MrLister:

Если display:flex почестей ширина, где display:inline нет? Если да, то да,.

Это происходит потому, что, согласно spec,

Flex элементы рисовать точно так же, как встроенные блоки

и так пострадавших от ширины отчетности.

+0

Прохладная вещь о вашей ссылке (кроме сравнения «inline-block») заключается в том, что она подчеркивает то, что, вероятно, не так широко известно: flex items может использовать 'z-order', не будучи помещенным. –

+0

Это интересно. Учитывая, что z-порядок может быть иногда спасением, но позиционирование может привести к дополнительным настройкам – LOTUSMS

+0

Я был в спешке, когда отправлял, поэтому я редактировал вопрос. Но в основном мой вопрос касается того, как обрабатываются ширины и что еще более важно, откуда берется маржа? – LOTUSMS

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