こんにちは!フロントエンドの現場を長年フラフラと……もとい、最前線で駆け抜けてきたチーフアーキテクトの私です。
CSSって、最初は「文字の色が変わる!楽しい!」からはじまるんですが、実務をやりだすと「あれ、なんでここ効かないの?」「この状態のときだけデザイン変えたいのに!」って、まぁ泥沼にハマるんですよね。よく分かります。私も昔は夜な夜なディスプレイに向かってコーヒーを何杯も飲み干したものです。
さて、今回はそんなCSSの引き出しの中でも、ちょっと地味だけど「知っているとフォームのデザインが劇的にスマートになる」隠れた名優、`:read-only`(リードオンリー)疑似クラスについてお話ししますね。
難しい専門用語はなるべく置いておいて、身近な例えを交えながら、優しく紐解いていきましょう。大丈夫、一歩ずつ見れば絶対すぐに使いこなせるようになりますから!
—
1. 「さわれない」フォーム要素って、なんだろう?
いきなりコードを書く前に、少し身の回りの景色を思い出してみてください。
例えば、ネット通販で買い物をして、最後の確認画面に進んだときを想像してほしいんです。「お届け先のご住所」や「お名前」が画面に表示されていますよね。
あのとき、住所の文字って、パチパチと新しく書き換えることはできますか?……できませんよね。「表示されているだけ」で、カーソルを入れても編集できないようになっています。
Webの世界では、このように「ユーザーが中身を見ることしかできず、文字を入力したり変更したりできない状態」の入力欄(`` や `
HTMLを書くときに、この「お触り厳禁」状態にするには、要素に `readonly` という属性をポンと置いてあげるんです。
ここで今日の主役、`:read-only` 疑似クラスの登場です。
こいつは、HTML側で `readonly` が設定されている要素を見つけ出して、「おっ、こいつ今『見るだけ』の状態だな?」と自動で見つけて、こっそりスタイル(見た目)を当ててくれる、めちゃくちゃ気が利くスパイみたいなやつなんです。
—
2. なぜ、あえて `:read-only` で見た目を変える必要があるの?
「見えないだけなら、別に普通の入力欄と同じでいいんじゃない?」って思いませんでしたか?
ここが、プロのデザイナーやフロントエンドエンジニアがこだわるところなんです。
もし、編集できる入力欄も、編集できない「見るだけ」の入力欄も、見た目がまったく一緒だったらどうでしょう?
ユーザーは「あれ? ここクリックしても文字が打てないぞ? バグかな?」って、ちょっと不安になりますよね。
身近なもので例えるなら、「ボールペンのカチカチするノック部分が、実は飾りで一切押せないペン」みたいなものです。押そうとして押せないと、なんだかモヤっとしませんか?
だからこそ、`:read-only` を使って、
- 「ここは見る専用だから、文字が打てなくて正常なんだな」
- 「背景が少しグレーっぽくなっているから、落ち着いて確認すればいいんだな」
と、ユーザーがひと目で直感的に理解できるようにしてあげること。これが、親切なWebサイトを作るうえですごく大切な思いやりなんです。
—
3. 実際に書いてみよう!基本のCSSコード
百聞は一見にしかず、実際にコードを書いてその動きを確かめてみましょう。
今回は、編集できる通常の入力欄と、編集できない「読み取り専用」の入力欄を並べてみます。
以下のコードを、あなたのエディタ(VS Codeなど)にコピーして試してみてくださいね。
お申し込み情報の確認
コードの解説とポイント
CSSの部分を見てください。
input:read-only {
background-color: #edf2f7;
color: #718096;
/ … /
}
これだけで、HTMLに `readonly` がついている `` だけがターゲットになり、背景色がグレーに変わります。わざわざ特別なクラス名(class=”is-readonly” など)をHTML側に書き足さなくても、CSSが勝手にHTMLの属性を読み取って判断してくれるのが、この疑似クラスの最高にイケているところです。
—
4. つまずきやすいポイントと、実務での注意点
さて、ここまで読んで「よし、じゃあ明日からガンガン使おう!」と思ったあなた。
現場のベテランから、実務で絶対に知っておいてほしい「ちょっとした落とし穴」を2つだけ共有させてください。
その1:ブラウザによって「デフォルトの見た目」が違う
実は、何もしないままでもブラウザ(ChromeやSafariなど)は、`readonly` がついた要素を勝手にちょっとグレーっぽくしてくれたりします。
しかし、ブラウザの「おせっかい(デフォルトスタイル)」に頼りきっていると、MacのSafariで見るときと、WindowsのChromeで見るときで、見た目がバラバラになってデザインが崩れる原因になります。
【対策】
`:read-only` を使うときは、上で書いたコードのように、背景色や文字色、枠線を自分で明示的に(ゼロからリセットする気持ちで)指定してあげるのが、プロの現場でのスマートな作法です。
その2:あれ?普通のテキストエリアにも効いちゃう?
`:read-only` は、`` タグだけでなく、長文を書く `
そのため、予期せぬ場所でデザインが意図せず変わってしまうときは、セレクタをもう少し具体的にしてあげましょう。
/ 「inputタグの中で、かつ、読み取り専用のもの」と限定してあげると安全です /
input:read-only {
/ ここにスタイルを書く /
}
—
おわりに
お疲れ様でした!
`:read-only` 疑似クラス、いかがでしたでしょうか?
最初は「なんだか難しそうな英語だな……」と感じたかもしれませんが、要するに「HTMLで『触らせないよ』って設定されている子を、CSS側で見つけて優しくおめかししてあげるための魔法の合言葉」です。
こういう小さな気配りの積み重ねが、触っていて「気持ちいい」「使いやすい」と感じてもらえるWebサイトの品質を作っていきます。
もし、実際の制作で「あれ、なんか効かないな?」と手が止まったときは、深呼吸をして、HTMLにちゃんと `readonly` 属性がついているか、セレクタが間違っていないかをゆっくり見直してみてくださいね。あなたは一人じゃありません、焦らず一歩ずつ進んでいきましょう!
それでは、また次のCSSの冒険でお会いしましょう。チーフアーキテクトの私でした!

コメント