Я пытаюсь построить простой CSS-макет и иметь массу проблем:CSS-макет с прокруткой гибкой панели
Я хочу 3 вертикальных панели. Верхняя панель - 'banner' - крепится к верхней части внешнего контейнера. Его высота должна определяться его содержимым - I не хотят иметь определенную или процентную высоту. Если я увеличиваю размер шрифта или вставляю более крупное изображение, высота баннера должна соответственно измениться, и панели внизу также должны соответственно изменить высоту.
Средняя панель - «опция» - будет содержать некоторое содержимое, которое может также увеличиваться или уменьшаться (так же, без определенной или процента высоты), и время от времени я могу скрыть или удалить среднюю панель , Изменения в средней панели должны влиять на высоту нижней панели, но не на баннер.
Нижняя панель - 'flexible' - должна быть закреплена на дне контейнера и расти вверх. Если на его текущей высоте может отображаться больше контента, он должен отображать вертикальные полосы прокрутки. ТОЛЬКО эта панель должна отображать полосы прокрутки - я не хочу их на других панелях или на внешнем контейнере. Если «дополнительная» панель сжимается или скрывается, верхняя часть «гибкой» панели должна двигаться вверх, останавливаясь только в том случае, если больше нет внутреннего содержимого для отображения.
Вот мой эскиз. Когда отображается необязательный элемент, гибкий элемент должен получить вертикальную полосу прокрутки:
$(function() {
$('a').click(function() {
$('.optional').toggle();
return false;
});
});
div, h1, p { margin: 0; padding: 5px; position: relative; }
h1 a {
font: .5em sans-serif;
}
.container {
outline: 1px solid pink;
height: 420px;
overflow: hidden;
}
.banner {
outline: 1px solid blue;
}
.optional {
outline: 1px solid orange;
}
.flexible {
outline: 1px solid lime;
min-height: 25%;
overflow-y: auto;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="container">
<div class="row banner">
<h1>Hello world <a href="#">toggle optional</a></h1>
</div>
<div class="row optional">
<p>Optional 1</p>
<p>Optional 2</p>
<p>Optional 3</p>
<p>Optional 4</p>
<p>Optional 5</p>
</div>
<div class="row flexible">
<p>flex01</p>
<p>flex02</p>
<p>flex03</p>
<p>flex04</p>
<p>flex05</p>
<p>flex06</p>
<p>flex07</p>
<p>flex08</p>
<p>flex09</p>
<p>flex10</p>
</div>
</div>
У меня очень трудно получить эту работу, используя только CSS. Я использую относительное и абсолютное позиционирование в разных комбо, но они хотят знать высоты элементов, а высоты - динамические. Я немного играл с flexbox, но не мог получить вертикальное расширение для работы.
Я мог бы использовать все виды JavaScript - при загрузке документа или изменении размера окна, получить высоту внешнего контейнера, получить вычисленную высоту баннера и дополнительных панелей и установить высоту гибкой панели на контейнерHeight - (bannerHeight + optionalHeight). Но я хотел бы избежать JS, если это возможно. Только современные браузеры - IE10 +, Chrome/Safari/FF current, iOS, Android.
Возможно?
Да, я в порядке с Flexbox, и это очень близко! Одна проблема: как я могу сделать панель «Дополнительно» всегда отображать все ее содержимое - никаких полос прокрутки, скрытого содержимого? Гибкая нижняя панель работает правильно. – Val
@Val - в какой-то момент .optionnal может быть выше контейнера.-В вашем вопросе я вижу, что вы установили минимальную высоту: 25%; - телефона, планшета, блокнота достаточно, чтобы был показан короткий или слишком длинный .опциональный. Можете ли вы понять, что вы действительно пытаетесь сделать? Теперь я смущен :) . –
Баннер - это высота набора, основанная на контенте. Это может измениться динамически, но все в порядке, если оно остается оригинальной. Необязательный динамический по высоте и видимости - он содержит фильтры поиска; в зависимости от того, что вы ищете, я могу показать больше или меньше элементов управления. Он должен всегда показывать весь контент, но пользователь может скрыть его после получения результатов. Гибкость - это результаты - покажите столько, сколько я могу, если появится опционально, и показать больше, если параметр «Дополнительно» свернут. 25% мин-ч было на гибкой, чтобы всегда что-то показывать, но это всего лишь оставшийся эксперимент. Просто нужно Необязательно для динамического расширения, без прокрутки. – Val