2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

VueAdvent Calendar 2022

Day 9

CSS Grid Layoutでのスキマをいい感じに埋める(Vueでの場合)

Last updated at Posted at 2022-12-08

WebエンジニアにとってCSS Grid Layoutを使用する機会は増えてきているのではないでしょうか。
縦横の2次元に対して自由にレイアウトを組むことができるので非常に便利です。

そしてCSS Grid Layoutを使う中で、下の画像のように「ある領域に同じ要素を複数並べていったときに、領域の最後にスキマができてしまうので、このスキマをいい感じに埋めたい」
というケースに遭遇したことはないでしょうか。

image.png

正直なところ、遭遇したことがある人、これから遭遇する人は多くないと思いますが、これを実現するためのライブラリを以前作ったので、これのVueアプリケーション上での使い方を紹介させていただきたいと思います。

ライブラリはこちらです。Grid Spacer

使うと次のようになんとなくいい感じにスキマが埋まります。

Grid_Spacer.gif

使い方

ますはインストールしてください。

> npm i grid-spacer

Vueでの使い方は、以下のようになります。

<script setup lang="ts">
import { onMounted } from 'vue'
import { useGridSpacer } from 'grid-spacer'

const { execute } = useGridSpacer({
  containerClass: 'container',
  spacerClass: 'box',
  spacerTag: 'div',
  type: 'fill'
})

onMounted(() => execute())
</script>

<template>
  <div class="container">
    <div class="box" v-for="i in 13" :key="i">
      <div class="content" />
    </div>
  </div>
</template>

<style scoped>
.container {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(100px, 1fr));
  gap: 4px;
  width: 90%;
  margin: 48px auto;
}

:deep(.box) {
  background-color: gray;
  width: 100%;
  height: 100px;
}
</style>

useGridSpacer から返される execute 関数を onMounted フックで実行するだけです。
scoped styleを使う場合は、要素のクラスに対して :deepセレクタを使用してください。

そして、 useGridSpacer に渡すオプションは次のような感じです。

  • containerClass ... 要素が並ぶ領域のクラス名。
  • spacerClass ... スキマを埋める要素のクラス名。
  • spacerTag ... スキマを埋める要素のタグ名。
  • type ... スキマを埋める形式。fillだと1つの要素で、fitだと複数要素で埋める。
     

fit type を使った場合は下のようになります。
Grid_Spacer_fit.gif

まとめ

もしこんなことがしたいケースに遭遇したら、使ってみてもらえればなと思います。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?