¿Qué caracteres / símbolos están permitidos dentro de los selectores de clase CSS ?
Sé que los siguientes caracteres no son válidos , pero ¿qué caracteres son válidos ?
~ ! @ $ % ^ & * ( ) + = , . / ' ; : " ? > < [ ] \ { } | ` #
css
css-selectors
Darryl Hein
fuente
fuente
.hello/world
clase por escapar de la barra invertida:.hello\2fworld
,hello\2f world
ohello\/world
Respuestas:
Puede consultar directamente en la gramática CSS .
Básicamente 1 , un nombre debe comenzar con un guión bajo (
_
), un guión (-
) o una letra (a
-z
), seguido de cualquier número de guiones, guiones bajos, letras o números. Hay una trampa: si el primer carácter es un guión, el segundo personaje debe 2 sea una letra o un guión bajo, y el nombre debe tener al menos 2 caracteres.En resumen, la regla anterior se traduce a la siguiente, extraída de la especificación W3C. :
Los identificadores que comienzan con un guión o un guión bajo generalmente están reservados para extensiones específicas del navegador, como en
-moz-opacity
.1 Todo se vuelve un poco más complicado por la inclusión de caracteres Unicode escapados (que nadie usa realmente).
2 Tenga en cuenta que, según la gramática que vinculé, una regla que comienza con DOS guiones, por ejemplo
--indent1
, no es válida. Sin embargo, estoy bastante seguro de haber visto esto en la práctica.fuente
In CSS, identifiers (including element names, classes, and IDs in selectors) can contain only the characters [a-zA-Z0-9] and ISO 10646 characters U+00A0 and higher, plus the hyphen (-) and the underscore (_); they cannot start with a digit, two hyphens, or a hyphen followed by a digit. Identifiers can also contain escaped characters and any ISO 10646 character as a numeric code (see next item). For instance, the identifier "B&W?" may be written as "B\&W\?" or "B\26 W\3F"
. Por lo tanto,--indent1
no es válido y debe escaparse como\--indent1
(las--
clases se rompen en iOS, por ejemplo)Para mi sorpresa, la mayoría de las respuestas aquí son incorrectas. Resulta que:
Cualquier carácter, excepto NUL, está permitido en los nombres de clase CSS en CSS. (Si CSS contiene NUL (escapado o no), el resultado no está definido. [ CSS-caracteres ])
La respuesta de Mathias Bynens enlaza con explicaciones y demostraciones que muestran cómo usar estos nombres. Escrito en código CSS, un nombre de clase puede necesitar escapar , pero eso no cambia el nombre de la clase. Por ejemplo, una representación innecesariamente escapada se verá diferente de otras representaciones de ese nombre, pero aún se refiere al mismo nombre de clase.
La mayoría de los otros lenguajes (de programación) no tienen ese concepto de nombres de variables de escape ("identificadores"), por lo que todas las representaciones de una variable deben tener el mismo aspecto. Este no es el caso en CSS.
Tenga en cuenta que en HTML no hay forma de incluir caracteres de espacio (espacio, tabulación, avance de línea, avance de formulario y retorno de carro) en un atributo de nombre de clase , porque ya separan las clases entre sí.
Entonces, si necesita convertir una cadena aleatoria en un nombre de clase CSS: cuide NUL y espacio, y escape (en consecuencia para CSS o HTML). Hecho.
fuente
He respondido su pregunta en profundidad aquí: http://mathiasbynens.be/notes/css-escapes
El artículo también explica cómo escapar de cualquier carácter en CSS (y JavaScript), y también hice una herramienta útil para esto. De esa página:
fuente
class="404-error"
pueden ser útiles.<p class="foo bar">
agrega dos clases alp
elemento:foo
ybar
. No hay forma (que se me ocurra) de agregar un nombre de clase que contenga espacios en blanco a un elemento HTML. La información sobre cómo escapar de los espacios en blanco se incluyó porque es útil para escapar de dichos caracteres en otros contextos identificadores, por ejemplo, nombres de familias de fuentes.Lea la especificación W3C . (este es CSS 2.1, encuentre la versión adecuada para su suposición de navegadores)
editar: sigue el párrafo relevante:
edición 2: como @mipadi señala en la respuesta de Triptych, existe esta advertencia , también en la misma página web:
fuente
La expresión regular completa es:
Por lo tanto, todos los caracteres enumerados, excepto "
-
" y "_
", no están permitidos si se usan directamente. Pero puede codificarlos con una barra diagonal inversafoo\~bar
o con la notación unicodefoo\7E bar
.fuente
[\200-\377]
?[\178-\1114112]
está permitido sin escapes en CSS 3.\377
Aquí está realmente mal. Hay una nota en la Gramática de la sección del Escáner Léxico de CSS2.1 que dice: "El" \ 377 "representa el número de caracteres más alto que las versiones actuales de Flex pueden manejar (decimal 255). Debe leerse como" \ 4177777 "( decimal 1114111), que es el punto de código más alto posible en Unicode / ISO-10646 ". También debería ser de\240
también, no\377
. Sin embargo, supongo que ahora tiene 7 años, por lo que las cosas probablemente han cambiado un poco desde entonces.-?(?:[_a-z]|(?![\u0000-\u0239]).*|\\[0-9a-f]{1,6}(\r\n|[ \t\r\n\f])?|\\[^\r\n\f0-9a-f])(?:[_a-z0-9-]|(?![\u0000-\u0239]).*|\\[0-9a-f]{1,6}(\r\n|[ \t\r\n\f])?|\\[^\r\n\f0-9a-f])*
.Para aquellos que buscan una solución alternativa, puede usar un selector de atributos, por ejemplo, si su clase comienza con un número. Cambio:
a esto:
Además, si hay varias clases, creo que deberá especificarlas en el selector.
Fuentes:
fuente
Tengo entendido que el guión bajo es técnicamente válido. Revisa:
https://developer.mozilla.org/en/underscores_in_class_and_id_names
"... erratas a la especificación publicada a principios de 2001 hizo que los subrayados fueran legales por primera vez".
El artículo vinculado anteriormente dice que nunca los use, luego proporciona una lista de navegadores que no los admiten, todos los cuales son, en términos de números de usuarios al menos, redundantes durante mucho tiempo.
fuente
Para HTML5 / CSS3, las clases y los ID pueden comenzar con números.
fuente
class="1a"
). Sin embargo, un identificador CSS no puede comenzar con un número (por ejemplo.1a
, no funcionará). Puedes escapar de él, duro (por ejemplo,.\31 a
o.\000031a
).A partir de la respuesta de @ Triptych, puede usar las siguientes 2 coincidencias de expresiones regulares para que una cadena sea válida:
Esta es una coincidencia inversa que selecciona cualquier cosa que no sea una letra, número, guión o guión bajo para facilitar su eliminación.
Esto coincide con 0 o 1 guiones seguidos de 1 o más números al comienzo de una cadena, también para una fácil eliminación.
Cómo lo uso en PHP:
fuente