Estoy tratando de seleccionar el primero h1
dentro de div
con una clase llamada detail_container
. Funciona si h1
es el primer elemento dentro de esto div
, pero si viene después de esto ul
, no funcionará.
<style type="text/css">
.detail_container h1:first-child
{
color:blue;
}
</style>
</head>
<body>
<div class="detail_container">
<ul>
<li></li>
<li></li>
</ul>
<h1>First H1</h1>
<h1>Second H1</h1>
</div>
</body>
</html>
Tenía la impresión de que el CSS que tengo seleccionará el primero h1
sin importar dónde esté en esto div
. ¿Cómo puedo hacer que funcione?
css
css-selectors
El hombre muffin
fuente
fuente
Respuestas:
El
h1:first-child
selector significaEl
:first-child
del contenedor aquí es elul
, y como tal no puede satisfacerh1:first-child
.Hay CSS3
:first-of-type
para su caso:Pero con los problemas de compatibilidad del navegador y todo eso, es mejor que le dé
h1
una clase al primero y luego apunte a esa clase:fuente
:first-of-type
selector.:first-of-type
. El enlace anterior es incorrecto.:first-child
no es claro de entender, porque define el elemento como selector de CSS, por ejemploh1
, y luego piensa "tomar el primer hijo" de todos en el nivel DOM elegido. Lo usé mal tantas veces ... Tenemos que acostumbrarnos al:first-of-type
selector y pensar en el primer hijo de su tipo.:first-child
selecciona el primeroh1
si y solo si es el primer hijo de su elemento padre. En su ejemplo,ul
es el primer hijo dediv
.El nombre de la pseudoclase es algo engañoso, pero se explica con bastante claridad aquí en la especificación.
El
:first
selector de jQuery te da lo que estás buscando. Puedes hacerlo:$('.detail_container h1:first').css("color", "blue");
fuente
Para ese caso particular puedes usar:
Pero si necesita ese mismo selector en muchos casos, debería tener una clase para esos, como dijo BoltClock.
fuente
también puedes usar
Al cambiar el número 1 por cualquier otro número, puede seleccionar cualquier otro elemento h1.
fuente
Puede envolver sus
h1
etiquetas en otrodiv
y luego el primero sería elfirst-child
. Esodiv
ni siquiera necesita estilos. Es solo una forma de segregar a esos niños.fuente
El elemento no puede heredar directamente de la
<body>
etiqueta. Puedes intentar ponerlo en una<dir style="padding-left:0px;"></dir>
etiqueta.fuente