Open1

Next.jsとTailwind CSSで画像に文字を重ねる

takeyu1013takeyu1013

目的

以下のような画像に文字を重ねて、文字周りを暗くしたい。

Create Next App

yarn create next-app --experimental-app

Tailwind CSSをリセット

/app/globals.css
@tailwind base;
@tailwind components;
@tailwind utilities;

Next.jsで画像の外部URLを設定

/next.config.js
/** @type {import('next').NextConfig} */
const nextConfig = {
  images: {
    remotePatterns: [
      {
        protocol: "https",
        hostname: "placekitten.com",
      },
    ],
  },
};

module.exports = nextConfig;

今回はhttps://placekitten.com/の画像を拝借した。

実装例

/app/page.tsx
import Image from "next/image";

export default function Home() {
  return (
    <main className="flex p-2">
      <div className="relative">
        <Image
          alt="image"
          src="https://placekitten.com/200/250"
          width={200}
          height={250}
          className="rounded-2xl"
        />
        <div className="absolute inset-x-0 bottom-0 h-1/3 bg-gradient-to-b from-transparent to-black rounded-b-2xl">
          <p className="text-white absolute left-4 bottom-2">Cat</p>
        </div>
      </div>
    </main>
  );
}

ポイントは、Imageコンポーネントの親要素でposition: relativeを設定し、暗くする部分をposition: absoluteで位置を画像の下(bottom)に合わせる点。徐々に暗くするため、bg-gradient-to-b from-transparent to-blackで透明から黒色へグラデーションさせている。

サンプル

https://codesandbox.io/p/sandbox/loving-mopsa-qofvrh

課題

rounded-2xlを画像と暗くする部分の両方に当てる必要があるので、もう少し良いやり方を検討したい。