<body>
<button class="js__filters-open btn" type="button">Filters</button>
<div class="filters js__filters">
<div class="filters-card">
<div class="filters-card__header js__filters-header">Color</div>
<div class="filters-card__content" style="display: block;">
<input type="text" placeholder="Search" class="js__search-input">
<ul>
<li>Checkbox #1</li>
<li>Checkbox #2</li>
<li>Checkbox #3</li>
</ul>
</div>
</div>
<div class="filters-card">
<div class="filters-card__header js__filters-header">Size</div>
<div class="filters-card__content" style="display: block;">
<input type="text" placeholder="Search" class="js__search-input">
<ul>
<li>Checkbox #1</li>
<li>Checkbox #2</li>
<li>Checkbox #3</li>
<li>Checkbox #4</li>
<li>Checkbox #5</li>
</ul>
</div>
</div>
<div class="filters-card">
<div class="filters-card__header js__filters-header">Price</div>
<div class="filters-card__content">
<input type="text" placeholder="Search" class="js__search-input">
<ul>
<li>Checkbox #1</li>
<li>Checkbox #2</li>
</ul>
</div>
</div>
<div class="filters-card">
<div class="filters-card__header js__filters-header">Weight</div>
<div class="filters-card__content">
<input type="text" placeholder="Search" class="js__search-input">
<ul>
<li>Checkbox #1</li>
<li>Checkbox #2</li>
<li>Checkbox #3</li>
<li>Checkbox #4</li>
<li>Checkbox #5</li>
</ul>
</div>
</div>
<div class="filters-card">
<div class="filters-card__header js__filters-header">Season</div>
<div class="filters-card__content">
<input type="text" placeholder="Search" class="js__search-input">
<ul>
<li>Checkbox #1</li>
<li>Checkbox #2</li>
<li>Checkbox #3</li>
<li>Checkbox #4</li>
<li>Checkbox #5</li>
</ul>
</div>
</div>
</div>
</body>
body {
margin: 25px;
}
*, *:before, *:after {
box-sizing: border-box;
}
.btn {
display: inline-flex;
align-items: center;
justify-content: center;
border: 0;
font-size: 12px;
text-transform: uppercase;
font-weight: 700;
letter-spacing: 0.1em;
height: 36px;
width: 180px;
cursor: pointer;
background-color: #ddd;
outline: 0;
}
.filters {
position: fixed;
top: 25px;
left: 300px;
height: calc(100vh - 50px);
background-color: #eee;
border: 1px solid #ddd;
width: 300px;
overflow-y: auto;
padding: 15px;
display: none;
}
.filters-card {
margin-bottom: 15px;
&__header {
background-color: #ddd;
padding: 15px 20px;
font-size: 14px;
text-transform: uppercase;
font-weight: 700;
letter-spacing: 0.1em;
cursor: pointer;
transition: background .2s ease-in-out;
&:hover {
background-color: #c9c9c9;
}
}
&__content {
padding: 13px 15px;
border: 1px solid #ddd;
display: none;
input {
width: 100%;
margin-bottom: 13px;
font-size: 13px;
height: 36px;
padding: 0 15px;
background-color: #ddd;
border: 1px solid #bbb;
outline: 0;
}
ul {
margin: 0;
padding: 0;
list-style-type: none;
font-size: 13px;
li {
padding: 10px 0;
&:not(:last-child) {
border-bottom: 1px solid #ddd;
}
&:first-child {
padding-top: 0;
}
&:last-child {
padding-bottom: 0;
}
}
}
}
}
View Compiled
$(document).ready(function(){
// Opening Filters Block
$('.js__filters-open').click(function(e){
e.preventDefault();
$('.js__filters').toggle();
});
// Filters Accordion
$('.js__filters-header').click(function(){
var filtersContainer = $(this).closest('.filters-card');
var filtersList = filtersContainer.find('.filters-card__content');
filtersList.slideToggle();
});
// Search Input
$(document).on('focus', '.js__search-input', function(){
var container = $(this).closest('.filters-card');
var containerOffset = container[0].offsetTop - 15;
$('.js__filters').stop().animate({ scrollTop: containerOffset }, 1000);
});
});
This Pen doesn't use any external CSS resources.