Как сделать так, чтобы элементы покрывали 100% пространства, доступного в контейнере, с помощью Flexbox? - PullRequest
0 голосов
/ 07 июля 2019

У меня есть 2 контейнера, и я пытаюсь сделать так, чтобы они оба имели одинаковую высоту.Я использую flexbox для решения этой проблемы, используя свойство flex-direction: column (flex-column), но я не знаю, что я делаю неправильно, так что каждый элемент делится на высоту доступного контейнера.

enter image description here

.borde_gris_b{
  border-bottom:1px solid blue;
}
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" rel="stylesheet"/>
    <div class="row p-0 m-0 m-auto justify-content-center">
     <!-- first container-->
      <div class="col-12 col-sm-6  col-md-6 col-lg-6  col-xl-4 p-0 m-0  text-center p-0  d-flex flex-column" style="border:1px solid red;">
        <div class="d-flex  borde_gris_b m-0">
            <div class="h-100 flex-center flex-column  w-100">
                <h6 class="p-0 mx-0 mb-1 mt-0 ">SNIES</h6>
                <p class="card-text p-0 m-0 "></p>
                <div class="card-text">12967</div>
            </div>
        </div>
        <div class="d-flex  borde_gris_b m-0">

            <div class="h-100 flex-center flex-column  w-100">
                <h6 class="p-0 mx-0 mb-1 mt-0 ">Duración</h6>
                <p class="card-text p-0 m-0 "> 10 periodos academicos </p>
            </div>
        </div>
  
        <div class="d-flex  borde_gris_b m-0">

            <div class="h-100 flex-center flex-column  w-100">
                <h6 class="p-0 mx-0 mb-1 mt-0 ">Número de Créditos</h6>
                <p class="card-text p-0 m-0 "> 170 </p>
            </div>
        </div>
        <div class="d-flex  borde_gris_b m-0">

            <div class="h-100 flex-center flex-column  w-100">
                <h6 class="p-0 mx-0 mb-1 mt-0 ">Modalidad de Formación</h6>
                <p class="card-text p-0 m-0 "> Presencial </p>
            </div>
        </div>
    </div>
    
    <!-- two container-->
    
    <div class="col-12 col-sm-6 col-md-6 col-lg-6 col-xl-6 p-0 m-0 ">
        <div class="row p-0 m-0">
            <div class="col-12 col-sm-12 col-md-12 col-lg-6 p-0 m-0  text-center p-0  d-flex flex-column" >
                <div class="d-flex  borde_gris_b m-0" >

                    <div class="h-100 flex-center flex-column  w-100">
                        <h6 class="p-0 mx-0 ">Becas</h6>
                        <p class="card-text p-0 m-0 "></p>
                        <div class="d-flex mb-1">
                            <div class="mr-3"> Beca Bien </div>
                            <div>

                                <p > $2,107,000 </p>
                            </div>
                        </div>
                    </div>
                </div>
                <div class="d-flex  borde_gris_b m-0">

                    <div class="h-100 flex-center flex-column  w-100">
                        <h6 class="p-0 mx-0 mb-1 mt-0 ">Valor Matrícula</h6>
                        <p class="card-text p-0 m-0 "> $5,696,000 </p>
                    </div>
                </div>
  
                <div class="d-flex  borde_gris_b m-0">

                    <div class="h-100 flex-center flex-column  w-100">
                        <h6 class="p-0 mx-0 mb-1 mt-0 ">Jornada</h6>
                        <p class="card-text p-0 m-0 "> Diurna/Nocturna </p>
                    </div>
                </div>
            </div>

        </div>
    </div>
</div><!-- end row -->

Мне нужно, чтобы оба элемента имели одинаковую высоту, и чтобы элементы, присутствующие в каждом контейнере, были распределены по доступной высоте контейнера.

Ответы [ 2 ]

2 голосов
/ 08 июля 2019

Задача № 1

Мне нужно, чтобы оба элемента имели одинаковую высоту

Flexbox не имеет height: 100% и поэтому не заполняет всю высоту своего родительского контейнера (который будет таким же, как левый столбец).

Итак, давайте добавим следующее: поскольку вы уже используете загрузчик, просто добавьте класс h-100 к отмеченному элементу.

<!-- two container-->

