CSS 2.1 definisce identifiers comeGli identificatori CSS possono iniziare con due trattini?
In CSS, identificatori possono contenere solo i caratteri [a-zA-Z0-9] e ISO 10646 U + 00A0 e superiori, più il trattino (-) e il carattere di sottolineatura (_); non possono iniziare con una cifra, due trattini o un trattino seguito da una cifra. Gli identificatori possono anche contenere caratteri di escape e qualsiasi carattere ISO 10646 come codice numerico.
Pertanto, --
dovrebbe essere un identificatore valido, e quindi non dovrebbe #--
selezionare l'elemento con id="--"
:
body { color: black }
#-- { color: red }
<p id="--">I should be black.</p>
attributo i valori devono essere identificatori o stringhe.
Ma --
sembra funzionare come un identificatore per i valori degli attributi, almeno su Firefox:
body { color: black }
[id=--] { color: red }
<p id="--">I am red on Firefox.</p>
Inoltre, CSS.escape
è stato modificato per consentire --
:
Sono state apportate piccole modifiche in Firefox 32, per abbinare le specifiche e l'evoluzione della sintassi CSS. L'identificatore ora può iniziare con
--
e il secondo trattino non deve essere scappato.
Secondo il Wayback Machine, il cambiamento è avvenuto tra il 19 e il 30 Apr 2014:
6 Feb 2014 editor's draft, memorizzato il 19 apr 2014.
Se il carattere è il secondo carattere e è "-" (U + 002D) e il primo carattere è "-", quindi il carattere di escape.
30 Apr 2014 editor's draft, memorizzati in data 4 maggio 2014.
Se il personaggio [...] è "-" (U + 002D) [...], poi il carattere stesso.
Quindi, ha qualche nuovo modulo CSS3 ha cambiato la definizione di identificatori, in modo che possano a volte cominciare --
, o che cosa esattamente sta succedendo qui?
Nessuna idea. [css-syntax] (http://dev.w3.org/csswg/css-syntax), il modulo pertinente in questo caso, non menziona tale cambiamento. L'affermazione "I nomi di proprietà e nomi di regole sono sempre identificatori, che devono iniziare con una lettera o un trattino seguito da una lettera, e quindi possono contenere lettere, numeri, trattini o caratteri di sottolineatura." così come [il diagramma di tokenizzazione per] (http://dev.w3.org/csswg/css-syntax/#ident-token-diagram) sono entrambi coerenti con i CSS2.1. –
BoltClock
@BoltClock Pertanto, si tratta di un bug di Firefox e 'CSS.escape' non è coerente con la definizione di identificatori? – Oriol
CSSOM ha una sezione su [serializzare gli identi] (http://dev.w3.org/csswg/cssom/#serialize-an-identifier) ma anche io sto avendo difficoltà a capirlo. Se CSSOM è stato effettivamente cambiato allora sì è per lo meno incoerente con l'attuale css-sintassi ED. – BoltClock