Wybiera wszystkie <B>
znaczniki bezpośrednio poprzedzone przez <A>
tagi:
A+B {
/* styling */
}
Jaki jest selektor dla wszystkich <A>
tagów, po których bezpośrednio następują<B>
tagi?
Oto przykładowy kod HTML pasujący do mojego pytania:
<a>some text</a>
<b>some text</b>
css
css-selectors
Mostafa Farghaly
źródło
źródło
A
iB
są powiązane.b
s, po których następujea
s, podobnie jak wa+b
przypadku, gdy można wybrać wszystkieb
s poprzedzone bezpośrednio przeza
.Odpowiedzi:
Nie możesz w css.
Edycja: Aby być nieco bardziej pomocnym, jeśli używasz na przykład jQuery (biblioteki JavaScript), możesz użyć
.prev()
.źródło
Czy masz na myśli styl A, biorąc pod uwagę, że ma on element B bezpośrednio wewnątrz lub za nim? Lubię to:
<A> <B> </B> </A> // OR <A> </A> <B> </B>
Nie możesz (jeszcze) zrobić czegoś takiego w CSS. Eric Meyer stwierdza, że ten rodzaj selektora był dyskutowany kilka razy na liście mailingowej CSS i nie jest wykonalny. Dave Hyatt, jeden z głównych programistów WebKit, komentuje z dobrym wyjaśnieniem, dlaczego nie można tego zrobić.
Zobacz: post na blogu Shauna Inmana i komentarz Erica Meyera .
David Hyatt też się liczy .
źródło
Możesz TYLKO odwrotnie: Zaznacza to wszystkie tagi bezpośrednio poprzedzone tagami.
Jest to logicznie równoważne z twoją prośbą.
Często używam tego do stylizowania rzędu wielu pól wyboru z etykietami
CSS:
label+input { margin-left: 4px; }
DOM:
<input id="a" name="a" type="checkbox"/><label for="a">...</label> <input id="b" name="b" type="checkbox"/><label for="b">...</label> <input id="c" name="c" type="checkbox"/><label for="c">...</label>
źródło
label+input
margines jest stosowany do wszystkichinput
elementów zaczynając od drugiego . To kreatywny sposób na stworzenie przestrzeni między nimi, ale nie na początku czy na końcu rzędu. W tym przypadku jest to odpowiednikinput:not(:first-child)
.Chociaż nie jest to zbyt przydatne, w dzisiejszych czasach można osiągnąć to zachowanie, odwracając kolejność elementów zarówno podczas generowania kodu HTML, jak i stosując reguły CSS:
display: flex
iflex-direction: column-reverse
ul { display: flex; flex-direction: column-reverse; } .b ~ .a { color: red; }
<ul> <li class="a">A 3</li> <li class="c">C 2</li> <li class="c">C 1</li> <li class="b">B 1</li> <li class="a">A 2</li> <li class="a">A 1</li> </ul>
Ponadto, jeśli masz 2 lub więcej elementów wbudowanych, możesz to osiągnąć, stosując
float: right
, ponieważ będą one wyświetlane w odwrotnej kolejności:ul { float: left; list-style-type: none; } li { float: right; } li:not(:first-child) { margin-right: 20px; } .b ~ .a { color: red; }
<ul> <li class="a">A 3</li> <li class="c">C 2</li> <li class="c">C 1</li> <li class="b">B 1</li> <li class="a">A 2</li> <li class="a">A 1</li> </ul>
źródło