CSSのデータ属性で要素を選択する


回答:


776

属性セレクターを使用するつもりなら、確かに、なぜそうしないのですか?

[data-role="page"] {
    /* Styles */
}

さまざまなシナリオで使用できるさまざまな属性セレクターがあり、リンク先のドキュメントですべて説明されています。カスタムデータ属性が「新しいHTML5機能」であるにもかかわらず、

  • ブラウザーは通常、非標準属性をサポートする問題を抱えていないため、属性セレクターを使用してそれらをフィルター処理できるはずです。そして

  • CSSはセレクター構文を壊さない限り、名前空間のない属性名については気にしないので、CSS検証についても心配する必要はありません。


4
すべてのナビゲーターと互換性がありますか?
Christophe Debove 2013年

21
@Christophe Debove:IE7 +およびその他すべて。
BoltClock

7
CSSは、data属性が設定されているか、JS経由で変更されている場合、これを検出しないようです。
ᴍᴀᴛᴛʙᴀᴋᴇʀ

30
さらなる調査の後、それ$("#element").data("field","value");はデータ属性値を変更しないように見えるでしょう、それはjQueryのキャッシュされたバージョンのDOMを変更するだけです。実際のDOM属性を変更するには、を使用する必要があります$("#element").attr("data-field","value");。元のコメントを無効にする。
ᴍᴀᴛᴛʙᴀᴋᴇʀ

2
ええ、データセットの変更も@Matthewと同じように機能するようです-jsfiddle.net/BoltClock/k378xgj3何もないjQueryに感謝します。
BoltClock

107

最新のブラウザでは、コンテンツに関係なく属性を選択することもできます

と:

[data-my-attribute] {
   /* Styles */
}

[anything] {
   /* Styles */
}

例:http : //codepen.io/jasonm23/pen/fADnu

非常に大きな割合のブラウザで動作します。

これはJQueryセレクターでも使用できます。 document.querySelector


ああ、こんな使い方ができるなんて見たこともない!! +1!そしてFWIWはbrowsershotsが期限切れになったので、IE7 +で機能するので、そのサポートはほとんどどこにでもあると思います。ここでは、Chris Coyierも言及していなかったのはおかしいです
Camilo Martin

ありがとう@CamiloMartin混乱/煩わしさを避けるためにbrowsershotsリンクを削除しました。
ocodo 2013

Chris Coyierのスレッドcss-tricks.com/attribute-selectors/#comment-965838へのリンクを追加しました@CamiloMartin
ocodo

1
いずれにしても、この構文は新しいものではありません。IE6がIE7 +よりもサポートしていないことに多くの人々が驚いていました。すべてのCSS2.1セレクターがIE8以降でサポートされていると考えることができます。いくつかの不明瞭なバグはありますが、IE7がほとんどをサポートしています。最近のすべてのブラウザーは、しばらくの間レベル3セレクターをサポートしており、代わりにChromeがバグの多いセレクターになっています。
BoltClock

1
ただし、属性セレクターのトピックを扱っているので、レベル3(^=*=および$=)で導入された部分文字列属性セレクターもIE7およびIE8でサポートされていることに注意してください。多分それらは標準化される前にIEで導入されました。
BoltClock

47

CSS3サブストリング属性セレクターに注目する価値があります

[attribute^=value] { /* starts with selector */
/* Styles */
}

[attribute$=value] { /* ends with selector */
/* Styles */
}

[attribute*=value] { /* contains selector */
/* Styles */
}

13

複数のセレクターを組み合わせることができます。これはhref、CSSのみでの値に基づくように、値に基づいてすべての属性と属性を選択できることを知っているのでとても便利です。

属性セレクターを使用するとid、およびclass属性でいくつかの追加機能を試すことができます

これが属性セレクターの素晴らしい読みです

フィドル

a[href="http://aamirshahzad.net"][title="Aamir"] {
  color: green;
  text-decoration: none;
}

a[id*="google"] {
  color: red;
}

a[class*="stack"] {
  color: yellow;
}
<a href="http://aamirshahzad.net" title="Aamir">Aamir</a>
<br>
<a href="http://google.com" id="google-link" title="Google">Google</a>
<br>
<a href="http://stackoverflow.com" class="stack-link" title="stack">stack</a>

ブラウザーサポート:
IE6 +、Chrome、Firefox、Safari

詳細はこちらでご確認いただけます


4
    [data-value] {
  /* Attribute exists */
}

[data-value="foo"] {
  /* Attribute has this exact value */
}

[data-value*="foo"] {
  /* Attribute value contains this value somewhere in it */
}

[data-value~="foo"] {
  /* Attribute has this value in a space-separated list somewhere */
}

[data-value^="foo"] {
  /* Attribute value starts with this */
}

[data-value|="foo"] {
  /* Attribute value starts with this in a dash-separated list */
}

[data-value$="foo"] {
  /* Attribute value ends with this */
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.