2012-06-22 12 views
5

Tenemos un DOM como esto:Con CSS solamente: Seleccione la primera aparición de la clase a través de todo el documento

<div class="outer"> 
    <div class="inner"> <!--// No "copyright" in this node //--> 
     <div class="content">...</div> 
    </div> 
    <div class="inner"> 
     <div class="content">...</div> 
     <div class="copyright">...</div> <!--// DISPLAY THIS ONE //--> 
    </div> 
    <div class="inner"> 
     <div class="content">...</div> 
     <div class="content">...</div> 
     <div class="content">...</div> 
     <div class="copyright">...</div> <!--// Hide this one //--> 
    </div> 
    <div class="inner"> 
     <div class="content">...</div> 
     <div class="content">...</div> 
     <div class="copyright">...</div> <!--// Hide this one too, etc. //--> 
    </div> 
    <!--// etc. //--> 
</div> 

Todos los elementos con class "derecho de autor" se debe ocultar, con excepción del primero de todos.

Intentamos aplicar este approach, pero desafortunadamente sin éxito. Debe ser una solución CSS única. ¿Alguna idea?

Gracias por su ayuda!

Respuesta

4

En este caso, cada .copyright es el primero y único de este tipo en .inner, por lo que debe seleccionar por .inner en su lugar. Si no necesita aplicar ninguna regla especial al primer hijo, no necesita usar el enfoque que describo en esa otra pregunta; simplemente usar esto para ocultar los otros elementos:

.inner ~ .inner .copyright { 
    display: none; 
} 
+0

Muy bien, gracias! Por cierto. Necesito que use la primera aparición como pie de página al imprimir el sitio (en Firefox): @media print {.copyright {position: fixed; abajo: 0; } .inner ~ .inner .copyright {display: none; }} – Lionel

+0

Perdón por molestar de nuevo, pero hemos olvidado un detalle importante: ¿Qué pasa si el primer nodo "interno" no contiene una clase de "derechos de autor"? – Lionel

+0

Eso significa que debe verificar si hay un '.inner' que contenga un' .copyright', que no se puede usar con CSS puro. Necesitarás JavaScript – BoltClock

0

prueba este JSfiddle

div.inner > .copyright { display:none; } 
div.inner:first-child .copyright { display:block; background:#000; } 

+1

Hemos olvidado un detalle importante: ¿Qué pasa si el primer nodo "interno" no contiene una clase de "derechos de autor"? – Lionel

Cuestiones relacionadas