Не работает 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>