2014-12-16 14 views
95

ho trovato il seguente selettore CSS in Google Chrome user agent foglio di stile:Che cosa significa "i" in un selettore di attributi CSS?

[type="checkbox" i] 

Cosa significa il i significa?

+0

OP, è il tuo documento XHTML? –

+0

Sembra più simile al foglio di stile di user agent di Chrome e non a un problema specifico di Zurb. – j08691

+0

Mi ricordo di averlo visto da qualche parte. Qualcosa mi sta dicendo che ha a che fare con i cappucci? – jbutler483

risposta

111

Come indicato nei commenti, spetta corrispondenza attributo case-insensitive. This is a new feature in CSS Selectors Level 4.

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

* Le versioni precedenti di Opera possono anche supportarlo.

di lavoro Esempio di test/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>

La piazza di cui sopra sarà verde se il browser supporta questa funzione, rosso se non è così.

+6

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

+1

@BenjaminGruenbaum Sembra che sia disponibile solo negli stili utente-utente di Chrome (non nel CSS di un sito Web, almeno non ancora). Non sono riuscito a trovare alcuna documentazione ufficiale sulla compatibilità. –

+0

(Ripubblicando il mio commento precedente ora che le domande sono unite). Non è del tutto sorprendente che standard nuovi e sperimentali come questo siano scarsamente documentati. Detto questo, la mia risposta contiene ulteriori informazioni su questo, vale a dire come funziona, perché viene utilizzato e come è implementato in Chrome (come indicato dalla domanda). – BoltClock

33

Questo è il flag senza distinzione tra maiuscole e minuscole per i selettori di attributo, introdotto in Selectors 4. Apparentemente hanno introdotto un'implementazione di questa funzione in Chrome già nell'agosto 2014.

In breve: questo flag indica al browser di far corrispondere i rispettivi valori per l'attributo type in modo insensibile. Il comportamento di selezione del selettore predefinito per i valori degli attributi in HTML è case-sensitive, che è spesso indesiderabile perché molti attributi sono definiti con valori non sensibili alle maiuscole e minuscole e si desidera assicurarsi che il proprio selettore raccolga tutti gli elementi corretti indipendentemente dal caso. type è un esempio di tale attributo, perché it is an enumerated attribute e enumerated attributes are said to have case-insensitive values.

Ecco i commit rilevanti:

  • 179370 - implementazione
  • 179401 - modifiche ai fogli di stile UA come mostrato nello screenshot in questione

Si noti che è attualmente nascosto all'interno del " Abilita il flag "Funzionalità di piattaforma Web sperimentale" a cui è possibile accedere in chrome: // flags/# enable-experimental-web-platform-features. Questo potrebbe spiegare perché la funzione è passata in gran parte inosservata - le funzionalità nascoste dietro quel flag possono essere utilizzate solo internamente e non nel codice pubblico (come i fogli di stile dell'autore) a meno che non sia abilitato, perché sono sperimentali e quindi non sono pronte per l'uso di produzione.

Ecco un banco di prova che è possibile utilizzare - confrontare i risultati quando viene attivata e disattivata la bandiera:

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>

Nota che uso un dato attributo personalizzato invece di type per mostrare che può essere usato con praticamente qualsiasi attributo.

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

+0

Sto avendo "quel pomeriggio" stanchezza ... Dopo aver letto le specifiche del W3 non riesco ancora a capire completamente, quale sarebbe un uso pratico della vita reale in css per questo? – Matt

+1

@Matt: la selezione del selettore di attributo fa distinzione tra maiuscole e minuscole come [dichiarato in HTML5] (http://www.w3.org/TR/html5/disabled-elements.html#case-sensitivity), che in molti casi è indesiderabile 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. Per esempio nello screenshot puoi vedere che cerca 'input [type =" search "i]', che combacerà elementi come ''. – BoltClock

+1

Posso confermare che funziona con Chromium versione 43.0.2357.130 e "Abilita funzionalità di piattaforma Web sperimentale" abilitato. –

Problemi correlati