Почему мне нужно «объединить» оба объекта, чтобы использовать «display: flex;» CSS?

#css #flexbox

#css #flexbox

Вопрос:

В этом коде оба поля будут отображаться в строке вместе (по горизонтали)

 <style>
  #box{
    display: flex;
    height: 500px;

  }
#box-1 {
    background-color: blue;
    width: 50%;
    height: 50%;
  }

#box-2 {
    background-color: red;
    width: 50%;
    height: 50%;
  }
</style>

<div id="box">
  <div id="box-1"></div>
  <div id="box-2"></div>
</div>
  

Почему, когда я не размещаю их в «box», они отображаются как 2 отдельных элемента, один под другим? Почему это отображается не так, как в приведенном выше коде, хотя я использовал display: flex; в обоих стилях box. Как я понял (из чтения онлайн), эта функция была необходима, чтобы они оба отображались так, как в приведенном выше коде

 #box-1 {
    background-color: blue;
    width: 50%;
    height: 50%;
    display: flex;
  }

#box-2 {
    background-color: orangered;
    width: 50%;
    height: 50%;
    display: flex;
  }
</style>

<div id="box-1"></div>
<div id="box-2"></div>
  

Я ожидал, что второй код должен выдавать то же самое, что и первый.
Я понял, что, вероятно, я ошибаюсь (из результатов), но я не могу понять почему.

Спасибо!

Комментарии:

1. Flex действительно забавный материал ^^

Ответ №1:

почему, когда я не размещаю их в «box», они отображаются как 2 отдельных элемента

Это потому, что у div элементов по умолчанию есть display:block , что означает, что он занимает свою собственную строку слева направо, вот почему они укладываются один под другим

Однако display:flex делает элемент block level flex container таким же, как block , только это влияет и на дочерние элементы, дочерними элементами становятся flex items , которыми вы можете управлять с помощью свойств flex ref, и по умолчанию для этого свойства flex-direction установлено значение, row означающее, что flex items элемент будет отображаться горизонтально, в виде строки

ДЕМОНСТРАЦИЯ

 .box {
  display: flex;
  height: 100px;
  width:100px;
}

.box-1 {
  background-color: blue;
  flex: 1;
}

.box-2 {
  background-color: red;
  flex: 1
}

.row {
  flex-direction: row;
}

.column {
  flex-direction: column;
}  
 <h2>flex-direction: row</h2>
<div class="box row">
  <div class="box-1"></div>
  <div class="box-2"></div>
</div>


<h2>flex-direction: column</h2>
<div class="box column">
  <div class="box-1"></div>
  <div class="box-2"></div>
</div>  

Возможно, стоит рассмотреть возможность использования flex свойства, а не width

Ответ №2:

То, что заставляет ваши box1 и box2 отображаться в одной строке, — это display: flex настройка в их родительском элементе — #box element! Это делает его дочерние элементы «гибкими элементами» — дочерним элементам не нужны какие-либо настройки, чтобы стать элементами flex (вы можете удалить элементы flex из правил для дочерних элементов), это все из-за настройки в родительском элементе.