Принудительно расширять Bootstrap div по вертикали при использовании абсолютно позиционированного содержимого - PullRequest
3 голосов
/ 12 июля 2020

Как я могу заставить средний div расширяться по вертикали на экранах размером менее 1000 пикселей и не перетекать текст под изображением в третьем div?

Очистка плавающих элементов не имеет эффекта.

Это Bootstrap 4.4.1.

https://jsfiddle.net/o4h0czv7/

HTML:

<div class="container-fluid">
    <div class="row">
        <div class="col-12 text-center">
            <img class='img-fluid' src="https://placekitten.com/1400/300" /> 
            <div class="title">
                Kittens Kittens
            </div>
        </div>
    </div>
</div>
</div>
<div class="container-fluid">
    <div class="col-12 text-center">
        <div class="row">
            <img class='img-fluid' src="https://placekitten.com/1400/400" /> 
            <div class="text">
                <p>
                    At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus id quod maxime placeat facere possimus, omnis voluptas assumenda est, omnis dolor repellendus. Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet ut et voluptates repudiandae sint et molestiae non recusandae. Itaque earum rerum hic tenetur a sapiente delectus, ut aut reiciendis voluptatibus maiores alias consequatur aut perferendis doloribus asperiores repellat.
                </p>
                <p>
                    At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus id quod maxime placeat facere possimus, omnis voluptas assumenda est, omnis dolor repellendus. Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet ut et voluptates repudiandae sint et molestiae non recusandae. Itaque earum rerum hic tenetur a sapiente delectus, ut aut reiciendis voluptatibus maiores alias consequatur aut perferendis doloribus asperiores repellat.
                </p>
            </div>
        </div>
    </div>
</div>
<div class="container-fluid">
    <div class="col-12 text-center">
        <div class="row">
            <img class='img-fluid' src="https://placekitten.com/1400/250" /> 
            <div class="text">
                At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium 
            </div>
        </div>
    </div>
</div>

CSS:

body {
        height: 100%;
        font-size: 16px;
        color:#fff;
        overflow: none;
        }
        
        .text {
        position: absolute;
        top:0;
        left:0;
        right: 0;
        height: 100%;
        }
        
        .title {
        position: absolute;
        top:10%;
        left:0;
        right: 0;
        height: 100%;
        }

Ответы [ 2 ]

1 голос
/ 12 июля 2020

Добавлен класс .middle-block для среднего контейнера и @media (max-width: 1000px) {...} для определения изменений на экранах менее 1000 пикселей.

Здесь вы можете видеть, что .middle-block .text теперь relative, а .middle-block .img-fluid - absolute. Итак, теперь высота блока зависит от .middle-block .text высоты.

Из-за position: absolute в сочетании с object-fit: cover; - .middle-block .img-fluid начинает действовать как фоновое изображение с background-size: cover;

body {
  height: 100%;
  font-size: 16px;
  color: #fff;
  overflow: none;
}

.text {
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  height: 100%;
}

.title {
  position: absolute;
  top: 10%;
  left: 0;
  right: 0;
  height: 100%;
}

@media (max-width: 1000px) {
  .middle-block .text {
    position: relative;
    height: auto;
    z-index: 2;
  }
  .middle-block .img-fluid {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    z-index: 1;
    object-fit: cover;
  }
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.5.0/css/bootstrap.min.css" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.5.0/js/bootstrap.min.js"></script>


<div class="container-fluid">
  <div class="row">
    <div class="col-12 text-center">
      <img class='img-fluid' src="https://placekitten.com/1400/300" />
      <div class="title">
        Kittens Kittens
      </div>
    </div>
  </div>
</div>

<div class="container-fluid middle-block">
  <div class="col-12 text-center">
    <div class="row">
      <img class='img-fluid' src="https://placekitten.com/1400/400" />
      <div class="text">
        <p>
          At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia
          animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus id quod maxime placeat facere possimus, omnis voluptas assumenda
          est, omnis dolor repellendus. Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet ut et voluptates repudiandae sint et molestiae non recusandae. Itaque earum rerum hic tenetur a sapiente delectus, ut aut
          reiciendis voluptatibus maiores alias consequatur aut perferendis doloribus asperiores repellat.
        </p>
        <p>
          At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia
          animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus id quod maxime placeat facere possimus, omnis voluptas assumenda
          est, omnis dolor repellendus. Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet ut et voluptates repudiandae sint et molestiae non recusandae. Itaque earum rerum hic tenetur a sapiente delectus, ut aut
          reiciendis voluptatibus maiores alias consequatur aut perferendis doloribus asperiores repellat.
        </p>
      </div>
    </div>
  </div>
</div>
<div class="container-fluid">
  <div class="col-12 text-center">
    <div class="row">
      <img class='img-fluid' src="https://placekitten.com/1400/250" />
      <div class="text">
        At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium
      </div>
    </div>
  </div>
</div>
0 голосов
/ 12 июля 2020

Вы должны добавить новый класс в div, который вы хотите использовать для свойств, которые вам нужны, в этом примере это средний:

Я добавил класс middleCat.

Он использует правило @media для включения блока CSS свойств, только если выполняется определенное условие.

Как я могу заставить средний div расширяться по вертикали на экранах размером меньше 1000 пикселей и не перетекать текст под изображением в третьем div? пикселей по вертикали вам понадобится:

@media only screen and (max-height: 1000px) {
  .middleCat{
    min-height:100vh;
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...