Why doesn't sticky work with column-reverse

It’s related to this PR:

I can’t make it work with flex-direction: column-reverse :frowning:

<!DOCTYPE html>
<html>

<head>
    <style>
        .container {
            display: flex;
            width: 300px;
            height: 200px;
            overflow-y: scroll;
            position: relative;
            flex-direction: column; /* Add this line */
            /* Add this line */
        }

        .arrow {
            position: sticky;
            top: 0;
            /* For icon */
            cursor: pointer;
            font-size: 18px;
            border-radius: 50%;
            background-color: rgba(0, 0, 0, 0.25);
            color: white;
            width: 36px;
            height: 36px;
            display: flex;
            align-self: flex-start; /* <-- this is the fix */
            align-items: center;
            justify-content: center;
            z-index: 1;
            /* For animation */
            opacity: 100;
            transition: visibility 0s, opacity 0.2s ease-in-out;
        }
    </style>
</head>

<body>
    <div class="container">
        <div class="arrow" id="stickyArrow">&#8593;</div>
        <div class="flex-box">
            <!-- Generate numbers from 1 to 100 dynamically -->
            <div class="number">1</div>
            <div class="number">2</div>
            <div class="number">3</div>
            <div class="number">4</div>
            <div class="number">1</div>
            <div class="number">2</div>
            <div class="number">3</div>
            <div class="number">4</div>
            <div class="number">1</div>
            <div class="number">3</div>
            <div class="number">4</div>
            <div class="number">1</div>
            <div class="number">3</div>
            <div class="number">4</div>
            <div class="number">1</div>
            <div class="number">3</div>
            <div class="number">4</div>
            <div class="number">1</div>
            <div class="number">3</div>
            <div class="number">4</div>
            <div class="number">1</div>
        </div>
    </div>
</body>

</html>

Wrapping another container works:

<!DOCTYPE html>
<html>

<head>
    <style>
        .container-wrapper {
            position: relative;
        }

        .container {
            display: flex;
            width: 300px;
            height: 100px;
            overflow-y: scroll;
            position: relative;
            flex-direction: column-reverse;
        }

        .arrow {
            position: relative;
            top: -36px;
            align-self: flex-end;
            /* For icon */
            cursor: pointer;
            font-size: 18px;
            border-radius: 50%;
            background-color: rgba(0, 0, 0, 0.25);
            color: red;
            width: 36px;
            height: 36px;
            display: flex;
            align-items: center;
            justify-content: center;
            z-index: 2;
            /* For animation */
            opacity: 100;
            transition: visibility 0s, opacity 0.2s ease-in-out;
        }
    </style>
</head>

<body>
    <div class="container-wrapper">
        <div class="container">
            <div class="number">1</div>
            <div class="number">2</div>
            <div class="number">3</div>
            <div class="number">4</div>
            <div class="number">1</div>
            <div class="number">2</div>
            <div class="number">1</div>
        </div>
        <div class="arrow" id="stickyArrow">&#8593;</div>
    </div>
</body>

</html>
1 Like