Files
ladybird/Tests/LibWeb/Ref/reference/position-sticky-should-stay-within-containing-block-ref.html
Aliaksandr Kalenik 30b636e90b LibWeb: Add "position: sticky" support
Sticky positioning is implemented by modifying the algorithm for
assigning and refreshing scroll frames. Now, elements with
"position: sticky" are assigned their own scroll frame, and their
position is refreshed independently from regular scroll boxes.
Refreshing the scroll offsets for sticky boxes does not require display
list invalidation.

A separate hash map is used for the scroll frames of sticky boxes. This
is necessary because a single paintable box can have two scroll frames
if it 1) has "position: sticky" and 2) contains scrollable overflow.
2024-08-30 19:03:06 +02:00

52 lines
1.4 KiB
HTML

<!DOCTYPE html>
<style>
.scrollable-container {
width: 300px;
height: 300px;
overflow-y: scroll;
border: 5px solid red;
position: relative;
}
.sticky-box {
width: 240px;
height: 80px;
background: #3498db;
color: white;
}
.box {
height: 500px;
background-color: orange;
}
</style>
<div class="scrollable-container" id="sticky-is-below-scrollport">
<div class="box"></div>
<div class="sticky-box">I stick within this scrollable box!</div>
<div class="box"></div>
</div>
<div class="scrollable-container" id="sticky-is-inside-scrollport">
<div class="box"></div>
<div class="sticky-box">I stick within this scrollable box!</div>
<div class="box"></div>
</div>
<div class="scrollable-container" id="sticky-is-above-scrollport">
<div class="box"></div>
<div class="sticky-box">I stick within this scrollable box!</div>
<div class="box"></div>
</div>
<script>
const stickyIsBelowScrollport = document.getElementById("sticky-is-below-scrollport");
stickyIsBelowScrollport.scrollTop = 0;
const stickyIsInsideScrollport = document.getElementById("sticky-is-inside-scrollport");
stickyIsInsideScrollport.scrollTop = 390;
const stickyIsAboveScrollport = document.getElementById("sticky-is-above-scrollport");
stickyIsAboveScrollport.scrollTop = 780;
</script>