I'm currently working on a project that already has a complex front end. I need to incorporate a new element as a replacement for a dropdown menu. This new element is essentially a div
connected to a collection using knockout
.
The issue arises when there are multiple divs on a single page, each containing a dynamically rendered structure. Nestled within one of these divs is my custom dropdown. The problem occurs when attempting to expand the dropdown (triggered by a click event bound via jQuery) and it renders at the top of the div due to excessive content. Using overflow: visible
would disrupt the overall appearance of the page.
An example illustrating my dilemma can be found HERE:
$('.show-dropdown').click(function() {
if ($(this).next('.render-this').hasClass('hide-me')) {
$(this).next('.render-this').removeClass('hide-me');
} else {
$(this).next('.render-this').addClass('hide-me');
}
})
td {
position: relative;
}
#top-div {
width: 500px;
max-width: 500px;
border: 1px solid black;
max-height: 100px;
overflow-y: auto;
white-space: nowrap;
}
#bottom-div {
width: 500px;
max-width: 500px;
border: 1px solid black;
max-height: 100px;
overflow-y: auto;
}
.show-dropdown {
width: 120px;
height: 40px;
background-color: green;
}
.render-this {
position: absolute;
bottom: 10px;
z-index: 5;
width: 20px;
height: 150px;
background-color: red;
}
.hide-me {
display: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="top-div">
<p>
lorem ipsum lorem ipsum lorem ipsum lorem ipsumlorem ipsumlorem ipsum lorem ipsum lorem ipsum
</p>
</div>
<div id="bottom-div">
<table class="w3-table">
<tr>
<th>Column 1</th>
<th>Column 2</th>
<th>Column 3</th>
<th>Column 4</th>
<th>Column 5</th>
<th>Column 6</th>
</tr>
<tr>
<td><div class="show-dropdown"></div><div class="render-this hide-me"></div></td>
<td><div class="show-dropdown"></div><div class="render-this hide-me"></div></td>
<td><div class="show-dropdown"></div><div class="render-this hide-me"></div></td>
<td><div class="show-dropdown"></div><div class="render-this hide-me"></div></td>
<td><div class="show-dropdown">></div><div class="render-this hide-me"></div></td>
<td><div class="show-dropdown"></div><div class="render-this hide-me"></div></td>
</tr>
</table>
After exploring various resources, it seems like having overflow may pose limitations. However, I came across a solution involving CSS properties such as transform
and other techniques which might still offer some possibilities. My goal is to fully render the dropdown without compromising the layout, so I'm considering experimenting with overflow: visible
in tandem with a JavaScript-powered scroll feature, but further research is required.