CSS Flexbox - как сделать родительский div высотой вложенного дочернего img - PullRequest
0 голосов
/ 05 августа 2020

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

Все работает, кроме высоты.

Я пытался сделать это с помощью display: flex, но мне нужно установите фиксированную высоту на уровне контейнера, иначе ничего не будет отображаться.

Есть ли способ сделать это в css или мне придется использовать js?

    <div class="container">
      <div class="slide-wrap">
        <?php 
          
         //php to dynamically create the slides

            <!-- Individual slides -->
            <div class="slide">
              <img class="hero-img" src="<?php echo get_the_post_thumbnail_url(); ?>" alt="">

              <!-- Hero showcase footer -->
              <div id="hero-footer">
                <a class="btn-secondary" href="<?php the_permalink(); ?>">Press</a>
              </div>

            </div>

          <?php } wp_reset_postdata(); ?>
      </div>
      <div class="arrows">
        <div><i id="arrow-left" class="fas fa-arrow-left fa-2x" href="#"></i></div>
        <div><i id="arrow-right" class="fas fa-arrow-right fa-2x" href="#"></i></div>
      </div>
      
    </div>

и css:

.container {
  position: relative;
  overflow: hidden;
  padding: 0;
  background: black;
  display: inline-block;
  height: 750px;
}

.slide {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  opacity: 0;
  transition: opacity 0.4s ease-in-out;
}

.slide.current {
  opacity: 1;
  z-index: 2;
}

.hero-img {
  width: 100%;
}

#hero-footer {
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: center;
  color: $text-color;
}

#hero-footer a {
  margin: 1rem;
  font-size: 1.5rem;
  width: 200px;
}

.arrows {
  display: flex;
  justify-content: space-between;
  padding: 0 1rem;
}

#arrow-left {
  left: 0;
  margin-left: 30px;
  z-index: 10;
}

#arrow-right {
  right: 0;
  margin-right: 30px;
  z-index: 11;
}

1 Ответ

0 голосов
/ 05 августа 2020

Я предполагаю, что вы ищете решение, поддерживающее соотношение сторон CSS.

Вот решение в S CSS для создания контейнера 16x9:

[data-ar] {
    position: relative;
    &:before {content: ''; display: block;}
    > * {top: 0; left: 0; width: 100%; height: 100%; display: block; position: absolute;}
}
[data-ar='16:9']:before {padding-top: 9 / 16 * 100%;}

Затем примените класс в качестве оболочки к вашему изображению:

<div data-ar="16:9">
    <img class="hero-img" src="<?php echo get_the_post_thumbnail_url(); ?>" alt="">
</div>

Просто измените переменные, чтобы сделать любое другое произвольное соотношение сторон:

[data-ar='16:9']:before {padding-top: 9 / 16 * 100%;}
[data-ar='4:3']:before {padding-top: 3 / 4 * 100%;}
[data-ar='176:43']:before {padding-top: 43 / 176 * 100%;}
...