CSS属性セレクターで「i」は何を意味しますか?


112

Google Chromeユーザーエージェントスタイルシートで次のCSSセレクターを見つけました。

[type="checkbox" i]

どういうi意味ですか?


1
@Alexander O'Mara:セレクターレベル4はCSS3の一部です-レベル3から始まったモジュールの次のレベルにすぎません。「CSS4」は誤称です。
BoltClock

2
@Alexander O'Mara:メタで取り上げてもらいたいです。特に、[css4]タグの使用をどのように処理できるかを知りたいのですが、私ができる最も抜本的な方法は、[css3]の同義語にすることです。これは、実際には正しいことです。
BoltClock

1
@BoltClock Meta Questionがアップしました!ところで、この質問に回答をマージすることについて質問した場合、情報を追加するためにここで質問/回答を編集することを意味しましたか、それとも、「回答への別の質問への魔法のボタン」を参照していましたか?
Alexander O'Mara

1
@Alexander O'Mara:個々の回答を動かすのではなく、2つの質問全体を組み合わせます。これはmod専用の関数です。
BoltClock

1
@TylerH このトピックについては、メタに関する議論があります。そこで自由に議論に加えてください。
Alexander O'Mara 2015

回答:


132

コメントで述べたように、大文字と小文字を区別しない属性の照合用です。これは、CSSセレクターレベル4の新機能です。

現在、Chrome 49以降、Firefox 47以降、Safari 9以降、Opera 37以降*で利用できます。これより前は、Chrome 39前後のChromeユーザーエージェントスタイルでのみ利用可能でしたが、試験的機能フラグを設定することで、Webコンテンツに対して有効にすることができました。

*以前のバージョンのOperaでもサポートされている可能性があります。

動作例/ブラウザテスト:

[data-test] {
    width: 100px;
    height: 100px;
    margin: 4px;
}

[data-test="A"] {
    background: red;
}

[data-test="a" i] {
    background: green;
}
Green if supported, red if not:

<div data-test="A"></div>

上記の正方形は、ブラウザがこの機能をサポートしている場合は緑色になり、サポートしていない場合は赤色になります。


6
教えてくれてありがとう!新しい帽子をお楽しみください。この種のものはセレクターライブラリで機能しますか?どのようなブラウザサポートがありますか?
Benjamin Gruenbaum 2014

1
@BenjaminGruenbaum Chromeユーザーエージェントスタイルでのみ利用できるようです(少なくともWebサイトのCSSではありません)。公式の互換性ドキュメントは見つかりませんでした。
Alexander O'Mara 2014

(質問がマージされたので、以前の私のコメントを再投稿します。)このようなまったく新しい実験的な標準が十分に文書化されていないことは、まったく驚くことではありません。とは言っても、私の答えには、これに関するいくつかの詳細、つまり、それがどのように機能するか、なぜそれが使用されるか、およびそれがChromeにどのように実装されているか(質問で示されています)が含まれます。
BoltClock

Chromeは、このサポートをバージョン49.0(現在ベータ版)、Firefoxバージョン47.0(2016年6月にリリース予定)で追加します。出典:developer.mozilla.org/en-US/docs/Web/CSS/...
悪党

1
@LWChris:そのようなブラウザが実際に存在するかどうかはわかりません。IE6は属性セレクターをまったく理解せず、IE7はカスタムデータ属性を使用してもそれらをサポートします。
BoltClock

36

これは、セレクタ4で導入された属性セレクタの大文字と小文字を区別しないフラグです。どうやら彼らはこの機能の実装を早ければ2014年8月にChromeに組み込んだようです。

簡単に言うと、このフラグは、type大文字と小文字を区別せずに属性のそれぞれの値を照合するようにブラウザに指示します。HTML内の属性値のデフォルトのセレクタマッチング動作は、大文字と小文字を区別し、多くの属性は、大文字と小文字を区別しない値を持つように定義されているため、多くの場合、望ましくない、とあなたは関係なく、例のすべての権利の要素まで必ずご選択ピックを作りたいです。type列挙型属性であり、列挙型属性は大文字と小文字を区別しない値を持つと言われているため、このような属性の一例です

関連するコミットは次のとおりです。

  • 179370 —実装
  • 179401 —質問のスクリーンショットに示されているUAスタイルシートの変更

現在、「試験運用版のWebプラットフォーム機能を有効にする」フラグ内で非表示になっていることに注意してください。このフラグには、chrome:// flags /#enable-experimental-web-platform-featuresからアクセスできます。これは、機能がほとんど気付かれない理由を説明している可能性があります。このフラグの背後に隠されている機能は、有効である場合を除き、内部でのみ使用でき、公開されているコード(作成者のスタイルシートなど)では使用できません。

使用できるテストケースは次のとおりです。フラグが有効な場合と無効な場合の結果を比較します。

span[data-foo="bar"] {
    color: red;
}

span[data-foo="bar" i] {
    color: green;
}
<span data-foo="bar">If all of this text is green,</span>
<span data-foo="Bar">your browser supports case-insensitive attribute selectors.</span>

typeほぼすべての属性で使用できることを示すのではなく、カスタムデータ属性を使用していることに注意してください。

これを書いている時点では他の実装については知りませんが、他のブラウザがすぐに追いつくことを期待しています。これは比較的シンプルですが、標準に非常に役立つ追加であり、将来使用できることを楽しみにしています。


私は「あの午後」の疲労を感じています... W3仕様を読んだ後、まだ完全に理解していないので、このためのCSSでの実際の実際の使用法は何でしょうか?
Matt

2
@Matt:HTML5で説明されているように、属性セレクターのマッチングでは大文字と小文字が区別されます。HTML5 では特定の属性の大文字と小文字を区別しない値を許可するため、多くの場合、これは望ましくありません。このフラグを使用すると、大文字小文字に関係なく正しい要素を確実に選択できます。たとえば、スクリーンショットでは、のinput[type="search" i]ような要素に一致するを探すことがわかります<input type="SEARCH">
BoltClock

1
Chromiumバージョン43.0.2357.130で「実験的なWebプラットフォーム機能を有効にする」が有効になっていることで動作することを確認できます。
Robert Siemer
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.