こんにちは!フロントエンドの現場を長年フラフラと……いや、支えてきたチーフアーキテクトの私です。
CSSを書き始めた頃って、セレクタの多さにめまいがしませんか?「クラス?ID?子孫セレクタ?」と覚えるだけでもお腹いっぱいなのに、さらに「擬似クラス(偽物のクラス?)」なんて名前が出てくると、思わずブラウザをそっと閉じたくなる気持ち、痛いほどよく分かります。
でも、大丈夫ですよ。一つひとつ、身近な例えと一緒に紐解いていけば、CSSはあなたの最高の味方になってくれます。
今回は、そんな数ある擬似クラスの中から、ちょっと地味だけど実務ですごくいい仕事をしてくれる`:read-only(リードオンリー)`について、お話しさせてください。
—
そもそも `:read-only` ってどんな子?
名前を直訳すると「読み取り専用」。
つまり、「ユーザーが見ることはできるけれど、中身を書き換えたり編集したりできない状態の入力フォーム」をこっそり見つけて、スタイリングしてくれる優しいお巡りさんみたいなセレクタです。
身の回りのもので例えてみましょう。
- 通常のテキストボックス(``など):
これは「自由に書き込める真っ白なノート」です。ユーザーはペンを持って、好きな文字を書き込めますよね。
- `:read-only` がつく要素(`readonly`属性がついた入力欄など):
これは博物館のガラスケースの中に飾られた「開けないでね」と書いてある古い日記帳です。中身は読めるけれど、ペンのインクが裏に移っちゃうから触っちゃダメ、という状態です。
Webサイトで言うと、会員登録の確認画面で「あなたのメールアドレス(変更不可)」がグレーアウトして表示されている、あんな場面でよく使われています。
なんでわざわざスタイルを変える必要があるの?
「触れないなら、普通のテキストと見た目が一緒でもいいんじゃない?」って思いませんでしたか?
ここが、私たちフロントエンドエンジニアのこだわりどころなんです。
もし、編集できるところとできないところの見た目が全く同じだったらどうでしょう? ユーザーは「あれ? ここクリックしてもキーボードが出てこない! バグかな?」とイライラしてしまいますよね。
だからこそ、`:read-only` を使って「あ、ここは見る専用なんだな」と一目で分かるように見た目を優しく変えてあげることが、思いやりのあるWebデザインにつながるんです。
—
具体的にどんな要素に反応するの?
実は `:read-only` がターゲットにするのは、お行儀よく `readonly` 属性がついている要素だけではありません。
1. `readonly` 属性がついている `` や `
2. `disabled` 属性がついている(操作が無効化されている)フォーム要素
3. そもそもユーザーが書き換えられない通常のテキスト要素(`
` や `
特に1と2、「触れない状態の入力フォーム」をまとめてキャッチしてくれるのが、この `:read-only` の最高に便利なところです。
—
さぁ、実際にコードを書いてみましょう!
百聞は一見にしかず。エディタを開いて、こんな風に書いてみてください。
「読めるけど触れないんだよ」という雰囲気を、CSSでそっと表現してみます。
会員情報の確認
このコードをブラウザで開いてみてください。
「お名前」の欄はカチカチとクリックしてカーソルが出ますが、「メールアドレス」の欄は背景が薄いグレーになり、マウスカーソルを合わせると「通行止め」のマーク(禁止カーソル)に変わります。
JavaScriptを1行も書かなくても、CSSだけで「おっと、ここは触れないゾーンですよ」とユーザーに教えてあげられるんです。すごくスマートだと思いませんか?
—
チーフアーキテクトからのちょっとした実務アドバイス
現場で `:read-only` を使うとき、先輩たちがこっそり気をつけているポイントをシェアしますね。
`:disabled` との違いに気をつけよう
「触れないフォーム」という意味では、`disabled` 属性も似ています。
実は、`disabled` がついた要素も `:read-only` の条件にヒットすることが多いです。
もし「disabledの時と、readonlyの時でデザインを完全に分けたい!」という場合は、`input:disabled` と `input:read-only:not(:disabled)` のように書き分けてあげると、より緻密なコントロールができますよ。最初は「どっちも触れない仲間なんだな」くらいの認識で全然大丈夫です!
—
まとめ
- `:read-only` は、「ユーザーが編集できない(読み取り専用の)入力フォーム」を見つけるための擬似クラス。
- 背景色を薄いグレーにしたり、カーソルを変えたりすることで、ユーザーに「ここは見るだけだよ」と優しく伝えることができる。
- 難しいことを考えなくても、CSSだけでフォームの使いやすさ(UX)をグッと向上させられる魔法のスパイス。
CSSのセレクタは、覚えるまでは少し呪文のように見えるかもしれませんが、一つひとつ「ユーザーへの思いやり」の形を具現化しているだけなんです。
「あ、このプロパティ、なんだか優しくて好きかも」
そう思えた瞬間から、あなたのCSSの腕前はぐんぐん伸びていきます。
それでは、また次の現場でお会いしましょう! Happy Coding!

コメント