みやざダニエルズのIT備忘録
← Blogs 一覧に戻る

【Vuetify】v-cardの中にv-cardを入れたときに意図したmarginにならなかったのでdivでレイアウト調整した話

日向美術館とVuetify

こんにちは。みやです。

日向美術館ではVuetityを利用してUIを作成しています。

“Vuetifyは美しく整えられたマテリアルコンポーネントを提供するVue UIライブラリです。 デザインスキルは必要ありません。素晴らしいアプリケーションを作成するために必要な全てが揃っています。“と公式サイトに書いてある通り、整ったレイアウトでアプリケーションやウェブサイトを作ってくれます。

日向美術館ではCardコンポーネントを使って作品一つを表示しています。作品のキャプションもCardコンポーネントを使って表示していて、Cardコンポーネントを入れ子にしていたところ、marginのレイアウトが崩れた?のでdivで調整しました。

環境

  • vue: 2.6.14
  • vuetify: 2.6.0

v-card in v-cardでのmarginのレイアウト崩れ

キャプションの下側のマージンが効いてないように見えてしまいました。実際にはマージンは確かに存在するのですが、親のv-cardの外側に存在してしまいました。なんででしょう。

vcard in vcard div入れる前

Card部分のソースコードは以下の通りです。

  <v-card>
    <v-img :src="url"></v-img>
    <v-card v-if="work.caption" class="ma-3 pa-2 caption"> // ma-3でマージンを指定
      <div v-if="work.title" class="mb-2">
        <p v-if="work.title" class="title">{{ work.title }}</p>
        <p v-if="work.englishTitle" class="english-title">
          {{ work.englishTitle }}
        </p>
      </div>
      <v-spacer></v-spacer>
      <p v-if="creator" class="creator">{{ creator }}</p>
      <p v-if="work.materials" class="materials">{{ work.materials[0] }}</p>
      <p v-if="work.size" class="size">{{ work.size }}</p>
      <p v-if="work.comment" class="comment">{{ work.comment }}</p>
    </v-card>
  </v-card>

v-card in v-cardでのdiv要素追加によるmarginのレイアウト崩れ解消

v-cardのマージンを下側だけ少し減らして、その分の幅をdiv要素に持たせたら見た目的には意図したようになりました。

vcard in vcard div入れた後

Card部分のソースコードは以下の通りです。

  <v-card>
    <v-img :src="url"></v-img>
    <v-card v-if="work.caption" class="mt-3 mx-3 mb-2 pa-2 caption"> // mt-3, mx-3で上と左右にマージンを指定してmb-2で下のマージンを指定
      <div v-if="work.title" class="mb-2">
        <p v-if="work.title" class="title">{{ work.title }}</p>
        <p v-if="work.englishTitle" class="english-title">
          {{ work.englishTitle }}
        </p>
      </div>
      <v-spacer></v-spacer>
      <p v-if="creator" class="creator">{{ creator }}</p>
      <p v-if="work.materials" class="materials">{{ work.materials[0] }}</p>
      <p v-if="work.size" class="size">{{ work.size }}</p>
      <p v-if="work.comment" class="comment">{{ work.comment }}</p>
    </v-card>
    <div role="spacer" v-if="work.caption" class="pb-1"></div> // pb-で下のパディングを指定
  </v-card>

なぜv-card in v-cardでmarginが意図しないようになるのか、原因が分かればよかったのですがそこまでたどり着かなかったです。 暫定的ではありますがレイアウトを整えたかっただけなので、divでレイアウトが解消できたのでそれでよしとしました。

誰か解決策をご存じの方がいたら教えていただければ幸いです。

関連記事

AstroにGoogleアナリティクス4を導入する

Googleアナリティクス4の導入(再)

動かなくなったので再度AstroにGoogleアナリティクス4を入れてみました。

日向美術館とmicroCMS

【microCMS】日向美術館で使用しているAPIスキーマ設定方法

日向美術館で作成したmicroCMSのAPIスキーマの設定方法と設定した内容をご紹介します。

microCMSとVue.jsで子供の作品を展示する

microCMSとVue.jsで子供の作品を展示する

子供の作品を箱にしまい込むだけにせずにウェブに載せてみました。Headless CMSであるmicroCMSを使ってみたら使いやすかったです。

Webで縦書きコンテンツ〜Safariには気を付けろ!〜に助けられた話

Webで縦書きコンテンツ〜Safariには気を付けろ!〜に助けられた話

縦書き文字をflexboxを使って並べたときのレイアウト崩れが直りました。

OpenBD coverage

OpenBDに登録されているISBNの数の調査をしてみた

本の情報をオープンにしてくれているOpenBDのAPIを使ってISBNの登録数を見てみました

Lighthouseのユーザー補助を100点にする

Lighthouseのユーザー補助を100点にしたい

Lighthouseのユーザー補助を100点にするためにコントラストの警告を解消しました

世界の片隅で愛を叫ぶLINE Bot

世界の片隅で愛を叫ぶLINE Bot

AWS Lambda、API Gatewayを使ってLINE Botで愛を伝えてみました

Google Apps Scriptで勤怠管理システム風なものを作る

Google Apps Scriptで勤怠管理システム風なものを作る

Google Apps Scriptで勤怠管理システム風なものを作ってみました。

canvaでアイキャッチ画像を作る

canvaでアイキャッチ画像を作る

canvaを使ってアイキャッチ画像を作ることができます。

AstroにGoogleアナリティクス4を導入する

Googleアナリティクス4の導入

AstroにGoogleアナリティクス4を入れてみました。

Astroでブログを作る

VuePressからAstroにブログを変えてみた

VuePressからAstroにブログを移管してみました。

miyazadanielsの似顔絵

似顔絵メーカーさんで似顔絵を作ってみた

似顔絵メーカーさんで似顔絵を作ってみました。簡単な操作でできるのでおすすめ。