<div class="col-12 col-sm-6 col-md-6 col-lg-6 col-xl-6 p-0 m-0 ">
  <div class="row p-0 m-0"> <!--=========THIS CONTAINER===========-->
    <div class="col-12 col-sm-12 col-md-12 col-lg-6 p-0 m-0  text-center p-0  d-flex flex-column">
      <div class="d-flex  borde_gris_b m-0">

        <div class="h-100 flex-center flex-column  w-100">
          <h6 class="p-0 mx-0 ">Becas</h6>
          <p class="card-text p-0 m-0 "></p>
          <div class="d-flex mb-1">
            <div class="mr-3"> Beca Bien </div>
            <div>

              <p> $2,107,000 </p>
            </div>
          </div>
        </div>
      </div>

... more code
... more code
... more code

Задача № 2

элементы, присутствующие в каждом контейнере, распределяются по доступной высоте контейнера.

Для этого вы хотите использовать свойство flex, которое хорошо описано на w3schools.com ( click me ). Также обратите внимание на описание их первого примера:

Пусть все гибкие элементы имеют одинаковую длину, независимо от их содержимого.

Это именно то, что мы хотим! Итак, давайте добавим это тоже. Поскольку вы использовали только начальную загрузку, а не пользовательские классы, указывать путь было бы кошмаром, поэтому давайте просто добавим для него пользовательский идентификатор и добавим CSS.

#second > div > div {
  flex: 1;
}

В конце это конечный результат:

.borde_gris_b {
  border-bottom: 1px solid blue;
}

#second>div>div {
  flex: 1;
}
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" rel="stylesheet" />
<div class="row p-0 m-0 m-auto justify-content-center">
  <!-- first container-->
  <div class="col-12 col-sm-6  col-md-6 col-lg-6  col-xl-4 p-0 m-0  text-center p-0  d-flex flex-column" style="border:1px solid red;">
    <div class="d-flex  borde_gris_b m-0">
      <div class="h-100 flex-center flex-column  w-100">
        <h6 class="p-0 mx-0 mb-1 mt-0 ">SNIES</h6>
        <p class="card-text p-0 m-0 "></p>
        <div class="card-text">12967</div>
      </div>
    </div>
    <div class="d-flex  borde_gris_b m-0">

      <div class="h-100 flex-center flex-column  w-100">
        <h6 class="p-0 mx-0 mb-1 mt-0 ">Duración</h6>
        <p class="card-text p-0 m-0 "> 10 periodos academicos </p>
      </div>
    </div>

    <div class="d-flex  borde_gris_b m-0">

      <div class="h-100 flex-center flex-column  w-100">
        <h6 class="p-0 mx-0 mb-1 mt-0 ">Número de Créditos</h6>
        <p class="card-text p-0 m-0 "> 170 </p>
      </div>
    </div>
    <div class="d-flex  borde_gris_b m-0">

      <div class="h-100 flex-center flex-column  w-100">
        <h6 class="p-0 mx-0 mb-1 mt-0 ">Modalidad de Formación</h6>
        <p class="card-text p-0 m-0 "> Presencial </p>
      </div>
    </div>
  </div>

  <!-- two container-->

  <div class="col-12 col-sm-6 col-md-6 col-lg-6 col-xl-6 p-0 m-0 ">
    <div id="second" class="row p-0 m-0 h-100">
      <div class="col-12 col-sm-12 col-md-12 col-lg-6 p-0 m-0  text-center p-0  d-flex flex-column">
        <div class="d-flex  borde_gris_b m-0">

          <div class="h-100 flex-center flex-column  w-100">
            <h6 class="p-0 mx-0 ">Becas</h6>
            <p class="card-text p-0 m-0 "></p>
            <div class="d-flex mb-1">
              <div class="mr-3"> Beca Bien </div>
              <div>

                <p> $2,107,000 </p>
              </div>
            </div>
          </div>
        </div>
        <div class="d-flex  borde_gris_b m-0">

          <div class="h-100 flex-center flex-column  w-100">
            <h6 class="p-0 mx-0 mb-1 mt-0 ">Valor Matrícula</h6>
            <p class="card-text p-0 m-0 "> $5,696,000 </p>
          </div>
        </div>

        <div class="d-flex  borde_gris_b m-0">

          <div class="h-100 flex-center flex-column  w-100">
            <h6 class="p-0 mx-0 mb-1 mt-0 ">Jornada</h6>
            <p class="card-text p-0 m-0 "> Diurna/Nocturna </p>
          </div>
        </div>
      </div>

    </div>
  </div>
</div>
<!-- end row -->

Редактировать # 1

В этом редактировании я объясняю следующий комментарий:

