Isso seleciona todas as <B>
tags diretamente precedidas por <A>
tags:
A+B {
/* styling */
}
Qual é o seletor para todas as <A>
tags seguidas diretamente por <B>
tags?
Aqui está um exemplo de HTML adequado à minha pergunta:
<a>some text</a>
<b>some text</b>
css
css-selectors
Mostafa Farghaly
fonte
fonte
A
eB
estão relacionados.b
s que são seguidos pora
s, semelhante aa+b
onde você pode selecionar todos osb
s que são precedidos diretamente pora
.Respostas:
Você não pode em css.
Editar: Para ser um pouco mais útil, se você usar, por exemplo, jQuery (uma biblioteca JavaScript), você pode usar
.prev()
.fonte
Você quer definir o estilo A dado que tem um elemento B diretamente dentro ou seguido? Como isso:
<A> <B> </B> </A> // OR <A> </A> <B> </B>
Você não pode fazer isso em CSS (ainda). Eric Meyer afirma que este tipo de seletor foi discutido algumas vezes na lista de discussão CSS e não é factível. Dave Hyatt, um dos principais desenvolvedores do WebKit, comenta com uma boa explicação de por que isso não pode ser feito.
Confira: postagem no blog de Shaun Inman e o comentário de Eric Meyer .
David Hyatt também pesa .
fonte
Você pode SOMENTE fazer o inverso: isso seleciona todas as marcas diretamente precedidas por marcas.
Isso é logicamente equivalente ao seu pedido.
Costumo usar isso para definir o estilo de uma linha de muitas caixas de seleção com rótulos
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>
fonte
label+input
a margem é aplicada a todos osinput
elementos a partir do segundo . É uma forma criativa de criar espaço entre eles, mas não no início ou no final da fila. Nesse caso, é equivalente ainput:not(:first-child)
.Embora não seja muito útil, hoje em dia você pode conseguir esse comportamento invertendo a ordem de seus elementos ao gerar o HTML e aplicando as regras de CSS:
display: flex
eflex-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>
Além disso, se você tiver 2 ou mais elementos embutidos, poderá obtê-lo aplicando
float: right
, pois eles serão exibidos na ordem inversa: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>
fonte