2011-12-16 17 views
14

¿Debería este trabajo volverme loco?first-child no funciona

.project.work:first-child:before { 
 
    content: 'Projects'; 
 
} 
 
.project.research:first-child:before { 
 
    content: 'Research'; 
 
}
<div class="project work"> 
 
    <p>abcdef</p> 
 
</div> 
 
<div class="project work"> 
 
    <p>abcdef</p> 
 
</div> 
 
<div class="project work"> 
 
    <p>abcdef</p> 
 
</div> 
 
<div class="project research"> 
 
    <p>abcdef</p> 
 
</div>

projects:first-child funciona bien, research:first-child no se pegue. ¿Algunas ideas?

Demo No funciona, pero ¿cuál es la mejor manera de lograrlo?

+2

': primera child' sólo se selecciona el primer hijo. Nada más. – BoltClock

+0

.project.research: first-child Sin embargo, ¿no es el primero de su tipo? – uriah

+0

Lo es, pero no es el primer hijo de su padre. – BoltClock

Respuesta

14

:first-child solo selecciona el primer elemento secundario de su elemento primario. Nada más.

Como se menciona en algunas de mis otras respuestas en el sitio (1234), no hay pseudo-clase :first-of-class. Si está buscando aplicar estilos al primero de cada clase de sus elementos div, una solución es aplicar los estilos a todos los niños de esa clase, y un selector general de hermanos para deshacer los estilos de los hermanos posteriores.

Su CSS tendría el siguiente aspecto:

.project.work:before { 
    content: 'Work'; 
} 

.project.research:before { 
    content: 'Research'; 
} 

.project.work ~ .project.work:before, 
.project.research ~ .project.research:before { 
    content: none; 
} 
+0

No hay una manera en CSS puro de aplicar esto dinámicamente (es decir, sin tener que codificar las clases adicionales si decide agregar más más tarde). Una vez que agregue más clases, debe agregarlas a su CSS manualmente en este patrón. – BoltClock

+0

Perfecto, aplicar a todos y deshacer hermanos. Gracias @boltclock Entonces, si yo hubiera agregado otra clase como '.project.photography' ¿no funcionaría? – uriah

+0

@uriah: Funcionará, solo tiene que agregarlo manualmente. – BoltClock

1

Desde el specification:

Igual que :nth-child(1). La pseudoclase :first-child representa un elemento que es el primer hijo de algún otro elemento.

.project.research no es el primer hijo de su principal.

0

creo que desea que este CSS:

.project.work p:first-child:before {content:'Projects';} 
.project.research p:first-child:before {content:'Research';} 

o

.project.work > p:first-child:before {content:'Projects';} 
.project.research > p:first-child:before {content:'Research';} 

Updated fiddle

que coincide con el primer hijo de un elemento con las clases "Proyecto" y "el trabajo "(o" proyecto "e" investigación "). No es necesario que use p:first-child si no es un elemento p; en su lugar, podría usar *:first-child.

+0

Gracias! Solo me gustaría seleccionar el primero de su clase y aplicar el CSS no a cada elemento. Esto los selecciona a todos. – uriah

+0

@uriah: Ah. No creo que puedas hacer eso sin cambiar tu marcado. No creo que incluso los selectores de CSS3 tengan una forma de seleccionar el primer elemento en un contenedor con un par de nombres de clase dados. Incluso ': first-of-type" se aplicaría al tipo de elemento, independientemente de la clase. –