У меня есть небольшая базовая страница макета.
Содержимое в центре с боковой панелью, содержащей фильтры.
Пожалуйста, смотрите: https://codepen.io/anon/pen/ePLmKB?editors=1100
Мне бы хотелось, чтобы мой.heading
и .filter-block-heading
всегда должны быть видны и иметь только прокручиваемые карты фильтра.Проблема заключается в переполнении целого столбца flex, из-за которого заголовок моего столбца прокручивается вне поля зрения
Мне нужно содержимое раздела .main, чтобы иметь возможность расширять весь раздел .content.Если содержимое небольшое, максимальная высота - это область просмотра минус высота нижнего колонтитула.Но если содержимое расширяется, боковые панели тоже должны расширяться.
Я пытался установить overflow: hidden
для родителей, а затем overflow: auto
для ребенка.
body {
height: 100vh;
overflow: auto;
}
.app {
display: flex;
flex-direction: column;
position: relative;
min-width: 1024px;
width: 100%;
height: auto;
}
header {
background-color: #b4d15e;
}
footer {
height: 56px;
background-color: #5ed1b4;
}
.content {
flex-direction: row;
min-height: calc(100vh - 56px);
display: flex;
}
.sidebar-1 {
display: flex;
flex-direction: column;
position: relative;
width: calc(20% + 0px);
max-width: 300px;
min-width: 200px;
overflow-y: auto;
box-shadow: 0 0 4.9px 0.2px rgba(0, 0, 0, 0.5);
border-color: #e0e1e6;
border-style: solid;
border-width: 0 1px 0 0;
flex: none;
background: #f4f5f8;
}
.heading {
display: flex;
flex-direction: column;
}
.heading h2 {
margin: 0;
}
.heading>div {
display: flex;
padding: 15px 7px 15px 12px;
align-items: center;
}
.filters {
position: absolute;
height: auto;
margin-top: 50px;
width: 100%;
}
.filter-block {
display: flex;
flex-direction: column;
}
.filter-block-heading {
min-height: 0;
display: flex;
flex-direction: row;
flex-shrink: 0;
padding-left: 10px;
border-bottom: solid 3px #404c9a;
text-align: center;
font-size: 14px;
}
.single-filters {
display: flex;
flex-direction: column;
width: 100%
}
.filter-card {
width: 100% padding: 5px;
margin-top: 12px;
border-top: 2px solid red;
border-bottom: 2px solid green;
}
.filter-card h3 {
background-color: #A8AAFF;
position: sticky;
top: 0px;
font-weight: bold;
}
.filter-card li {
margin-top: 6px;
}
.main {
display: flex;
flex-direction: column;
flex: 1 1 0%;
width: 580px;
padding: 30px;
}
.sidebar-2 {
position: relative;
transition: all 0.25s;
width: calc(25% + 30px);
max-width: 300px;
overflow: hidden;
box-shadow: 0 0 4.9px 0.2px rgba(0, 0, 0, 0.5);
}
<body>
<div class='app'>
<header>
Header</header>
<div class='content'>
<div class='sidebar-1'>
<div class='heading'>
<div>
<h2>All Filters</h2>
<button>Show all</button>
</div>
</div>
<div class='filters'>
<div>
<div class='filter-block'>
<div class='filter-block-heading'>
Custom Filters
</div>
<div class='single-filters'>
<div>
<div class='filter-card'>
<h3>Single Filter</h3>
<ul>
<li>Option 1</li>
<li>Option 2</li>
<li>Option 3</li>
</ul>
</div>
<div class='filter-card'>
<h3>Single Filter</h3>
<ul>
<li>Option 1</li>
<li>Option 2</li>
<li>Option 3</li>
</ul>
</div>
<div class='filter-card'>
<h3>Single Filter</h3>
<ul>
<li>Option 1</li>
<li>Option 2</li>
<li>Option 3</li>
</ul>
</div>
<div class='filter-card'>
<h3>Single Filter</h3>
<ul>
<li>Option 1</li>
<li>Option 2</li>
<li>Option 3</li>
</ul>
</div>
<div class='filter-card'>
<h3>Single Filter</h3>
<ul>
<li>Option 1</li>
<li>Option 2</li>
<li>Option 3</li>
</ul>
</div>
<div class='filter-card'>
<h3>Single Filter</h3>
<ul>
<li>Option 1</li>
<li>Option 2</li>
<li>Option 3</li>
</ul>
</div>
<div class='filter-card'>
<h3>Single Filter</h3>
<ul>
<li>Option 1</li>
<li>Option 2</li>
<li>Option 3</li>
</ul>
</div>
<div class='filter-card'>
<h3>Single Filter</h3>
<ul>
<li>Option 1</li>
<li>Option 2</li>
<li>Option 3</li>
</ul>
</div>
<div class='filter-card'>
<h3>Single Filter</h3>
<ul>
<li>Option 1</li>
<li>Option 2</li>
<li>Option 3</li>
</ul>
</div>
<div class='filter-card'>
<h3>Single Filter</h3>
<ul>
<li>Option 1</li>
<li>Option 2</li>
<li>Option 3</li>
</ul>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class='main'>main</div>
<div class='sidebar-2'>sidebar 2</div>
</div>
<footer>Footer</footer>
</div>
</body>