Open1
Next.jsとTailwind CSSで画像に文字を重ねる
目的
以下のような画像に文字を重ねて、文字周りを暗くしたい。
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
で透明から黒色へグラデーションさせている。
サンプル
課題
rounded-2xl
を画像と暗くする部分の両方に当てる必要があるので、もう少し良いやり方を検討したい。