¿Qué significa "i" en un selector de atributos CSS?

112

Encontré el siguiente selector de CSS en la hoja de estilo del agente de usuario de Google Chrome:

[type="checkbox" i]

¿Qué isignifica?

AntiCZ
fuente
1
@Alexander O'Mara: El nivel 4 de los selectores es parte de CSS3; es solo el siguiente nivel de un módulo que comenzó en el nivel 3. "CSS4" es un nombre inapropiado.
BoltClock
2
@Alexander O'Mara: Me encantaría verlo en meta. En particular, me gustaría saber cómo podemos manejar el uso de la etiqueta [css4]; la medida más drástica que podría tomar es convertirla en sinónimo de [css3], y eso sería lo correcto.
BoltClock
1
@BoltClock Meta Question is up! Por cierto, cuando pregunta sobre la combinación de su respuesta con esta pregunta, ¿quiso decir editar la pregunta / respuesta aquí para agregar la información, o se refería a un botón mágico para mover una respuesta a otra pregunta?
Alexander O'Mara
1
@Alexander O'Mara: Sin mover respuestas individuales, sino combinando dos preguntas completas. Es una función de solo mod.
BoltClock
1
@TylerH Tenemos una discusión sobre Meta sobre este tema . Siéntase libre de agregar algo a la discusión allí.
Alexander O'Mara

Respuestas:

132

Como se menciona en los comentarios, es para la coincidencia de atributos que no distingue entre mayúsculas y minúsculas. Esta es una nueva característica en CSS Selectors Level 4.

Actualmente está disponible en Chrome 49+, Firefox 47+, Safari 9+ y Opera 37 + *. Antes de esto, solo estaba disponible en los estilos de agente de usuario de Chrome a partir de Chrome 39, pero se podía habilitar para contenido web estableciendo la marca de funciones experimentales.

* Es posible que las versiones anteriores de Opera también lo admitan.

Ejemplo de trabajo / prueba del navegador:

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

El cuadro de arriba será verde si el navegador admite esta función, rojo si no lo hace.

Alexander O'Mara
fuente
6
¡Gracias por enseñar! Disfruta tu nuevo sombrero. ¿Funciona este tipo de cosas en las bibliotecas de selección? ¿Qué tipo de soporte de navegador tiene?
Benjamin Gruenbaum
1
@BenjaminGruenbaum Parece que solo está disponible en los estilos de agente de usuario de Chrome (no en el CSS de un sitio web, al menos no todavía). No pude encontrar ninguna documentación oficial de compatibilidad.
Alexander O'Mara
(Volviendo a publicar mi comentario anterior ahora que las preguntas están fusionadas). No es del todo sorprendente que los nuevos estándares experimentales como este estén mal documentados. Dicho esto, mi respuesta contiene más información sobre esto, a saber, cómo funciona, por qué se usa y cómo se implementa en Chrome (como lo indica la pregunta).
BoltClock
Chrome agregará soporte para esto en la versión 49.0 (actualmente en Beta), Firefox en la versión 47.0 (programado para ser lanzado en junio de 2016). Fuente: developer.mozilla.org/en-US/docs/Web/CSS/…
Miscreant
1
@LWChris: No estoy seguro de que exista tal navegador. IE6 no comprende los selectores de atributos en absoluto, e IE7 los admite incluso con atributos de datos personalizados.
BoltClock
36

Ese es el indicador que no distingue entre mayúsculas y minúsculas para los selectores de atributos, introducido en Selectores 4 . Aparentemente, introdujeron una implementación de esta función en Chrome ya en agosto de 2014.

En pocas palabras: esta bandera le dice al navegador que haga coincidir los valores respectivos para el typeatributo sin distinción entre mayúsculas y minúsculas. El comportamiento de coincidencia del selector predeterminado para los valores de atributo en HTML distingue entre mayúsculas y minúsculas , lo que a menudo no es deseable porque muchos atributos están definidos para tener valores que no distinguen entre mayúsculas y minúsculas, y desea asegurarse de que su selector elija todos los elementos correctos independientemente del caso. typees un ejemplo de un atributo de este tipo, porque es un atributo enumerado , y se dice que los atributos enumerados tienen valores que no distinguen entre mayúsculas y minúsculas .

Aquí están las confirmaciones relevantes:

  • 179370 - implementación
  • 179401 : cambios en las hojas de estilo de UA como se muestra en la captura de pantalla de la pregunta

Tenga en cuenta que actualmente está oculto dentro de la marca "Habilitar funciones experimentales de la plataforma web", a la que puede acceder en chrome: // flags / # enable-experimental-web-platform-features. Esto podría explicar por qué la función pasó en gran medida desapercibida: las funciones ocultas detrás de esa marca solo se pueden usar internamente y no en código público (como hojas de estilo de autor) a menos que esté habilitada, porque son experimentales y, por lo tanto, no están listas para su uso en producción.

Aquí hay un caso de prueba que puede usar: compare los resultados cuando la bandera está habilitada y deshabilitada:

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>

Tenga en cuenta que utilizo un atributo de datos personalizado en lugar de typemostrar que se puede usar con casi cualquier atributo.

No tengo conocimiento de ninguna otra implementación al momento de escribir este artículo, pero espero que otros navegadores se pongan al día pronto. Esta es una adición relativamente simple pero extremadamente útil al estándar y espero poder usarla en el futuro.

BoltClock
fuente
Tengo fatiga de "esa tarde" ... Después de leer las especificaciones de W3, todavía no entiendo completamente, ¿cuál sería un uso práctico en la vida real en CSS para esto?
Matt
2
@Matt: La coincidencia del selector de atributo distingue entre mayúsculas y minúsculas, como se indica en HTML5 , lo que en muchos casos no es deseable porque HTML5 permite valores que no distinguen entre mayúsculas y minúsculas para ciertos atributos. Puede usar esta bandera para asegurarse de elegir los elementos correctos independientemente del caso. Por ejemplo, en la captura de pantalla puede ver que busca input[type="search" i], que coincidirá con elementos como <input type="SEARCH">.
BoltClock
1
Puedo confirmar que funciona con Chromium versión 43.0.2357.130 y "Habilitar funciones experimentales de la plataforma web" habilitado.
Robert Siemer