Установка высоты ряда по меньшему элементу в этой строке (grid)
Есть таблица с одной строкой. В этой строке только два элемента. Элементы одинаковые, за исключением содержания в блоках. Эти блоки имеют возможность прокрутки контента. Нужно что бы меньший элемент задавал высоту строки. А больший элемент просто прокручивал блок с "излишним" содержимым. Ожидаемое поведение приведено ниже, но это достигнуто строкой height: 186px;
для класса elem, но это действительно только для такого набора содержимого. Если контента станет больше или меньше размер не измениться (что логично, т.к. я указал тут размер на прямую т.к. хочу показать чего хочу добиться).
Собственно вопрос: как это сделать правильно и независимо от объема содержимого в первом и втором элементе.
body {
display: flex;
justify-content: center;
align-items: center;
}
.table {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 15px;
}
.block {
background-color: bisque;
}
.elem {
height: 186px;
width: 200px;
overflow-y: auto;
overflow-x: auto;
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="src/style.css">
</head>
<body>
<div class="table">
<div class="block">
<h1>Block 1</h1>
<div class="elem">
<p> text 1 </p>
<p> text 2 </p>
<p> text 3 </p>
<p> text 4 </p>
<p> text 5 </p>
<p> text 6 </p>
<p> text 7 </p>
<p> text 8 </p>
<p> text 9 </p>
</div>
</div>
<div class="block">
<h1>Block 2</h1>
<div class="elem">
<p> text 1 </p>
<p> text 2 </p>
<p> text 3 </p>
<p> text 4 </p>
<p> text 5 </p>
</div>
</div>
</div>
</body>
</html>
Ответы (1 шт):
Только начинаю учить js. Я сделал так. Наверное не самый лучший вариант, потом может что-то ещё придумаю. Общий смысл в том, что надо получить высоту каждого блока, найти потом минимальную и задать классу elem
let elems = document.querySelectorAll('.elem');
let elem1 = document.getElementById('elem1');
let height1 = elem1.clientHeight;
let elem2 = document.getElementById('elem2');
let height2 = elem2.clientHeight;
let minHeight = Math.min(height1, height2);
elems.forEach(elem => {
elem.style.height = minHeight + 'px';
});
body {
display: flex;
justify-content: center;
align-items: center;
}
.table {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 15px;
}
.block {
background-color: bisque;
}
.elem {
width: 200px;
overflow-y: auto;
overflow-x: auto;
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="src/style.css">
</head>
<body>
<div class="table">
<div class="block">
<h1>Block 1</h1>
<div class="elem" id = "elem1">
<p> text 1 </p>
<p> text 2 </p>
<p> text 3 </p>
<p> text 4 </p>
<p> text 5 </p>
<p> text 6 </p>
<p> text 7 </p>
<p> text 8 </p>
<p> text 9 </p>
</div>
</div>
<div class="block" id = "block2">
<h1>Block 2</h1>
<div class="elem" id = "elem2">
<p> text 1 </p>
<p> text 2 </p>
<p> text 3 </p>
<p> text 4 </p>
<p> text 5 </p>
</div>
</div>
</div>
</body>
</html>