🧸

【Nuxt】 Nuxt Image で画像リンクを作る Tips

2024/07/31に公開

はじめに

Next.js が提供する画像コンポーネントとして next/image があるかと思います。

実は Nuxt にも Nuxt Image という公式モジュールが存在しています。

この Nuxt Image で画像リンクを作成したいなと思って公式ドキュメントを探したのですが記述は特になかったです。
なので、実際に実験してみました。

Nuxt Image モジュール

https://image.nuxt.com/

Nuxt2 版はこちらです。Nuxt2 時代からモジュール自体は存在していました。

https://v0.image.nuxtjs.org/

画像リンクとは

よく利用するケースが多い画像リンク。改めて MDN の説明を見てみます。

https://developer.mozilla.org/ja/docs/Web/HTML/Element/img#画像リンク

MDN の例を以下に引用します。a タグで img タグを囲めば良さそうですね。

<a href="https://developer.mozilla.org">
  <img src="favicon144.png" alt="MDN サイトにおいでください" />
</a>

では、これを Nuxt Image で実装したい場合はどうするのか。色々実験してみます。

まずは NuxtLink を利用してみます。こちらは問題なくいけました。

<template>
  <NuxtLink to="/">
    <NuxtImg
      src="https://picsum.photos/600/800?random=1"
      alt="Random image"
      draggable="false"
    />
  </NuxtLink>
</template>

⭕ いけた: a タグで挟む場合

a タグの場合はどうでしょうか。こちらの場合も特に問題なさそうです。

<template>
  <a href="/">
    <NuxtImg
      src="https://picsum.photos/300/400?random=3"
      alt="Random image"
      draggable="false"
    />
  </a>
</template>

NuxtLink のドキュメントを見てみます。すると以下のような記述がありました。

<NuxtLink> is a drop-in replacement for both Vue Router's <RouterLink> component and HTML's <a> tag. It intelligently determines whether the link is internal or external and renders it accordingly with available optimizations (prefetching, default attributes, etc.)

https://nuxt.com/docs/api/components/nuxt-link

なるほど、NuxtLink 自体が Vue Router としての振る舞いと a タグとしての振る舞いを両方持っていることが分かります。

両方並べてみてブラウザ表示を比較する

試しに以下のように 2 つ並べて Elements を比較してみます (スタイルは任意)。

<template>
  <div class="flex space-x-8">
    <div class="space-y-8">
      <NuxtLink to="/">
        <NuxtImg
          src="https://picsum.photos/300/400?random=3"
          alt="Random image"
          draggable="false"
        />
      </NuxtLink>
      <p>NuxtLinkを利用したケース</p>
    </div>
    <div class="space-y-8">
      <a href="/">
        <NuxtImg
          src="https://picsum.photos/300/400?random=3"
          alt="Random image"
          draggable="false"
        />
      </a>
      <p>aタグを利用したケース</p>
    </div>
  </div>
</template>

a タグを利用した場合はhref="/"だけが設定されていますが NuxtLink の場合はaria-currnetrouter-link関連のクラウスが追加されていました。

HTMLの表示を比較する

ちなみに、表示は以下のようになりました。

NuxtLinkとaタグ利用の画像を並べてみた画像

https://zenn.dev/kspace_trk/articles/e775fa87f3cfb7

https://zenn.dev/jackmiwamiwa/articles/nuxt3-use-is-nuxtlink

おわりに

今回は Nuxt Image モジュールを利用して 画像リンク を作成してみました。
画像リンクを作成するケースはよくあるかと思いますが意外と調べても出てこなかったので Tips 的にまとめました。

NuxtLink、Nuxt Image について記事はあまり多くないのでつまづく度に色々 Tips として残せたらいいなと思います。

Vue・Nuxt 情報が集まる広場 / Plaza for Vue・Nuxt.

Discussion