Cosa significa "i" in un selettore di attributi CSS?


112

Ho trovato il seguente selettore CSS nel foglio di stile dell'agente utente di Google Chrome:

[type="checkbox" i]

Cosa isignifica?


1
@Alexander O'Mara: I selettori di livello 4 fanno parte di CSS3 - è solo il livello successivo di un modulo che è iniziato al livello 3. "CSS4" è un termine improprio.
BoltClock

2
@Alexander O'Mara: mi piacerebbe vederlo pubblicato su meta. In particolare mi piacerebbe sapere come possiamo gestire l'uso del tag [css4] - la misura più drastica che potrei prendere è renderlo sinonimo di [css3], e questa sarebbe effettivamente la cosa giusta da fare.
BoltClock

1
@BoltClock Meta Domanda è finita ! A proposito, quando chiedi di unire la tua risposta a questa domanda, intendevi modificare la domanda / risposta qui per aggiungere le informazioni, o ti riferivi a un pulsante magico sposta-una-risposta-a-un'altra-domanda?
Alexander O'Mara

1
@Alexander O'Mara: Non spostare le singole risposte, ma combinare due intere domande. È una funzione solo mod.
BoltClock

1
@TylerH Abbiamo una discussione su Meta su questo argomento . Sentiti libero di aggiungere alla discussione lì.
Alexander O'Mara

Risposte:


132

Come menzionato nei commenti, è per la corrispondenza degli attributi senza distinzione tra maiuscole e minuscole. Questa è una nuova funzionalità in CSS Selectors Level 4.

Attualmente è disponibile in Chrome 49+, Firefox 47+, Safari 9+ e Opera 37+ *. In precedenza era disponibile solo negli stili user-agent di Chrome a partire da Chrome 39, ma poteva essere abilitato per i contenuti web impostando il flag delle funzionalità sperimentali.

* Anche le versioni precedenti di Opera potrebbero supportarlo.

Esempio di lavoro / test del browser:

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

Il quadrato sopra sarà verde se il browser supporta questa funzione, rosso se non la supporta.


6
Grazie per l'insegnamento! Goditi il ​​tuo nuovo cappello. Questo genere di cose funziona nelle librerie di selezione? Che tipo di supporto browser ha?
Benjamin Gruenbaum

1
@BenjaminGruenbaum Sembra che sia disponibile solo negli stili user-agent di Chrome (non nel CSS di un sito web, almeno non ancora). Non sono riuscito a trovare alcuna documentazione ufficiale sulla compatibilità.
Alexander O'Mara

(Ripubblicando il mio commento precedente ora che le domande sono state unite.) Non è del tutto sorprendente che standard sperimentali nuovi di zecca come questo siano scarsamente documentati. Detto questo, la mia risposta contiene qualche informazione in più su questo, ovvero come funziona, perché viene utilizzato e come è implementato in Chrome (come indicato dalla domanda).
BoltClock

Chrome aggiungerà il supporto per questo nella versione 49.0 (attualmente in beta), Firefox nella versione 47.0 (prevista per il rilascio a giugno 2016). Fonte: developer.mozilla.org/en-US/docs/Web/CSS/…
Miscreant

1
@ LWChris: Non sono sicuro che esista effettivamente un browser simile. IE6 non comprende affatto i selettori di attributi e IE7 li supporta anche con attributi di dati personalizzati.
BoltClock

36

Questo è il flag case-insensitive per i selettori di attributi, introdotto in Selectors 4 . Apparentemente hanno introdotto di nascosto questa funzione in Chrome già nell'agosto 2014.

In poche parole: questo flag indica al browser di abbinare i rispettivi valori per l' typeattributo senza distinzione tra maiuscole e minuscole. Il comportamento di corrispondenza del selettore predefinito per i valori degli attributi in HTML fa distinzione tra maiuscole e minuscole , il che è spesso indesiderabile perché molti attributi sono definiti per avere valori senza distinzione tra maiuscole e minuscole e vuoi assicurarti che il tuo selettore raccolga tutti gli elementi giusti indipendentemente dal caso. typeè un esempio di tale attributo, perché è un attributo enumerato e si dice che gli attributi enumerati abbiano valori senza distinzione tra maiuscole e minuscole .

Ecco i commit rilevanti:

  • 179370 - implementazione
  • 179401 - modifiche ai fogli di stile UA come mostrato nello screenshot nella domanda

Tieni presente che al momento è nascosto nel flag "Abilita funzionalità sperimentali della piattaforma web", a cui puoi accedere all'indirizzo chrome: // flags / # enable-experiment-web-platform-features. Questo potrebbe spiegare perché la funzionalità è passata in gran parte inosservata: le funzionalità nascoste dietro quella bandiera possono essere utilizzate solo internamente e non nel codice pubblico (come i fogli di stile dell'autore) a meno che non sia abilitata, perché sono sperimentali e quindi non pronte per l'uso in produzione.

Ecco un test case che puoi utilizzare: confronta i risultati quando il flag è abilitato e disabilitato:

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>

Tieni presente che utilizzo un attributo di dati personalizzato invece di typemostrare che può essere utilizzato con quasi tutti gli attributi.

Non sono a conoscenza di altre implementazioni al momento della stesura di questo articolo, ma si spera che altri browser lo raggiungano presto. Questa è un'aggiunta relativamente semplice ma estremamente utile allo standard e non vedo l'ora di poterla utilizzare in futuro.


Sto avendo "quel pomeriggio" stanchezza ... Dopo aver letto le specifiche W3 non ho ancora capito completamente, quale sarebbe un utilizzo pratico nella vita reale in CSS per questo?
Matt

2
@Matt: la corrispondenza del selettore di attributi fa distinzione tra maiuscole e minuscole come indicato in HTML5 , il che in molti casi non è desiderabile perché HTML5 consente valori senza distinzione tra maiuscole e minuscole per determinati attributi. Puoi usare questo flag per assicurarti di raccogliere gli elementi giusti indipendentemente dal caso. Ad esempio nello screenshot puoi vedere che cerca input[type="search" i], che corrisponderà a elementi come <input type="SEARCH">.
BoltClock

1
Posso confermare che funziona con Chromium versione 43.0.2357.130 e "Abilita funzioni sperimentali della piattaforma web" abilitate.
Robert Siemer
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.