No es factible con CSS2.1, pero es posible con los selectores de coincidencia de subcadenas de atributos CSS3 (que son compatibles con IE7 +):
div[class^="status-"], div[class*=" status-"]
Observe el carácter de espacio en el segundo selector de atributos. Esto recoge div
elementos cuyo class
atributo cumple cualquiera de estas condiciones:
[class^="status-"]
- comienza con "estado-"
[class*=" status-"]
- contiene la subcadena "status-" que ocurre directamente después de un carácter de espacio. Los nombres de clase están separados por espacios en blanco según la especificación HTML , de ahí el carácter de espacio significativo. Esto verifica cualquier otra clase después de la primera si se especifican varias clases, y agrega una ventaja de verificar la primera clase en caso de que el valor del atributo esté rellenado con espacio (lo que puede suceder con algunas aplicaciones que generan class
atributos dinámicamente).
Naturalmente, esto también funciona en jQuery, como se demuestra aquí .
La razón por la que necesita combinar dos selectores de atributos como se describió anteriormente es porque un selector de atributos tal como [class*="status-"]
coincidirá con el siguiente elemento, lo que puede ser indeseable:
<div id='D' class='foo-class foo-status-bar bar-class'></div>
Si puede asegurarse de que tal escenario nunca sucederá, entonces es libre de usar dicho selector por simplicidad. Sin embargo, la combinación anterior es mucho más robusta.
Si tiene control sobre la fuente HTML o la aplicación que genera el marcado, puede ser más simple simplemente hacer que el status-
prefijo sea su propia status
clase, como sugiere Gumbo .
status-
y no quieres igualarla, el selector se vuelve aún más complicado:div[class^="status-"]:not(.status-), div[class*=" status-"]:not(.status-)
además, pierdes la compatibilidad con IE7 / IE8. Afortunadamente, si su marcado es correcto, no necesitará excluir dicha clase.[class*=" anim-overlay-"] a:hover:after{...}
. Mis clases de CSS sonanim-overlay-1
,anim-overlay-2
.....anim-overlay-8
.anim-overlay-*{...}
?Los selectores de atributos CSS le permitirán verificar los atributos de una cadena. (en este caso, un nombre de clase)
https://developer.mozilla.org/en-US/docs/Web/CSS/Attribute_selectors
(Parece que en realidad está en el estado de 'recomendación' para 2.1 y 3)
Aquí hay un resumen de cómo * creo que funciona:
[ ]
: es el contenedor para selectores complejos si lo desea ...class
: 'clase' es el atributo que está viendo en este caso.*
: modificador (si lo hay): en este caso, "comodín" indica que está buscando CUALQUIER coincidencia.test-
: el valor (suponiendo que haya uno) del atributo, que contiene la cadena "test-" (que podría ser cualquier cosa)Así por ejemplo:
Podría ser más específico si tiene una buena razón, con el elemento también
ul[class*='test-'] > li { ... }
He tratado de encontrar casos extremos, pero no veo la necesidad de usar una combinación de
^
y*
, como * obtiene todo ...ejemplo: http://codepen.io/sheriffderek/pen/MaaBwp
http://caniuse.com/#feat=css-sel2
Todo lo que esté por encima de IE6 obedecerá felizmente. :)
tenga en cuenta que:
[class] { ... }
Seleccionará cualquier cosa con una clase ...
fuente
[class*='test-']
coincidirá con elementos como<div class='foo-test-bar'>
. Ese es el caso de un borde que requiere combinar ^ y * como se describe en mi respuesta. E IE6 no admite selectores de atributos.Esto no es posible con los selectores CSS. Pero podría usar dos clases en lugar de una, por ejemplo, estado e importante en lugar de estado importante .
fuente
No puedes hacer esto no. Hay un selector de atributos que coincide exactamente o parcialmente hasta un signo -, pero no funcionaría aquí porque tiene múltiples atributos. Si el nombre de la clase que está buscando siempre es el primero, puede hacer esto:
Tenga en cuenta que esto es solo para señalar qué selector de atributo CSS es el más cercano, no se recomienda asumir que los nombres de clase siempre estarán al frente ya que JavaScript podría manipular el atributo.
fuente