TL; DR: Вы можете переместить деление на 50% от его собственной высоты и при этом остальная часть потока документов будет находиться прямо под ним?
Я должен сделать макет, в котором есть серия изображений (фиксированное соотношение ширины и высоты) с подписями (переменная длина текста).
Я Я уверен, что мне нужно использовать flex или grid . Вот ограничения, которые указывают на контейнер display: flex
с display: flex||grid
дочерними элементами:
- Фиксированное количество элементов в строке, даже если ширина экрана может варьироваться
- Ящики, содержащие заголовок тексты одной и той же строки должны иметь одинаковую высоту, даже если текст имеет переменную длину.
- Если строка не заполнена изображениями, меньшее количество изображений должно быть отцентрировано (т. е. родитель может t be
grid
).
Вот кикер :
Подписи должны быть вертикально центрированы вокруг нижней части соответствующих изображений. (Точно так же, как в приведенном ниже фрагменте, когда включен
transform
.)
Почему translateY
не может работать : это было бы легко сделать с translateY(-50%)
(см. Фрагмент ниже), но тогда я не могу контролировать вертикальный интервал между двумя строками изображений. Если из-за переменной длины заголовков поля заголовков в строке имеют высоту 100px, у меня будет поле в 50px ниже этой строки, если в следующем ряду поля заголовков будут иметь высоту только 80px, поле ниже этого будет 40px. .. Я пытаюсь получить постоянный запас ниже каждого ряда.
Фрагмент : макет правильный. Когда translateY
имеет значение , разрешено , подписи должным образом располагаются относительно их соответствующих изображений. Когда translateY
равно отключено , можно определить расстояние по вертикали между рядами изображений. Я буду sh делать оба.
body {
display: flex;
flex-wrap: wrap;
justify-content: center;
}
section {
box-sizing: border-box;
width: calc(100% / 3);
display: flex;
flex-direction: column;
}
.img {
background: center / cover no-repeat url(https://cdn.pixabay.com/photo/2020/02/16/20/29/new-york-4854718_1280.jpg)
}
.img::before {
content: '';
display: block;
padding-bottom: 65%;
}
.text {
background-color: rgba(255, 255, 255, .8);
box-shadow: inset 0 0 0 1px red;
flex: 1;
transform: translateY(-50%);
}
<section>
<div class="img"></div>
<div class="text"><span>Convallis cursus ornare mus luctus varius fusce tempus arcu quisque</span></div>
</section>
<section>
<div class="img"></div>
<div class="text"><span>Eleifend lorem facilisis dictumst phasellus aenean conubia libero.</span></div>
</section>
<section>
<div class="img"></div>
<div class="text"><span>Nam ut gravida nisi scelerisque</span></div>
</section>
<section>
<div class="img"></div>
<div class="text"><span>Ligula quisque nibh class sociosqu netus laoreet interdum volutpat mus</span></div>
</section>
<section>
<div class="img"></div>
<div class="text"><span>Duis nec maecenas ultricies ridiculus nascetur nisi rutrum dignissim nam</span></div>
</section>