Chrome v47から選択範囲の描画が変わった件を追記しました。
テキストを選択した時に選択範囲の色が変わって選択範囲が明示されますが、その選択範囲の背景が該当する要素をはみ出して表示されることが気になっていました。(俺だけですか、そうですか)
それもはみ出す時とはみ出さない時があって、どういう時にはみ出てどういう処理をするとはみ出ないのか調べてみました。
ブラウザ毎の違い
普段使用しているブラウザは、Gooogle Chrome(Mac) の最新版なので最初の画像もchromeでのスクリーンショットなのですが、そもそも他のブラウザでははみ出すかどうか調べてみました。
結論から言うと、chrome(opera), safari ははみ出して、IE, firefox ははみ出しませんでした。
どうやらwebkit由来のブラウザはそのような実装がされているようです。
どういう時にどこまではみ出るのか
それでは、それらのブラウザは選択範囲をどのようなときに広げているのでしょうか。Google chrome で検証してみました。
上記のページにGoogle chrome や safari でアクセスしそれぞれの英字のテキストを選択してもらうと分かるのですが、どうやらchromeはブロック整形文脈(block format context)の範囲で選択範囲の背景を広げるようです。
例えばposition: relative;
,
float
で新たにブロック整形文脈を生成した
ブロックの中のテキストを選択した場合は、選択範囲がそれらの要素の中に収まります。
::selection
擬似要素でコントロールできるか
選択範囲の背景色や文字色を変化させるのに ::selelction
擬似要素を用いることが出来ます。
(注意:::selelction
擬似要素は現在、Editor's
Draftです。将来的にブラウザの実装は保証されません。)
ただし、そのEditor's Draftの仕様を見ても分かるように設定できるプロパティはテキストの装飾関係に限られている(実装されている範囲はもっと少ない)ため、::selection
擬似要素でコントロールすることは出来ません。
こんなこと気になるのは私だけかもしれませんが、調べてみると面白いですね。
Chrome v47 で選択範囲の描画範囲が変更となった模様
なおSafari(v9.0.3)で改めてみてみたところそのままのようですので、はみ出すのは主要ブラウザの中ではSafariだけとなりました。
- 参考
- ::selection - CSS | MDN via developer.mozilla.org
- CSS Pseudo-Elements Module Level 4 via dev.w3.org