恥ずかしながら空要素だけに適応できる:blank
, :empty
って疑似要素があることを知らなかったので試して見たメモ。
1. <div class="square"> <!-- comment--> </div> 2. <div class="square"> </div> 3. <div class="square"><!--comment--></div>
.blank .square:blank { background-color: #ec4727; } .blank .square:-moz-only-whitespace { background-color: #ec4727; } .empty .square:empty { background-color: #fbc136; }
👇
:blank
CSS の
:blank
擬似クラスは、子ノードを全く持たない要素、あるいは空のテキストノードまたはホワイトスペースのみを持つテキストノードを持つ要素に一致します。
出典: :blank - CSS: カスケーディングスタイルシート | MDN
- 空白や改行コードがあって空要素(
:blank
)として扱われる。 - 現状まだ草案でサポートされていない。
:-moz-only-whitespace
疑似セレクタでFireFoxでは使うことができる。
:empty
:empty
は CSS の 擬似クラスで、子を持たない要素を表します。子とは要素のノードまたは文字列 (ホワイトスペースを含む) です。コメントや処理指示は要素が空であるかどうかの判断には影響しません。
出典: :empty - CSS: カスケーディングスタイルシート | MDN
- 空白や改行コードがあると空要素(
:empty
)と判断されない。 - 将来的に
:-moz-only-whitespace
(:blank
) と同じ挙動なる予定っぽい。
sample
上記のサンプルと React で簡単なTODOリスト作ってみました。リストが空になると:blank
, :empty
がそれぞれ適応されるようにしています。
See the Pen CSS :blank & :empty test by KIKIKI (@chaika-design) on CodePen.
感想
:blank
は良さそうだけど、まだサポートされてないから使えなそう。(将来的に:empty
に統一されそうな気もする)
:empty
は将来的に:blank
の挙動になるSelectors Level 4 っぽいけど、現状はまだ中に改行やスペースがあるとスタイルが適応されないので特に動的なDOMだと注意が必要そう。
とりあえずReactだとDOMが空になったら改行も削除されるっぽいので:empty
で使えそう?
- :empty - CSS: カスケーディングスタイルシート | MDN
- :blank - CSS: カスケーディングスタイルシート | MDN
- :-moz-only-whitespace - CSS: カスケーディングスタイルシート | MDN
- CSSの便利な疑似セレクタ「:empty」と「:blank」、その違いと賢い使い方 | コリス
- Can I use... Support tables for HTML5, CSS3, etc
世界一わかりやすい HTML5&CSS3コーディングとサイト制作の教科書
- 作者: 赤間公太郎,狩野咲,鈴木清敬
- 出版社/メーカー: 技術評論社
- 発売日: 2019/03/01
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る