こんにちは!フロントエンドの現場を長年フラフラと……もとい、最前線で走り続けているチーフアーキテクトの私です。
CSSを勉強し始めの頃って、次から次へと出てくる「セレクタ」や「疑似クラス」の呪文みたいな名前に、お腹いっぱいになっちゃいますよね。「`.class`? `#id`? え、なんだこのコロンがついてるやつは!」って、パソコンの画面をそっと閉じたくなる気持ち、ものすごくよく分かります。私も昔は「`hover`だけでご飯3杯いけるわい」と調子に乗っていたら、複雑なフォーム設計で盛大にハマり、冷や汗を流した苦い経験があります。
さて、今回スポットライトを当てるのは `:enabled`(エネイブルド)疑似クラス です。
名前からして「なんだか難しそう……英語だし……」と身構えてしまうかもしれませんが、大丈夫ですよ。ゆっくり、一つずつ紐解いていけば、なんてことありません。あなたの身近にある「あの道具」を思い出せば、一瞬で腑に落ちるはずです。
肩の力を抜いて、コーヒーでも飲みながらリラックスして読んでいってくださいね。
—
1. `:enabled` ってそもそも何? 身近な例えで考えてみよう
いきなり難しいCSSの専門用語を使うのはナシにしましょう。
まずは、私たちの日常生活にある「使える状態のもの」を思い浮かべてみてください。
例えば、街で見かける「自動販売機」を想像してください。
お金を入れていないときのボタンは、なんだか光っていなかったり、押しても何も起きなかったりしますよね。つまり、その時のボタンは「まだ使えない状態(お預け状態)」です。
では、ちゃんと代金を入れたらどうでしょう? ポンっとボタンが明るく光り、「さあ、私を押してジュースを出してくれ!」とばかりに「使える状態」になりますよね。
Webサイトのフォーム(お名前を入力する欄や、送信ボタンなど)も、これとまったく同じなんです。
- 入力できる(使える)状態のとき = `:enabled`
- 入力できない(使えない・ロックされている)状態のとき = `:disabled`
`:enabled` は、まさに「いま、私は元気に動けるよ!操作を受け付けるよ!」とスタンバイしているフォーム要素を、こっそり見つけて優しくなでてあげる(スタイルを適用する)ための合言葉なんです。
—
2. なぜ `:enabled` をわざわざ使うの?
「あれ? 普通に `` にCSSを書けばいいんじゃないの?」って思いませんでしたか?
鋭いですね!その通り、普段は普通のセレクタ(`input { … }` など)を書くだけで、すべての入力欄にスタイルが当たります。
しかし、ここで現場のリアルな落とし穴があります。
Webサイトを作っていると、「今はまだ入力させたくないから、一時的にこのボタンをロック(無効化)しておこう」という場面によく遭遇しますよね。(規約にチェックを入れるまで、送信ボタンが押せないアレです)。
もし、あなたが「すべてのボタンを緑色にしよう!」と思って、うっかり普通にCSSを書いてしまうとどうなるでしょう?
「今は押しちゃダメですよ」とロックされているはずの無効なボタンまで、元気に緑色に光ってしまうという、ユーザーを混乱させる大惨事が起きるのです。
ここで `:enabled` の出番です。
「現在、実際に操作できる有効な要素にだけスタイルを当ててね」と指定してあげることで、無効な要素(`:disabled`な子たち)をうっかりお化粧してしまうのを防げるんです。すごくスマートで優しい気配りですよね。
—
3. 実際にコードを書いてみよう(実用サンプル)
百聞は一見にしかず。実際に手を動かして、その動きを確かめてみましょう。
以下のコードをコピーして、ご自身のHTML/CSSエディタ(CodePenなどでもOKです)にペーストしてみてください。
HTML
CSS
/ 全体のレイアウトを少しだけ整える親切設計 /
body {
font-family: sans-serif;
background-color: #f7f9fa;
color: #333;
padding: 40px;
}
.form-container {
max-width: 400px;
background: #ffffff;
padding: 24px;
border-radius: 8px;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);
}
.field-group {
margin-bottom: 20px;
}
.field-group label {
display: block;
font-size: 14px;
margin-bottom: 6px;
font-weight: bold;
}
/ ==========================================
ここからが本題! :enabled の出番です
========================================== /
/ 1. 「いま使えますよ!」という元気な入力欄のスタイル /
input:enabled {
width: 100%;
padding: 10px 12px;
border: 2px solid #3b82f6; / 頼もしい青色フレーム /
border-radius: 4px;
background-color: #ffffff;
font-size: 16px;
transition: all 0.2s ease; / ふわっと変化させるお洒落テクニック /
}
/ 2. さらにユーザーがカーソルを合わせたときの演出(おまけのhover) /
input:enabled:hover {
border-color: #1d4ed8;
background-color: #f8fafc;
}
/ 3. 「いまは使えません(disabled)」な入力欄のスタイル /
/ 対比として、あえてグレーアウトさせておきます /
input:disabled {
width: 100%;
padding: 10px 12px;
border: 2px solid #e2e8f0; / 薄いグレーの枠 /
border-radius: 4px;
background-color: #f1f5f9; / いかにも「お休み中」な灰色背景 /
color: #94a3b8;
font-size: 16px;
cursor: not-allowed; / カーソルを禁止マークにする /
}
このコードをブラウザで開いてみてください。
上側の「お名前」の入力欄はくっきりとした青い枠線で「いつでもどうぞ!」とアピールし、下側の「ユーザーID」は落ち着いたグレーで「ここは触れないよ」と静かにたたずんでいるはずです。
もしここで `:enabled` を使わずに単なる `input` に対して青い枠線を指定してしまうと、下側の「ユーザーID」まで青く染まってしまい、ユーザーは「あれ?これ入力できるんだっけ?」と混乱してしまいます。それを綺麗に防いであげられるのが、`:enabled` の最大の魅力です。
—
4. つまずきやすいポイントと、チーフからのそっとアドバイス
初学者の頃、私がよくやってしまった「うっかりミス」をシェアしますね。もし同じところで躓きそうになったら、「あ、あの記事で言ってたやつだ!」と思い出してください。
Q. 「えっと、特に `:enabled` を書かなくても普通に入力欄にスタイルが当たる気がするんだけど……?」
A. その感覚、大正解です!
実は、何もしなくてもWebブラウザはデフォルトで入力可能な要素を「入力可能」として扱っています。そのため、普段のコーディングでは `input:enabled` と書く機会はそこまで多くありません。
じゃあ、いつ使うのか?
それは今回のように、「有効な状態のときと、無効な(disabledな)状態のときで、デザインの見た目をパキッと明確に切り替えたいとき」です。
「有効なとき専用の特別な演出(フォーカス時のエフェクトなど)を安全にかけたい!」という時に、この `:enabled` が最強の相棒になってくれます。
—
最後に:CSSは、画面の向こうの「人間」への思いやり
ここまで読んでいただき、本当にありがとうございます!
`:enabled` 疑似クラスについて、少しでも「なんだ、怖くないじゃん」「案外シンプルだな」と感じてもらえたら、チーフとしてこれほど嬉しいことはありません。
CSSの技術やプロパティの数々は、ただ画面をキレイに彩るためのものだけではありません。
「今、このボタンは押せるよ」「ここはまだ触っちゃダメだよ」という情報を、画面の向こうにいるユーザーに優しく、直感的に伝えるための「思いやりの翻訳機」なんです。
最初は覚えることが多くて途方に暮れるかもしれませんが、焦る必要は全くありません。一歩ずつ、今日知った引き出しを自分のものにしていけば、気づいたときには自由自在にデザインを操れるようになっていますよ。
あなたの前端(フロントエンド)の旅が、ワクワクする楽しいものでありますように。
それでは、また別の現場の知見でお会いしましょう!

コメント