🐶

vuetify/v-data-tableの列固定

2020/10/03に公開
2

ヘッダーの固定はfixed-headerで簡単に設定できますが、列の固定はどうしましょうか?
答えは、CSS(deep style)より、以下のように簡単に設定できます。

一列目を固定の例:

CSSより選択のために、classをmy-tableにする

<v-data-table
  ...
  class="my-table"
  ...
></v-data-table>

CSSの設定

<style scoped>
// ヘッダ(th)の固定
.my-table >>> th:nth-child(1) {
    position: sticky !important;
    position: -webkit-sticky !important;
    left: 0;
    z-index: 9999;
}

// 行(td)の固定
.my-table >>> tr td:nth-child(1) {
    position: sticky !important;
    position: -webkit-sticky !important;
    left: 0;
    z-index: 9999;
}

</style>

そう!ポイントはstickyです。
leftとz-indexを必要に応じて調整してください。例えば、2列目はleft={一列目の幅}になります。

※ 2023/2/4: 前のバージョン、ヘッダ固定の前提でCSSでdata-table--fixed-headerの利用が分かりにくいため、my-tableに変更しました。

Discussion

tarabazushitarabazushi

vuetifyで列固定に苦戦していたので非常に助かりました。
一つ教えていただきたいのですが2列目も固定したい場合は1列目を固定幅にしておくしか方法はないでしょうか?