Próbuję wybrać pierwszą h1
wewnątrz a div
z klasą o nazwie detail_container
. Działa, jeśli h1
jest pierwszym elementem w tym div
, ale jeśli pojawi się później ul
, nie zadziała.
<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>
Miałem wrażenie, że CSS, który mam, wybierze pierwszy h1
bez względu na to, gdzie się w tym znajduje div
. Jak mogę to zrobić?
css
css-selectors
The Muffin Man
źródło
źródło
Odpowiedzi:
Te
h1:first-child
środki wybierające:first-child
Pojemnika tu jestul
, i jako takie mogą nie spełniaćh1:first-child
.:first-of-type
Dla twojego przypadku są CSS3 :.detail_container h1:first-of-type { color: blue; }
Ale z problemami ze zgodnością przeglądarek i innymi rzeczami, lepiej dać pierwszą
h1
klasę, a następnie skierować ją na tę klasę:.detail_container h1.first { color: blue; }
źródło
:first-of-type
selektora.:first-of-type
. Stary link jest nieprawidłowy.:first-child
nie jest jasny do zrozumienia, ponieważ definiujesz element jako, powiedzmyh1
, selektor CSS , a następnie myślisz „weź pierwsze dziecko” ze wszystkich na wybranym poziomie DOM. Tyle razy źle to wykorzystałem ... Musimy przyzwyczaić się do:first-of-type
selektora i pomyśleć o pierwszym dziecku tego typu.:first-child
wybiera pierwszyh1
wtedy i tylko wtedy, gdy jest pierwszym dzieckiem swojego elementu nadrzędnego. W twoim przykładzieul
jest pierwszym dzieckiemdiv
.Nazwa pseudoklasy jest nieco myląca, ale jest tutaj dość jasno wyjaśniona w spec.
:first
Selektor jQuery daje Ci to, czego szukasz. Możesz to zrobić:$('.detail_container h1:first').css("color", "blue");
źródło
W tym konkretnym przypadku możesz użyć:
.detail_container > ul + h1{ color: blue; }
Ale jeśli potrzebujesz tego samego selektora w wielu przypadkach, powinieneś mieć dla nich klasę, jak powiedział BoltClock.
źródło
możesz także użyć
.detail_container h1:nth-of-type(1)
Zmieniając cyfrę 1 na dowolną inną liczbę, można wybrać dowolną inną pozycję h1.
źródło
Możesz zawinąć swoje
h1
tagi w inny,div
a pierwszym z nich będziefirst-child
. Todiv
nawet nie wymaga stylów. To tylko sposób na oddzielenie tych dzieci.<div class="h1-holder"> <h1>Title 1</h1> <h1>Title 2</h1> </div>
źródło
Element nie może bezpośrednio dziedziczyć po
<body>
tagu. Możesz spróbować umieścić go w<dir style="padding-left:0px;"></dir>
tagu.źródło