mirror of
https://github.com/fergalmoran/ladybird.git
synced 2025-12-22 09:19:03 +00:00
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.
57 lines
1.3 KiB
HTML
57 lines
1.3 KiB
HTML
<!DOCTYPE html>
|
|
<link rel="match" href="reference/position-sticky-left-ref.html" />
|
|
<style>
|
|
* {
|
|
scrollbar-width: none;
|
|
}
|
|
|
|
.scroll-container {
|
|
width: 500px;
|
|
overflow-x: scroll;
|
|
white-space: nowrap;
|
|
background-color: #f0f0f0;
|
|
display: grid;
|
|
grid-template-columns: 1000px 300px 1000px;
|
|
border: 5px solid yellowgreen;
|
|
}
|
|
|
|
.section {
|
|
height: 200px;
|
|
background-color: orangered;
|
|
}
|
|
|
|
.sticky-element {
|
|
position: sticky;
|
|
left: 0;
|
|
background-color: blueviolet;
|
|
height: 200px;
|
|
line-height: 200px;
|
|
color: white;
|
|
}
|
|
</style>
|
|
<div class="scroll-container" id="a">
|
|
<div class="section"></div>
|
|
<div class="sticky-element"></div>
|
|
<div class="section"></div>
|
|
</div>
|
|
<div class="scroll-container" id="b">
|
|
<div class="section"></div>
|
|
<div class="sticky-element"></div>
|
|
<div class="section"></div>
|
|
</div>
|
|
<div class="scroll-container" id="c">
|
|
<div class="section"></div>
|
|
<div class="sticky-element"></div>
|
|
<div class="section"></div>
|
|
</div>
|
|
<script>
|
|
const a = document.getElementById("a");
|
|
a.scrollLeft = 0;
|
|
|
|
const b = document.getElementById("b");
|
|
b.scrollLeft = 900;
|
|
|
|
const c = document.getElementById("c");
|
|
c.scrollLeft = 1400;
|
|
</script>
|