Переполнение гибкого элемента в направлении главной осиCSS

Разбираемся в CSS
Ответить
Anonymous
 Переполнение гибкого элемента в направлении главной оси

Сообщение Anonymous »

Мне очень жаль за этот вопрос, потому что я уже видел здесь много подобных вопросов, но до сих пор не могу разобраться.
Я бы хотел создайте элемент наложения с элементами управления для элемента отображения, где элементы управления расположены вертикально и выровнены по правому и нижнему краю экрана. Существует одна кнопка элемента фиксированного размера, содержащая некоторые элементы управления, а затем информация об элементе динамического размера, которая появляется только тогда, когда некоторые части дисплея активны. Информация всегда содержит кнопку закрытия и некоторую информацию динамической высоты. Я бы хотел, чтобы контейнер info всегда сжимался до своего содержимого. Однако если высота содержимого слишком велика и содержащий элемент info будет выше, чем оставшееся вертикальное пространство контейнера наложения, я бы хотел, чтобы содержимое можно было прокручивать.
Я думал, что просто использую гибкий контейнер и атрибуты overflow-y, но, похоже, это не поможет. Кажется, что переполнение срабатывает только в том случае, если родительский контейнер имеет определенную высоту, но в моем случае родительский контейнер является динамическим, то есть он должен расти до определенной высоты, а затем останавливаться, пока содержимое становится прокручиваемым.
Это была моя попытка:

Код: Выделить всё

const info = document.querySelector(".info");
const content = document.querySelector(".content");

document.querySelector("#open-info").addEventListener("click", () => {
info.style.display = "flex";
});

document.querySelector("#close-info").addEventListener("click", () => {
info.style.display = "none";
});

document.querySelector("#increase-height").addEventListener("click", () => {
content.style.height = `${content.clientHeight + 30}px`;
});

document.querySelector("#decrease-height").addEventListener("click", () => {
content.style.height = `${content.clientHeight - 30}px`;
});

Код: Выделить всё

.display {
position: relative;
width: 400px;
height: 300px;
background-color: gray;
}

.overlay {
position: absolute;
display: flex;
width: 100%;
height: 100%;
top: 0;
left: 0;
flex-direction: column;
justify-content: flex-end;
align-items: flex-end;
}

.info {
display: flex;
flex-direction: column;
justify-content: flex-end;
align-items: flex-end;
flex-shrink: 0;
background-color: orange;
padding: 10px;
max-height: 230px;
/* overflow works, but fixed size is undesirable, as the remaining space in main-axis direction should be used up */
/* max-height: 100%; overflow doesn't work, as it refers to parent's height, not to remaining available space in main-axis direction*/
}

.info-content-wrapper {
padding: 5px;
overflow-x: hidden;
overflow-y: auto;
}

.content {
width: 80px;
height: 150px;
background-color: yellow;
}

.controls {
background-color: lightblue;
padding: 5px;
flex: 0 0 auto;
}

Код: Выделить всё



Close





Open info
+
-




В этом примере вы можете использовать кнопки, чтобы скрыть/показать информацию. , а также увеличить/уменьшить высоту содержимого. Я использовал фиксированную максимальную высоту: 230 пикселей на .info, чтобы продемонстрировать, как это должно работать. Однако вместо использования фиксированной максимальной высоты следует использовать оставшееся вертикальное пространство гибкого контейнера. Но когда я использую max-height: 100%, он (согласно определению) будет относиться к общей высоте родительского гибкого контейнера. Если я вложу его дальше (например, внесу оболочку вокруг внутреннего HTML-кода .info) и установлю максимальную высоту этого элемента на 100%, это все равно не сработает.
Мне кажется, что ответ должен быть очень простым, но я не могу найти решение, используя только гибкую разметку и не прибегая к обходным путям с помощью Calc. Я чувствую себя очень глупо по этому поводу и был бы очень рад помощи!

Подробнее здесь: https://stackoverflow.com/questions/783 ... -direction
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «CSS»