#javascript #css
#javascript #css
Вопрос:
У меня есть окно сохранения соотношения сторон CSS, однако я пытаюсь сделать так, чтобы высота поля увеличивалась, если высота дочернего элемента больше высоты соотношения сторон.
Вот что у меня сейчас есть:
const box = document.querySelector(".box");
const inner = box.querySelector(".box-inner");
const content = box.querySelector(".box-content");
function updateBox() {
const innerRect = inner.getBoundingClientRect();
const contentRect = content.getBoundingClientRect();
const expandHeight = contentRect.height > innerRect.height;
inner.style.paddingBottom = expandHeight ? "0" : "100%";
inner.style.height = expandHeight ? "auto" : "0";
content.style.position = expandHeight ? "relative" : "absolute";
}
updateBox();
window.addEventListener("resize", updateBox);
.box {
width: 100%;
max-width: 100px;
background-color: pink;
position: relative;
}
.box-inner {
height: 0;
padding-bottom: 100%;
}
.box-content {
position: absolute;
top: 0;
left: 0;
width: 100%;
}
<div class="box">
<div class="box-inner">
<div class="box-content">
<div style="width: 50%; height: 125px; background-color: rgba(255, 0, 0, 0.5)">
content
</div>
</div>
</div>
</div>
Это работает, однако при изменении размера окна окно мерцает. Есть ли способ решить эту проблему?
Ответ №1:
>=
(больше или равно) решает проблему
contentRect.height >= innerRect.height
const box = document.querySelector(".box");
const inner = box.querySelector(".box-inner");
const content = box.querySelector(".box-content");
function updateBox() {
const innerRect = inner.getBoundingClientRect();
const contentRect = content.getBoundingClientRect();
const expandHeight = contentRect.height >= innerRect.height;
inner.style.paddingBottom = expandHeight ? "0" : "100%";
inner.style.height = expandHeight ? "auto" : "0";
content.style.position = expandHeight ? "relative" : "absolute";
}
updateBox();
window.addEventListener("resize", updateBox);
.box {
width: 100%;
max-width: 100px;
background-color: pink;
position: relative;
}
.box-inner {
height: 0;
padding-bottom: 100%;
}
.box-content {
position: absolute;
top: 0;
left: 0;
width: 100%;
}
<div class="box">
<div class="box-inner">
<div class="box-content">
<div style="width: 50%; height: 125px; background-color: rgba(255, 0, 0, 0.5)">
content
</div>
</div>
</div>
</div>