JSFiddle - React, Tailwind, and code Playground
HTML
<header>
Header<button id="toggle">toggle</button>
</header>
<div id="ticker">
<div style="padding: 400px 0;">ticker</div>
ticcker
</div>
<div id="tracking">
<div class="filter"><input type="text"></div>
<div style="padding: 400px 0;">tracking</div>
tracking
</div>
CSS
header {
background: blue;
height: 40px;
position: fixed;
top: 0;
left: 0;
width: 100%;
z-index: 10;
}
#ticker,
#tracking {
padding-top: 40px;
}
#ticker {
background: grey;
position: relative;
z-index: 1;
}
#tracking {
background: lightblue;
position: fixed;
z-index: 5;
top: 0;
left: 0;
width: 100%;
transform: translate3d(100%, 0, 0);
-webkit-transition: -webkit-transform 200ms ease-in;
transition: -webkit-transform 200ms ease-in;
transition: transform 200ms ease-in;
transition: transform 200ms ease-in, -webkit-transform 200ms ease-in;
max-height: 100vh;
}
.show-tracking {
overflow: hidden;
}
.show-tracking #tracking {
transform: translate3d(0, 0, 0);
overflow-y: scroll;
}
.filter {
background: yellow;
position: -webkit-sticky;
position: sticky;
width: 100%;
top: 0;
left: 0;
}
JavaScript
document.getElementById("toggle").addEventListener("click", function() {
if (document.body.classList.contains("show-tracking")) {
document.body.classList.remove("show-tracking");
} else {
document.body.classList.add("show-tracking");
fix_safari_scroll("tracking");
}
});
function fix_safari_scroll(id) {
document.getElementById(id).style.overflowY = "hidden";
setTimeout(function() {
document.getElementById(id).style.overflowY = "scroll";
document.getElementById(id).removeAttribute("style");
}, 200);
}