2011-06-08 7 views
7

En CSS (cualquier versión), ¿hay algo así como, o alguna otra forma de hacer algo como el selector :has() en jQuery?¿CSS tiene algo como jQuery's: has()?

jQuery(':has(selector)')

Descripción: Selecciona elementos que contener al menos un elemento que coincide con el selector especificado.

http://api.jquery.com/has-selector/

+0

¿Qué desea pedir en el has() - selector? – mightyplow

+0

¿No es solo un selector de niños normal? Las reglas de un selector se aplicarán a todos los elementos que coincidan. – andyb

+1

@andyb: ': has()' es una pseudoclase condicional, similar a ': not()'. Los elementos coincidentes son los selectores alrededor de la pseudoclase, no entre paréntesis. – BoltClock

Respuesta

6

No, no lo hay. La forma en que se diseña CSS no permite selectores que coincidan con ancestros o hermanos anteriores; solo descendientes ( y >), hermanos sucesivos (~ y +) o hijos específicos (:*-child). El único selector ancestro es la pseudoclase :root que selecciona el elemento raíz de un documento (en las páginas HTML, naturalmente sería html).

Si necesita aplicar estilos al elemento que está consultando con :has(), debe agregarle una clase CSS, y luego el estilo de esa clase, as suggested by Stargazer712.

+1

Los borradores Selectores 4 mencionan un selector de temas que, aunque tiene una semántica diferente al selector ': has()' de jQuery, funcionaría igual de bien en este caso si se estandariza e implementa. – BoltClock

5

No. La mejor manera de lograr esto es mediante el uso de jQuery:

Css archivo:

.myAwesomeClass { 
    ... 
} 

Js del archivo:

jQuery(':has(selector)').addClass("myAwesomeClass") 

donde selector es lo que sea que eran originalmente tratando de hacer coincidir.

+2

La * mejor * forma sería organizar su CSS y el marcado para que no sea necesario confiar en JavaScript, incluso si CSS es un poco molesto a veces. –

Cuestiones relacionadas