:not擬似クラスでCSS3のサポートをチェックする方法
CSS3の:notで擬似クラスのサポートをチェックする方法を紹介します。
1.はじめに
「:checked擬似クラスでチェックボックスに連動して要素を表示させる方法」で、CSSの:checked擬似クラスを使ってチェックボックスの操作に連動してテキストエリアの表示を制御する方法を紹介しました。
前述の記事の再掲になりますが、HTMLとCSSの設定は次のとおりです。
<style>
.bar {
display: none;
}
input:checked + label + div {
display: block;
}
</style>
<div>
<input id="foo" type="checkbox" name="foo">
<label for="foo">foo</label>
<div class="bar">
<label for="bar">bar:</label>
<input id="bar" name="bar" type="text">
</div>
</div>
がこの設定では、:checked擬似クラス(というかCSS3)をサポートしていないブラウザで、"display:block"が有効にならず、テキストエリアが表示されないという問題が残ります。
2.:notで擬似クラスのサポートをチェックする
1項の問題を解決するには、上記のCSSに:notを次のように設定します。
<style>
.bar:not(old) {
display: none;
}
div:not(old) input:checked + label + div {
display: block;
}
</style>
この設定を行うことで、:notをサポートしていないブラウザはここに掲載したセレクタが適用されず、結果としてテキストエリアがデフォルトで表示されます。
逆に:notをサポートしているブラウザは、:notに指定した値「old」に常にマッチしないので、記述したセレクタがデフォルトで適用されることになります。
3.:notについて
:notは「否定擬似クラス」といい、指定した要素以外のすべてに適用する機能があります。
ここでは「old」という存在しない要素を指定しているので、:notをサポートしているブラウザでは常に適用される結果になります(ただしCSS3擬似クラスのサポートはブラウザ依存)。
このエントリーで紹介した:notは本来の使い方ではありませんが、ネットをチェックすると:not自体の紹介はされていても、実践的な使い方に言及されている記事がなかったので、ひとつのテクニックとして覚えておくと便利かもしれません。
4.参考サイト
参考サイトは下記です。ありがとうございました。
Hiding CSS rules with the negation pseudo-class
- YouTube動画にキャプションをつけてテキストを回り込ませる方法
- 画像を下揃えにしてテキストを回り込ませる方法
- style要素にCSSの擬似要素は記述可能か?
- position:relativeを設定すると他の要素がずれる場合の対処
- CSSでタブ切り替えする方法
- :target擬似クラスのまとめ
- CSSでヘッダを固定したスクロールテーブルを作る方法
- レスポンシブウェブデザインで画像を縮小する方法
- disabledなボタンのhoverのスタイルを無効にする方法
- HTML要素を別の要素を基点にしてCSSで絶対配置する方法
- :checked擬似クラスでチェックボックスに連動して要素を表示させる方法
- ol要素の入れ子で親の番号を子に割り当てる方法
- チェックボックスやラジオボタンを大きくする方法
- CSSで中央に配置する方法
- CSSで背景画像をページの中心に表示する方法