DailyUI#001 Next.jsのImageコンポーネントで画面いっぱいに画像表示。MUIコンポーネントのカスタマイズ。イラスト背景にモーダルライクな入力欄が素敵なデザインをトリビュート

こんにちは。ハコラトリ管理人のはこだてたろうです。
ハコラトリでは、React初心者向けの技術記事「プロプラ!」シリーズを不定期で連載していましたが、この度色々と思うところがあり、連載を一時停止させていただきますm(_ _)m

目次

DailyUIチャレンジ、はじめます

ではこれから何を投稿していくのかといいますと、デザイン界隈でよく耳にする DailyUI にチャレンジしようと思います。
とは言っても、デザイナーに転身するというわけではなく、デザイン力アップが目的でもありません。
私はReactエンジニアなので、開発の手札を増やすことが目的です。
なので自身で一からデザインを起こすことはせず、XDribbbleで投稿されている先輩たちの作品をトリビュートする形で進めていこうと思います。

もちろん、これから投稿していくUIを「自分のデザインだ!」と主張することはありませんし、トリビュートするデザインのURLは必ず記載します。

#001 Sign up

1日目のお題は Sign up でした。
Xで投稿された以下のデザインをトリビュートさせていただきました。

画面いっぱいのイラスト画像の上にモーダルライクな入力フォームを置くスタイルがイケてるなと思いました!

作成した画面

以下の画面を Next.js で作成しました。

2024年4月に実装したので、春のテイストにしてみました。
今年は桜の開花がいつもよりも遅く、上野公園では2日前からの場所取りも虚しく「枝見」になってしまった、なんてニュースもありましたね。
私も埼玉の桜の名所である幸手に行く予定を立てていましたが、枝見になりそうだったので今年はやむなく見送りとなりました。
今年の桜は日本橋で堪能してきました。

実装のポイント

実装のポイントとしては2つです。

  • 画像を画面いっぱいに表示する
  • MUIのコンポーネントをカスタマイズする

それぞれのポイントについて、以下で解説します。

画像を背景として画面いっぱいに表示する

該当箇所のコードを記載します。

export default function SignUp() {
  return (
    <main>
      <div className="fixed top-0 left-0 w-full h-screen z-[-1]">
        <Image
          src="/static/images/01_background.jpg"
          alt="背景"
          fill
        />
      </div>

・・・

ポイントとなるのは4行目と8行目の指定です。

4行目は TailwindCSS の指定になりますが、position を fixed にして、top と left にそれぞれ 0 を指定しています。
あとは width, height をそれぞれ画面いっぱいに広げることで画像を表示する領域を確保しています。

8行目は Next.js 組み込みの Imageコンポーネントの設定で、fill を指定することで画像を親要素いっぱいに表示することができます。
Imageコンポーネントは画像をいい感じに最適化してくれるので、ぜひ使っていきたいですね!

MUIのコンポーネントをカスタマイズする

該当箇所のコードを記載します。

const CssTextField = styled(TextField)({
  '& label.Mui-focused': {
    color: '#A0AAB4',
  },
  '& .MuiInput-underline:after': {
    borderBottomColor: '#B2BAC2',
  },
  '& .MuiOutlinedInput-root': {
    '&:hover fieldset': {
      borderColor: "rgb(237,189,165)",
    },
    '&.Mui-focused fieldset': {
      borderColor: "rgb(237,189,165)",
    },
  },
});

export default function SignUp() {
  return (
    <main>

・・・略・・・

          <Typography
            variant="h6"
            sx={{
              ...textStyle,
              marginTop: "2rem",
              color: "dimgray"
            }}
          >
            Email
          </Typography>
          <CssTextField
            fullWidth
            size="small"
            placeholder="spring@sunset.com"
          />

CssTextField は MUI の TextFieldコンポーネントをカスタマイズしています。
カスタマイズ方法も、MUI で紹介されている方法をほぼそのまま利用しています。

MUI の styledユーティリティを使用して TextFieldコンポーネントをカスタマイズしている形になりますが、主に入力欄にマウスがホバーしたとき、入力欄にフォーカスされたとき、それぞれの枠線の色を変更しています。

特筆する点としては、ホバーの指定をする際の記述の仕方でしょう。

    '&:hover fieldset': {
      borderColor: "rgb(237,189,165)",
    },

&:hover は Sass の記法で、疑似クラスを指定するためのものですが、ここで使われている &: は JavaScript では特別な意味を持つため、JSON のキーとしてはそのまま使うことはできません。

    &:hover fieldset: {  // NG!!
      borderColor: "rgb(237,189,165)",
    },

これらの文字は、上記のようにシングルクォーテーションで括ることで使うことができるようになります。

おわりに

今回実装したコードは以下のレポジトリで公開しています。

GitHub
GitHub - hakoratory/daily-ui Contribute to hakoratory/daily-ui development by creating an account on GitHub.

このコードを作成するのに、およそ2時間かかりました。
初日ということもありますが、もうすこしスピーディに実装したいなと思います。
コードの質としても、まだまだ改善の余地はありそうですね。
今後も精進していきたいと思います。

ご覧いただき、ありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

28歳のときに音楽家からエンジニアに転向。
WEB系のシステム開発(Java, C#, Vue, React など)に携わっています。

自分らしく力を発揮できて、自信を持って生きられる人を増やすための活動をしています。

コメント

コメントする

目次