<div class="site">
<header>
<div class="overflow-thing">will overflow</div>
<pre>overflow-x: clip;
overflow-y: visible;</pre>
<div class="popout">Can escape down</div>
</header>
<aside>
<pre>overflow-x: visible;
overflow-y: clip;</pre>
<div class="overflow-thing">
will overflow
</div>
<div class="popout">
Something pretty long that needs to escape out to the side.
</div>
</aside>
<main></main>
</div>
body {
margin: 0;
height: 100dvh;
font: 100%/1.2 system-ui;
}
.site {
display: grid;
grid-template:
"header header"
"aside main";
grid-template-columns: 200px 1fr;
grid-template-rows: 100px 1fr;
height: 100%;
> * {
padding: 8px;
}
}
header {
background: #999;
grid-area: header;
width: 100vw;
overflow-x: clip;
overflow-y: visible;
.popout {
inline-size: 100px;
inset-inline-end: 20px;
block-size: 100px;
&::before {
content: "";
position: absolute;
inset-block-end: 100%;
inset-inline-start: 50px;
inline-size: 10px;
block-size: 20px;
background: linear-gradient(to bottom, #999, white);
}
}
.overflow-thing {
background: red;
font-size: 9px;
padding: 2px;
color: white;
border-radius: 3px;
width: 3000px;
}
}
aside {
grid-area: aside;
position: relative;
background: #333;
color: white;
overflow-y: clip;
overflow-x: visible;
height: calc(100dvh - 100px);
.popout {
inline-size: 300px;
inset-inline-start: 120px;
inset-block-start: 200px;
&::before {
content: "";
position: absolute;
inset-block-start: 20px;
inset-inline-end: 100%;
inline-size: 20px;
block-size: 10px;
background: linear-gradient(to right, #333, white);
}
}
.overflow-thing {
background: red;
font-size: 9px;
padding: 2px;
color: white;
border-radius: 3px;
height: 3000px;
width: min-content;
}
}
main {
grid-area: main;
background: #555;
}
.popout {
position: relative;
background: white;
color: black;
position: absolute;
padding: 8px;
box-shadow: 0 0 20px lch(0% 0 0 / 0.25);
border-radius: 4px;
}
* {
box-sizing: border-box;
}
This Pen doesn't use any external CSS resources.
This Pen doesn't use any external JavaScript resources.