たくさんのCSS セレクターデモ
※2018年3月18日時点
「CSS セレクター | MDN」を読んでそれぞれ試した。
デモの中で赤くなってるところがセレクターあたってるところ。ブラウザのサポート状況によってはデモの結果が確認できない場合があるので、そのときはMDNのページかCan I Useをチェック。
ミスがあると思うので、そこは指摘をもらって修正したい。
- 基本セレクター
- 結合子
- 疑似クラス
- :link
- :hover
- :active
- :visited
- :focus
- :focus-within
- :any-link
- :enabled
- :disabled
- :required
- :optional
- :valid
- :invalid
- :read-only
- :read-write
- :empty
- :checked
- :placeholder-shown
- :in-range
- :out-of-range
- :indeterminate
- :first-child
- :first-of-type
- :last-child
- :last-of-type
- :nth-child
- :nth-last-child
- :nth-of-type
- :nth-last-of-type
- :only-child
- :only-of-type
- :root
- :scope
- :not()
- :any
- :default
- :lang
- :dir()
- :target
- :fullscreen
- :first
- :left
- :right
- 疑似要素
- ::after
- ::before
- ::first-lettar
- ::first-line
- ::marker
- ::placeholder
- ::backdrop
- ::cue
- ::spelling-error
- ::grammar-error
- ::selection
- ::slotted
- ::-webkit-progress-bar
- ::-webkit-progress-value
- ::-moz-progress-bar
- ::-ms-fill
- ::-webkit-slider-thumb
- ::-moz-range-thumb
- ::-ms-thumb
- ::-webkit-slider-runnable-track
- ::-moz-range-track
- ::-ms-track
- ::-moz-range-progress
- ::-ms-fill-lower
- ::-ms-fill-upper
- これでセレクターは全部ではないし、すぐ増えそう
- 参考
基本セレクター
要素型セレクター
span { ... }
- Demo - 要素型セレクターで span 要素を赤くする | JSFiddle
- 詳細 - 要素型セレクター | MDN
クラスセレクター
.point { ... }
ID セレクター
#point { ... }
- Demo - ID セレクターで id="point" を赤くする | JSFiddle
- 詳細 - ID セレクター | MDN
全称セレクター
* { ... }
- Demo - 全称セレクターですべて赤くする | JSFiddle
- 詳細 - 全称セレクター | MDN
属性セレクター
[type=email] { ... }
属性セレクターは [attr=value]
以外にも色々ある。詳しくはMDNで
結合子
隣接結合子
p + div { ... }
- Demo - 隣接結合子で p 要素と隣接する div 要素を赤くする | JSFiddle
- 詳細 - 隣接結合子 | MDN
兄弟結合子
p ~ div { ... }
- Demo - 兄弟結合子で p 要素の後ろに来る div 要素を赤くする | JSFiddle
- 詳細 - 兄弟結合子 | MDN
別名間接セレクター。
子結合子
ul > li { ... }
- Demo - 子結合子で ul 要素直下の li 要素を赤くする | JSFiddle
- 詳細 - 子結合子 | MDN
子孫結合子
ul li { ... }
- Demo - 子孫結合子で ul 要素に含まれる li 要素を赤くする | JSFiddle
- 詳細 - 子孫結合子 | MDN
疑似クラス
:link
a:link { ... }
- Demo - :link で未訪問の a 要素を赤くする | JSFiddle
- 詳細 - :link | MDN
:hover
a:hover { ... }
:active
a:active { ... }
:visited
a:visited { ... }
:focus
input:focus { ... }
:focus-within
form:focus-within { ... }
:any-link
:any-link { ... }
:enabled
:enabled { ... }
:disabled
:disabled { ... }
:required
:required { ... }
:optional
:optional { ... }
:valid
:valid { ... }
- Demo - :valid で正常な状態の input 要素を赤にする | JSFiddle
- 詳細 - :valid | MDN
:invalid
:invalid { ... }
:read-only
input:read-only { ... }
:read-write
input:read-write { ... }
:empty
:empty { ... }
- Demo - :empty で入力されてない空の要素を赤くする | JSFiddle
- 詳細 - :empty | MDN
:checked
[type="radio"]:checked { ... }
:placeholder-shown
input:placeholder-shown { ... }
:in-range
:in-range { ... }
:out-of-range
:out-of-range { ... }
:indeterminate
:indeterminate { ... }
:first-child
li:first-child { ... }
:first-of-type
div :first-of-type { ... }
:last-child
li:last-child { ... }
:last-of-type
div :last-of-type { ... }
:nth-child
:nth-child(2n+1) { ... }
- Demo - :nth-child で要素の奇数番を赤くする | JSFiddle
- 詳細 - :nth-child | MDN
:nth-last-child
:nth-last-child(2n+1) { ... }
:nth-of-type
:nth-of-type(2n+1) { ... }
:nth-last-of-type
:nth-last-of-type(2n+1) { ... }
:only-child
div :only-child { ... }
:only-of-type
div :only-of-type { ... }
:root
:root { ... }
- Demo - :root で変数を登録する | JSFiddle
- 詳細 - :root | MDN
:scope
if (paragraph.matches(":scope")) { paragraph.style.color = 'red'; }
- Demo - :scope でスコープ要素を赤くする | JSFiddle
- 詳細 - :scope | MDN
正直なところわかってない。W3C の Selectors Level 4でも「スコープ要素(:scope element)」って言葉が出てくるんだけど、これ何を指すのか理解できない。
:not()
:not(p) { ... }
- Demo - :not() で p 要素以外を赤くする | JSFiddle
- 詳細 - :not() | MDN
:any
div :any(h1, h2, h3) { ... }
- Demo - :any で繰り返しコードを書くのを避ける | JSFiddle
- 詳細 - :any | MDN
:default
:default + label { ... }
:lang
:lang(ja) { ... }
- Demo - :lang で lang="ja" の日本語文章を赤くする | JSFiddle
- 詳細 - :lang | MDN
日本語では固定サイズでボタンを出したいけれど、文章が長くなるベトナム語やスペイン語では可変するボタンにしたい、という場合に使えるセレクター。
:dir()
:dir(rtl) { ... }
- Demo - :dir() で右側から読む言語の文字を赤くする | JSFiddle
- 詳細 - :dir() | MDN
:target
:target { ... }
- Demo - :target でページ内遷移後の要素を赤くする | JSFiddle
- 詳細 - :target | MDN
:fullscreen
:full-screen p { ... }
:first
@page :first { ... }
印刷に関するセレクター。
:left
@page :left { ... }
印刷に関するセレクター。
:right
@page :right { ... }
印刷に関するセレクター。
疑似要素
::after
p::after { ... }
- Demo - ::after で p 要素の後ろに赤い文字を入れる | JSFiddle
- 詳細 - ::after | MDN
::before
p::before { ... }
- Demo - ::before で p 要素の前に赤い文字を入れる | JSFiddle
- 詳細 - ::before | MDN
::first-lettar
p::first-lettar { ... }
::first-line
p::first-line { ... }
- Demo - ::first-line で最初の行を赤くする | JSFiddle
- 詳細 - ::first-line | MDN
::marker
li::marker { ... }
- Demo(動作ブラウザなし) - ::marker で li 要素のマークを赤くする | JSFiddle
- 詳細 - ::marker | MDN
::placeholder
input::placeholder { ... }
::backdrop
dialog::backdrop { ... }
- Demo - ::backdrop でダイアログの背景を赤くする | JSFiddle
- 詳細 - ::backdrop | MDN
::backdrop
擬似要素を使いたいなら .showModal()
API を使う。.show()
API では疑似要素は適用されない。
::cue
.class::cue { ... }
- Demo - ::cue | JSFiddle
- 詳細 - ::cue | MDN
::spelling-error
::spelling-error { ... }
- Demo(動作ブラウザなし) - ::spelling-error でスペルミスしている単語を赤くする | JSFiddle
- 詳細 - ::spelling-error | MDN
::spelling-error
がブラウザでサポートされると、"error" にセレクターがマッチするはず。
::grammar-error
::grammar-error { ... }
- Demo(動作ブラウザなし) - ::grammar-error で構文ミスしている単語を赤くする | JSFiddle
- 詳細 - ::grammar-error | MDN
::grammar-error
がブラウザでサポートされると、"a"、"are" にセレクターがマッチするはず。
::selection
::selection { ... }
::slotted
customElements.define('css-mokumoku-details', class extends HTMLElement { constructor() { ... let style = document.createElement('style'); style.textContent = '::slotted(*) { color: red; } '; shadowRoot.appendChild(style); shadowRoot.appendChild(templateContent.cloneNode(true)); } })
Shadow DOM の中だけで機能する。
::-webkit-progress-bar
.class::-webkit-progress-bar { ... }
::-webkit-progress-value
::-webkit-progress-value { ... }
::-moz-progress-bar
::-moz-progress-bar { ... }
::-ms-fill
::-ms-fill { ... }
::-webkit-slider-thumb
::-webkit-slider-thumb { ... }
::-moz-range-thumb
::-moz-range-thumb { ... }
::-ms-thumb
::-ms-thumb { ... }
::-webkit-slider-runnable-track
::-webkit-slider-runnable-track { ... }
- Demo - ::-webkit-slider-runnable-track でレンジ入力の背景を赤くする | JSFiddle
- 詳細 - ::-webkit-slider-runnable-track | MDN
::-moz-range-track
::-moz-range-track { ... }
::-ms-track
::-ms-track { ... }
::-moz-range-progress
::-moz-range-progress { ... }
::-ms-fill-lower
::-ms-fill-lower { ... }
::-ms-fill-upper
::-ms-fill-upper { ... }
これでセレクターは全部ではないし、すぐ増えそう
各ベンダー独自のセレクターはまだまだある。
また、このブログでも紹介した :has
セレクターのように、Selectors Level 4で追加予定のものも多い。