Спасибо! Это стало очень ясно. только одно сомнение. свойство flex :1 приходит по умолчанию? Я понял, что при установке display: flex все элементы имеют одинаковый размер (результат flex:1, я так понимаю)

Как описано в моей предоставленной ссылке:

Свойство flex является сокращенным для:

  • flex-grow
  • flex-shrink
  • flex-basis.

Синтаксис CSS: flex: flex-grow flex-shrink flex-basis|auto|initial|inherit; Так что в этом случае вы также можете просто написать flex-grow: 1.

flex-grow с другой стороны описывается так:

Свойство flex-grow указывает, насколько элемент будет расти относительно остальных гибких элементов внутри одного контейнера.

Так что у нас даже есть определенный атрибут CSS для достижения вашей цели.

Но что делает display: flex и почему этого недостаточно?

display: flex инициализирует контейнер как flexbox со значениями по умолчанию . Если display: flex будет достаточно для того же, что и flex-grow: 1, значение по умолчанию для flex-grow должно быть 1. Однако значением по умолчанию является flex-grow: 0, и поэтому добавления display: flex недостаточно.

0 голосов
/ 08 июля 2019

Надеюсь, это поможет вам:

.borde_gris_b{
  border-bottom:1px solid blue;
}
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" rel="stylesheet"/>
    <div class="row p-0 m-0 m-auto justify-content-center">
     <!-- first container-->
      <div class="col-12 col-sm-6  col-md-6 col-lg-6  col-xl-4 p-0 m-0  text-center p-0  d-flex flex-column" style="border:1px solid red;">
        <div class="d-flex  borde_gris_b m-0">
            <div class="h-100 flex-center flex-column  w-100">
                <h6 class="p-0 mx-0 mb-1 mt-0 ">SNIES</h6>
                <p class="card-text p-0 m-0 "></p>
                <div class="card-text">12967</div>
            </div>
        </div>
        <div class="d-flex  borde_gris_b m-0">

            <div class="h-100 flex-center flex-column  w-100">
                <h6 class="p-0 mx-0 mb-1 mt-0 ">Duración</h6>
                <p class="card-text p-0 m-0 "> 10 periodos academicos </p>
            </div>
        </div>
  
        <div class="d-flex  borde_gris_b m-0">

            <div class="h-100 flex-center flex-column  w-100">
                <h6 class="p-0 mx-0 mb-1 mt-0 ">Número de Créditos</h6>
                <p class="card-text p-0 m-0 "> 170 </p>
            </div>
        </div>
        <div class="d-flex  borde_gris_b m-0">

            <div class="h-100 flex-center flex-column  w-100">
                <h6 class="p-0 mx-0 mb-1 mt-0 ">Modalidad de Formación</h6>
                <p class="card-text p-0 m-0 "> Presencial </p>
            </div>
        </div>
    </div>
    
    <!-- two container-->
    
    <div class="col-12 col-sm-6 col-md-6 col-lg-6 col-xl-6 p-0 m-0 ">
        <div class="row p-0 m-0" style="height: 100%">
            <div class="col-12 col-sm-12 col-md-12 col-lg-6 p-0 m-0  text-center p-0  d-flex flex-column" style="height: 100%;
flex-direction: column;
box-sizing: border-box;
display: flex;
place-content: stretch space-between;
align-items: stretch;
max-width: 100%;">
                <div class="d-flex  borde_gris_b m-0" >

                    <div class="h-100 flex-center flex-column  w-100">
                        <h6 class="p-0 mx-0 ">Becas</h6>
                        <p class="card-text p-0 m-0 "></p>
                        <div class="d-flex mb-1">
                            <div class="mr-3"> Beca Bien </div>
                            <div>

                                <p > $2,107,000 </p>
                            </div>
                        </div>
                    </div>
                </div>
                <div class="d-flex  borde_gris_b m-0">

                    <div class="h-100 flex-center flex-column  w-100">
                        <h6 class="p-0 mx-0 mb-1 mt-0 ">Valor Matrícula</h6>
                        <p class="card-text p-0 m-0 "> $5,696,000 </p>
                    </div>
                </div>
  
                <div class="d-flex  borde_gris_b m-0">

                    <div class="h-100 flex-center flex-column  w-100">
                        <h6 class="p-0 mx-0 mb-1 mt-0 ">Jornada</h6>
                        <p class="card-text p-0 m-0 "> Diurna/Nocturna </p>
                    </div>
                </div>
            </div>

        </div>
    </div>
</div><!-- end row -->
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...