Torihaji's Growth Diary

Little by little, no hurry.

パスワード可視化切り替えの作り方

はじめに

新規登録画面でパスワードのinputの左に目のアイコンがあり

ボタンを押したらパスワードが黒丸になって見えなくなったり、文字として見えるようになるという

よくあるUIの作り方です。

実例ではshadcn/uiを使っていますが、生のhtmlでもcssいじれば似たようになると思います。

v0とかに投げれば1発だと思います。

ただ1回作って仕組みを知ることも大事だと思うので。

巷で言われているAI駆動開発は"元々すでにできる人間が使うべし"だと思っている人間です。

どういうものか

結論

  const [isVisible, setIsVisible] = useState(true);

<div className="relative">
  <Input
    id="password"
    value="@peduart"
    className=""
    type={isVisible ? "text" : "password"}
  />
  <Button
    size="icon"
    variant="ghost"
    className="absolute right-1 top-1/2 -translate-y-1/2 rounded-full"
    onClick={() => setIsVisible(!isVisible)}
  >
    {isVisible ? (
      <Eye className="w-5 h-5" />
    ) : (
      <EyeOff className="w-5 h-5" />
    )}
  </Button>
</div>

解説

一番大事なところは大枠を "relative"で囲むところです。

その後に 肝心の切り替えボタンを"absolute"にして位置を調整するといったやり方です。

そこまでの見た目ができればあとはボタンを押したらどうなるかを考えればできます。

そもそもinputで文字になったり、黒丸になるのはなぜかというと

inputタグのtype属性がtextであれば文字に、passwodであれば黒丸になります。

これが分かればボタンを押したらそれらを切り替えられるようにするだけです。

状態の記憶はuseStateで管理しましょう。

そして切り替えるところをbuttonで作成し、onClickで切り替える処理を発火させれば良いだけです。

終わりに

いくつかのUIコンポーネントはこれらがすでに用意されています。

自分の記憶が確かならNextUIは同様のものがすでに用意されていました。

ただなぜNextUIを使わなかったというとcssを設定するときに、shadcnほど柔軟にできなかったからです。