2012-01-17 23 views
76

Tengo una página html con divs que tienen Identificación (s) de la forma s1, s2 y así sucesivamente.¿Usar expresión regular en css?

<div id="sections"> 
    <div id="s1">...</div> 
    <div id="s2">...</div> 
    ... 
</div> 

Quiero aplicar una propiedad css a un subconjunto de estas secciones/divs (según la identificación). Sin embargo, cada vez que agregue un div, tengo que agregar el css para la sección por separado de esta manera.

//css 
#s1{ 
... 
} 

¿Hay algo así como expresiones regulares en CSS que puedo utilizar para aplicar estilo a un conjunto de divs.

+4

Probablemente deberías estar usando el atributo 'class' para identificar la clase de elementos con esos ID – LeeGee

Respuesta

135

Puede administrar seleccionando esos elementos sin ningún tipo de expresión regular como muestran las respuestas anteriores, pero para responder directamente a la pregunta, sí puede usar una forma de expresión regular en los selectores:

#sections div[id^='s'] { 
    color: red; 
} 

Eso dice seleccionar cualquier elemento div dentro de #sections div que tenga una ID que empiece con la letra 's'.

Ver fiddle here.

W3 CSS selector docs here.

+1

Esto fue en una recomendación para CSS 2.1; es compatible con IE 7, Opera 9, etc. Fuente: https://developer.mozilla.org/en-US/docs/Web/CSS/Attribute_selectors –

+1

Es una pena que no se puedan pasar expresiones regulares más complejas ... – weltschmerz

8

En primer lugar, hay muchas formas de emparejar elementos dentro de un documento HTML. La coincidencia por ID se debe usar con moderación.

Comience con esta referencia primero para ver algunos de los selectores/patrones disponibles que puede usar para aplicar una regla de estilo a un elemento (s).

http://www.w3.org/TR/selectors/

La mayoría de estos selectores funcionará con IE 9 y el resto de los navegadores modernos; los selectores importantes funcionan en IE 8 (los resultados variarán IE 7 e inferiores).

En segundo lugar, a menos que realmente necesite nombrar elementos explícitamente por ID, considere usar un selector jerárquico en su lugar. Esto hace que el código sea mucho más limpio.

Empareje todos DIV s que son descendientes directos de #sections.

#sections > DIV 

de ajuste de todas las DIV s que son descendientes directos o indirectos de #sections.

#sections DIV 

de ajuste de la primera DIV que es un descendiente directo de #sections.

#sections > DIV:first-child 

Empareje un DIV con un atributo específico.

#sections > DIV[foo="bar"] 
3

Puede' acaba de agregar una clase a cada uno de sus DIVs y aplicar la regla a la clase de esta manera:

HTML:

<div class="myclass" id="s1">...</div> 
<div class="myclass" id="s2">...</div> 

CSS:

//css 
.myclass 
{ 
    ... 
} 
+3

También como regla general trato de no dar estilo a las cosas con los selectores de ID en absoluto. Pellizca la especificidad por lo que son más difíciles de anular, lo que generalmente duele más de lo que ayuda en mi experiencia. Yo uso id's ... solo que no para aplicar css. – prodigitalson

+0

@prodigitalson Su comentario no es muy claro para mí. –

+0

Estaba diciendo que trato de evitar el uso de selectores de id porque si vas a anular el estilo más adelante (digamos para una página específica) entonces terminas teniendo que usar ese mismo selector + lo que sea que puedas usar para hacerlo más específico que el selector original. No está mal si solo '.thepage # someid', pero puede ser realmente largo sin aliento en la tabla avanzada o el estilo de la lista. No fue una crítica de su respuesta tanto como un consejo general que se expandió en su respuesta :-) – prodigitalson

20

Una identificación está destinada a identificar el elemento de manera única. Cualquier estilo aplicado a él también debe ser exclusivo de ese elemento. Si tiene estilos que desea aplicar a muchos elementos, debe agregar una clase a todos ellos, en lugar de confiar en los selectores de ID ...

<div id="sections"> 
    <div id="s1" class="sec">...</div> 
    <div id="s2" class="sec">...</div> 
    ... 
</div> 

y

.sec { 
    ... 
} 

o en su caso específico, podría seleccionar todas las divisiones dentro de su contenedor principal, si no otra cosa es en su interior, así:

#sections > div { 
    ... 
} 
-4

hay otra forma sencilla de seleccionar elementos particulares en css también ...

#s1, #s2, #s3 { 
    // set css attributes here 
} 

si sólo tiene unos pocos elementos para elegir, y no quieres que molestarse con las clases, esto va a funcionar fácilmente también .

+0

¿Por qué el voto a favor? –

+1

@ AustinHenley Bcoz esta no es la solución. No quiero editar las reglas de CSS cada vez que lo mencioné en la pregunta. – Ankit

+0

Esto no merece una votación negativa. Si supiera, por ejemplo, que había como máximo 10 divs, podría poner # s1 a # s10 y no tendría que tocar los selectores. La forma correcta de hacerlo es con las clases, pero esta solución es tomar sus suposiciones e intentar una solución. – jcuenod

Cuestiones relacionadas