Не работает sticky шапки таблицы, что нужно сделать?

Не работает sticky шапки таблицы, что нужно сделать?

overflow: hidden необходим для сокрытия невлезающего контента таблицы, без него работает sticky работает. Как сделать так чтоб sticky работал вместе со свойством overflow: hidden контейнера? (возможно есть другие варианты скрыть то что не влезает в контейнер).

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>CSS Grid Table</title>
    <style>
        body {
            margin: 0;
            padding: 0;
            font-family: Arial, sans-serif;
        }

        .table-container {
            width: 100%;
            max-width: 250px;
            margin: 0 auto;
            overflow: hidden;
        }

        .table {
            display: grid;
            grid-template-columns: repeat(3, minmax(100px, 100%));
            width: 100%;
            border-collapse: collapse;
        }

        .header {
            display: contents;
        }

        .header div {
            background-color: #f1f1f1;
            font-weight: bold;
            text-align: left;
            padding: 10px;
            position: sticky;
            top: 0;
            z-index: 1;
            border: 1px solid #ddd;
        }

        .row {
            display: contents;
        }

        .row div {
            padding: 10px;
            height: 400px;
            border: 1px solid #ddd;
        }
    </style>
</head>
<body>
<div class="table-container">
    <div class="table">
        <div class="header">
            <div>Header 1</div>
            <div>Header 2</div>
            <div>Header 3</div>
        </div>
        <div class="row">
            <div>Row 1, Cell 1</div>
            <div>Row 1, Cell 2</div>
        </div>
        <div class="row">
            <div>Row 2, Cell 1</div>
            <div>Row 2, Cell 2</div>
        </div>
        <div class="row">
            <div>Row 3, Cell 1</div>
            <div>Row 3, Cell 2</div>
        </div>
    </div>
</div>
</body>
</html>


Ответы (2 шт):

Автор решения: LureRed

overflow:hidden; замените на contain:paint; overflow не панацея)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>CSS Grid Table</title>
    <style>
        body {
            margin: 0;
            padding: 0;
            font-family: Arial, sans-serif;
        }

        .table-container {
            width: 100%;
            max-width: 250px;
            margin: 0 auto;
            overflow: hidden;/*убираем*/
            contain:paint;/*добавляем*/
        }

        .table {
            display: grid;
            grid-template-columns: repeat(3, minmax(100px, 100%));
            width: 100%;
            border-collapse: collapse;
        }

        .header {
            display: contents;
        }

        .header div {
            background-color: #f1f1f1;
            font-weight: bold;
            text-align: left;
            padding: 10px;
            position: sticky;
            top: 0;
            z-index: 1;
            border: 1px solid #ddd;
        }

        .row {
            display: contents;
        }

        .row div {
            padding: 10px;
            height: 400px;
            border: 1px solid #ddd;
        }
    </style>
</head>
<body>
<div class="table-container">
    <div class="table">
        <div class="header">
            <div>Header 1</div>
            <div>Header 2</div>
            <div>Header 3</div>
        </div>
        <div class="row">
            <div>Row 1, Cell 1</div>
            <div>Row 1, Cell 2</div>
        </div>
        <div class="row">
            <div>Row 2, Cell 1</div>
            <div>Row 2, Cell 2</div>
        </div>
        <div class="row">
            <div>Row 3, Cell 1</div>
            <div>Row 3, Cell 2</div>
        </div>
    </div>
</div>
</body>
</html>

→ Ссылка
Автор решения: LureRed

        body {
            margin: 0;
            padding: 0;
            font-family: Arial, sans-serif;
        }

        .table-container {
            width: 100%;
            max-width: 250px;
            margin: 0 auto;
            /*overflow:hidden;*/
            contain:paint;/*добавляем*/
        }

        .table {
            display: grid;
            grid-template-columns: repeat(3, minmax(100px, 100%));
            width: 100%;
            border-collapse: collapse;
        }

        .header {
            display: contents;
        }

        .header div {
            background-color: #f1f1f1;
            font-weight: bold;
            text-align: left;
            padding: 10px;
            position: sticky;
            top: 0;
            z-index: 1;
            border: 1px solid #ddd;
        }

        .row {
            display: contents;
        }

        .row div {
            padding: 10px;
            height: 400px;
            border: 1px solid #ddd;
        }
<div class="table-container">
    <div class="table">
        <div class="header">
            <div>Header 1</div>
            <div>Header 2</div>
            <div>Header 3</div>
        </div>
        <div class="row">
            <div>Row 1, Cell 1</div>
            <div>Row 1, Cell 2</div>
        </div>
        <div class="row">
            <div>Row 2, Cell 1</div>
            <div>Row 2, Cell 2</div>
        </div>
        <div class="row">
            <div>Row 3, Cell 1</div>
            <div>Row 3, Cell 2</div>
        </div>
    </div>
</div>

→ Ссылка