In Material UI Table I have a table applied sticky property, which works fine.
On top of the table, but inside the TableContainer I have a button wrapped in Box, which should also be sticky alongside with the table head.
I tried this approach with flex, but didn't work for me.
.wrapper {
display: flex;
flex - direction: column;
overflow: hidden;
}
.scrollable - child {
overflow - y: auto;
}
Also tried to apply position: relative to parent and position: sticky to child without success.
Any help will be appreciated.
Here is the Sandbox link and code below
import * as React from "react";
import Table from "@mui/material/Table";
import TableBody from "@mui/material/TableBody";
import TableCell from "@mui/material/TableCell";
import TableContainer from "@mui/material/TableContainer";
import TableHead from "@mui/material/TableHead";
import TableRow from "@mui/material/TableRow";
import Paper from "@mui/material/Paper";
import { Box, Button } from "@mui/material";
function createData(
name: string,
calories: number,
fat: number,
carbs: number,
protein: number
) {
return { name, calories, fat, carbs, protein };
}
const rows = [
createData("Frozen yoghurt", 159, 6.0, 24, 4.0),
createData("Ice cream sandwich", 237, 9.0, 37, 4.3),
createData("Eclair", 262, 16.0, 24, 6.0),
createData("Cupcake", 305, 3.7, 67, 4.3),
createData("Gingerbread", 356, 16.0, 49, 3.9),
createData("Gingerbread", 356, 16.0, 49, 3.9),
createData("Gingerbread", 356, 16.0, 49, 3.9),
createData("Gingerbread", 356, 16.0, 49, 3.9),
createData("Gingerbread", 356, 16.0, 49, 3.9),
createData("Gingerbread", 356, 16.0, 49, 3.9),
createData("Gingerbread", 356, 16.0, 49, 3.9),
createData("Gingerbread", 356, 16.0, 49, 3.9),
createData("Gingerbread", 356, 16.0, 49, 3.9),
createData("Gingerbread", 356, 16.0, 49, 3.9),
createData("Gingerbread", 356, 16.0, 49, 3.9),
createData("Gingerbread", 356, 16.0, 49, 3.9),
createData("Gingerbread", 356, 16.0, 49, 3.9)
];
export default function BasicTable() {
return (
<TableContainer
component={Paper}
sx={{
maxHeight: "400px",
minHeight: "400px",
position: "relative"
}}
>
<Box sx={{ position: "sticky" }}> //this doesn't work
<Button>click</Button>
</Box>
<Table sx={{ minWidth: 650 }} aria-label="simple table" stickyHeader>
<TableHead>
<TableRow>
<TableCell>Dessert (100g serving)</TableCell>
<TableCell align="right">Calories</TableCell>
<TableCell align="right">Fat (g)</TableCell>
<TableCell align="right">Carbs (g)</TableCell>
<TableCell align="right">Protein (g)</TableCell>
</TableRow>
</TableHead>
<TableBody>
{rows.map((row) => (
<TableRow
key={row.name}
sx={{ "&:last-child td, &:last-child th": { border: 0 } }}
>
<TableCell component="th" scope="row">
{row.name}
</TableCell>
<TableCell align="right">{row.calories}</TableCell>
<TableCell align="right">{row.fat}</TableCell>
<TableCell align="right">{row.carbs}</TableCell>
<TableCell align="right">{row.protein}</TableCell>
</TableRow>
))}
</TableBody>
</Table>
</TableContainer>
);
}