Que signifie «i» dans un sélecteur d'attributs CSS?

112

J'ai trouvé le sélecteur CSS suivant dans la feuille de style de l'agent utilisateur de Google Chrome:

[type="checkbox" i]

Qu'est-ce que cela isignifie?

AntiCZ
la source
1
@Alexander O'Mara: Les sélecteurs de niveau 4 font partie de CSS3 - ce n'est que le niveau suivant d'un module qui a commencé au niveau 3. «CSS4» est un abus de langage.
BoltClock
2
@Alexander O'Mara: J'adorerais le voir évoqué sur méta. En particulier, j'aimerais savoir comment nous pouvons gérer l'utilisation de la balise [css4] - la mesure la plus radicale que je pourrais prendre est d'en faire un synonyme de [css3], et ce serait en fait la bonne chose à faire.
BoltClock
1
@BoltClock Meta Question est en place! BTW, lorsque vous demandez de fusionner votre réponse avec cette question, vouliez-vous éditer la question / réponse ici pour ajouter les informations, ou faisiez-vous référence à un bouton magique déplacer une réponse à une autre question?
Alexander O'Mara
1
@Alexander O'Mara: Ne pas déplacer les réponses individuelles, mais combiner deux questions entières. C'est une fonction réservée aux mods.
BoltClock
1
@TylerH Nous avons une discussion sur Meta sur ce sujet . N'hésitez pas à ajouter à la discussion là-bas.
Alexander O'Mara

Réponses:

132

Comme mentionné dans les commentaires, c'est pour la correspondance d'attributs insensible à la casse. Il s'agit d'une nouvelle fonctionnalité dans CSS Selectors Level 4.

Actuellement, il est disponible dans Chrome 49+, Firefox 47+, Safari 9+ et Opera 37+ *. Auparavant, il n'était disponible que dans les styles d'agent utilisateur Chrome à partir de Chrome 39, mais pouvait être activé pour le contenu Web en définissant l'indicateur des fonctionnalités expérimentales.

* Les versions antérieures d'Opera peuvent également le prendre en charge.

Exemple de travail / Test du navigateur:

[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>

Le carré ci-dessus sera vert si le navigateur prend en charge cette fonctionnalité, rouge si ce n'est pas le cas.

Alexander O'Mara
la source
6
Merci d'avoir enseigné! Profitez de votre nouveau chapeau. Ce genre de chose fonctionne-t-il dans les bibliothèques de sélecteurs? Quel type de support de navigateur a-t-il?
Benjamin Gruenbaum
1
@BenjaminGruenbaum Il semble qu'il ne soit disponible que dans les styles d'agent utilisateur Chrome (pas le CSS d'un site Web, du moins pas encore). Je n'ai trouvé aucune documentation officielle de compatibilité.
Alexander O'Mara
(Republiant mon commentaire précédent maintenant que les questions sont fusionnées.) Il n'est pas tout à fait surprenant que de toutes nouvelles normes expérimentales comme celle-ci soient mal documentées. Cela dit, ma réponse contient plus d'informations à ce sujet, à savoir comment cela fonctionne, pourquoi il est utilisé et comment il est mis en œuvre dans Chrome (comme indiqué par la question).
BoltClock
Chrome ajoutera la prise en charge pour cela dans la version 49.0 (actuellement en version bêta), Firefox dans la version 47.0 (sortie prévue en juin 2016). Source: developer.mozilla.org/en-US/docs/Web/CSS/…
Miscreant
1
@LWChris: Je ne suis pas sûr qu'un tel navigateur existe réellement. IE6 ne comprend pas du tout les sélecteurs d'attributs et IE7 les prend en charge même avec des attributs de données personnalisés.
BoltClock
36

Il s'agit de l'indicateur insensible à la casse pour les sélecteurs d'attributs, introduit dans les sélecteurs 4 . Apparemment, ils ont introduit une implémentation de cette fonctionnalité dans Chrome dès août 2014.

En un mot: cet indicateur indique au navigateur de faire correspondre les valeurs respectives de l' typeattribut sans tenir compte de la casse. Le comportement de correspondance du sélecteur par défaut pour les valeurs d'attribut en HTML est sensible à la casse , ce qui n'est souvent pas souhaitable car de nombreux attributs sont définis pour avoir des valeurs insensibles à la casse, et vous voulez vous assurer que votre sélecteur sélectionne tous les bons éléments quelle que soit la casse. typeest un exemple d'un tel attribut, car il s'agit d'un attribut énuméré , et les attributs énumérés sont censés avoir des valeurs insensibles à la casse .

Voici les commits pertinents:

  • 179370 - mise en œuvre
  • 179401 - modifications des feuilles de style UA comme indiqué dans la capture d'écran de la question

Notez qu'il est actuellement masqué dans l'indicateur "Activer les fonctionnalités expérimentales de la plate-forme Web", auquel vous pouvez accéder à l'adresse chrome: // flags / # enable-experimental-web-platform-features. Cela pourrait expliquer pourquoi la fonctionnalité est passée en grande partie inaperçue - les fonctionnalités cachées derrière cet indicateur ne peuvent être utilisées qu'en interne et non dans du code public (comme les feuilles de style des auteurs) à moins qu'elle ne soit activée, car elles sont expérimentales et donc pas prêtes pour une utilisation en production.

Voici un cas de test que vous pouvez utiliser - comparez les résultats lorsque l'indicateur est activé et désactivé:

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>

Notez que j'utilise un attribut de données personnalisé au lieu de typepour montrer qu'il peut être utilisé avec à peu près n'importe quel attribut.

Je ne suis au courant d'aucune autre implémentation au moment de la rédaction de cet article, mais j'espère que d'autres navigateurs rattraperont bientôt. Il s'agit d'un ajout relativement simple mais extrêmement utile à la norme et j'ai hâte de pouvoir l'utiliser à l'avenir.

BoltClock
la source
J'ai de la fatigue "cet après-midi" ... Après avoir lu la spécification W3, je ne comprends toujours pas complètement, quelle serait une utilisation pratique dans la vie réelle en CSS pour cela?
Matt
2
@Matt: La correspondance du sélecteur d'attribut est sensible à la casse comme indiqué dans HTML5 , ce qui dans de nombreux cas n'est pas souhaitable car HTML5 autorise des valeurs insensibles à la casse pour certains attributs. Vous pouvez utiliser cet indicateur pour vous assurer de choisir les bons éléments quelle que soit la casse. Par exemple, dans la capture d'écran, vous pouvez voir qu'il recherche input[type="search" i], qui correspondra à des éléments tels que <input type="SEARCH">.
BoltClock
1
Je peux confirmer qu'il fonctionne avec Chromium Version 43.0.2357.130 et «Activer les fonctionnalités expérimentales de la plate-forme Web» activé.
Robert Siemer