こんにちは!フロントエンドの現場を長年フラフラと……もとい、渡り歩いてきたチーフアーキテクトの私です。
CSSって、最初はボタンの色を変えたり文字を大きくしたりするだけで魔法みたいに楽しくてワクワクしますよね。でも、いざフォーム(お問合せ入力欄など)を作り始めると、「あれ? 選択できないようにしたはずなのに枠線が出ちゃう」「入力できる状態の時だけデザインを変えたいのに、どう書けばいいんだっけ……?」なんて、ちょっとした沼にハマり込んだりしていませんか?
大丈夫、安心してください。今日ご紹介する`:read-write`(リード・ライト)疑似クラスを使えば、そんなモヤモヤが一発で解決します。難しそうな名前をしていますが、中身を知れば「なぁんだ、そういうことか!」と味方にしたくなる便利なやつですよ。
さっそく、一緒に紐解いていきましょう!
—
1. `:read-write` ってどんな子?(身近な例えでお話しします)
突然ですが、街で見かける「鍵のかかった掲示板」と、誰もが自由に書き込める「ホワイトボード」を思い浮かべてみてください。
- 鍵のかかった掲示板(読み取り専用): 眺めることはできるけど、勝手に文字を書き換えたり消したりはできませんよね。
- ホワイトボード(編集可能): ペンを持って、自由に文字を書いたり消したりできますよね。
Webの世界でも同じです。ユーザーが文字を入力したり編集したりできる「ホワイトボード」のような入力欄もあれば、システム側から「ここはいじっちゃダメですよ!」とロックされている「掲示板」のような入力欄もあります。
この `:read-write` は、日本語に直すと「読めるし、書ける(編集できる)」という意味。つまり、Webページの中で「いま、ユーザーが自由に文字を入力できる状態にあるフォーム部品」を、ピンポイントで探し出して捕まえてくれるCSSの仕組みなんです。
—
2. なぜ `:read-write` が必要になるの?
「入力欄のスタイルなんて、`` に直接クラスをつければいいじゃない?」って思いますよね。その通り、普段はそれで十分です。
でも、実際のWebサイトではこんなシーンに出くわします。
1. 会員登録の入力画面で、「今は入力できる状態だよ」ということをユーザーに優しく伝えるために、ふわっと光るようなエフェクトをつけたい。
2. でも、何かの拍子に「ここは編集しちゃダメです(読み取り専用)」と切り替わった時には、そのエフェクトを消したい。
もし `:read-write` を知らないと、JavaScriptを使ってわざわざ「あ、今入力できる状態に変わったから、CSSのクラスを追加して……」と面倒なコードを書くことになります。
しかし、この `:read-write` を使えば、「ユーザーが編集できる状態のときだけ、勝手にCSSを適用してね」と、ブラウザにお願いできちゃうんです。めっちゃ楽になりませんか?
—
3. 実践!コードで動きを確認してみよう
百聞は一見にしかず。実際にエディタに貼り付けて試せるコードを用意しました。
今回は、「自由に入力できる欄」と、「システム側からお触り厳禁(読み取り専用)にされている欄」を並べてみます。
:read-write 疑似クラスの実験場
下の2つの入力欄を見比べてみてください。
画面を見てみましょう
ブラウザでこのファイルを開くと、1つ目の「お名前」欄には青い枠線やふんわりした影がついているのに、2つ目の「会員ID」欄は、`readonly`属性がついているおかげで、その魔法がかからず、ごく普通の落ち着いた見た目になっているはずです。
JavaScriptを1行も書かなくても、ブラウザが属性(`readonly`があるかないか)を勝手に判断して、デザインを切り替えてくれる――これが `:read-write` の真骨頂です。
—
4. つまずきやすいポイントと、実務でのアドバイス
初心者の頃、私がよくやってしまった「落とし穴」をシェアしておきますね。
Q. ``(複数行の入力欄)にも効くの?
A. はい、もちろん効きます!
`` だけでなく、お問い合わせフォームなどでよく使う `
Q. 「あれ、効かない?」と思ったときは?
要素によっては、ブラウザのデフォルトスタイル(初期設定)が強力すぎて、CSSがかき消されてしまうことがあります。
そんなときは、焦らずに詳細度を確認するか、今回のように `input:read-write` とタグ名を組み合わせてセレクタを少し具体的にしてあげてくださいね。
また、逆に「編集できない状態」をターゲットにしたいときは、お対になる `:read-only`(リード・オンリー)疑似クラス という便利な相棒もいますので、合わせて覚えておくと現場で「おっ、分かってるね!」と言われるかもしれません。
—
おわりに
CSSの疑似クラスと聞くと、「なんだか難しそう……」と身構えてしまうかもしれませんが、ひとつひとつの意味はとてもシンプルで、私たちの身の回りの仕組みとちゃーんと繋がっています。
今日出会った `:read-write` も、あなたのWeb制作をそっと助けてくれる心強い相棒になってくれるはずです。
まずはご自身のローカル環境でコードをコピペして、文字をいじったり `readonly` を消したりしながら、ブラウザの反応を楽しんでみてくださいね。
それでは、また次のCSSの深淵でお会いしましょう。ハッピー・コーディング!

コメント