Le Vuetify's v-data-table
component a un fixed-header
, qui rend l'en-tête collant lorsque le height
est inférieur à la hauteur de la table.
Cela fonctionne lorsque height
est défini explicitement.
HTML:
<v-content id="mycontent">
<v-container fluid id="mycontainer">
<h2>Header</h2>
<div id="outer">
<v-data-table id="mytable" :headers="headers" :items="items" :height="height"
fixed-header disable-pagination disable-sort hide-default-footer>
</v-data-table>
</div>
</v-container>
</v-content>
CSS:
#mycontent {
}
#mycontainer {
position: relative;
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
overflow: hidden;
}
#outer {
flex: 1;
}
#mytable {
}
#mytable table {
width: auto;
}
JS:
data: () => ({
headers: [
{ text: "Header A", value: "a" },
{ text: "Header B, longer", value: "b" },
{ text: "Header C", value: "c" }
],
height: 100
}),
computed: {
items() {
var items = [];
for (var i = 1; i <= 50; i++) {
items.Push({ a: "Row " + i, b: "Column B", c: "Column C" });
}
return items;
}
},
methods: {
onResize() {
this.height = document.getElementById("outer").clientHeight;
}
},
mounted() {
window.addEventListener("resize", this.onResize);
this.$nextTick(this.onResize);
}
Mais est-il possible d'obtenir le même effet avec du CSS pur, ou du moins sans définir explicitement height
?
Essayez d'utiliser height clac
.v-data-table__wrapper{height:calc(100vh - 150px) !important;}
Vérifiez le codepen
Si vous ne voulez pas que votre table prenne toujours une taille fixe dans une page, vous devez définir max-height et supprimer l'attribut height de v-data-table.
#mytable .v-data-table__wrapper {
max-height: 300px;
}