Selecione o primeiro elemento que ocorre após outro elemento


113

Eu tenho o seguinte código HTML em uma página:

<h4>Some text</h4>
<p>
Some more text!
</p>

No meu .css, tenho o seguinte seletor para estilizar o h4elemento. O código HTML acima é apenas uma pequena parte de todo o código; há vários divoutros agrupados pertencentes a uma caixa de sombra:

#sb-wrapper #sb-wrapper-inner #sb-body #myDiv h4
{
    color               : #614E43;
    margin-top          : 5px;
    margin-left         : 6px;
}

Portanto, tenho o estilo correto para meu h4elemento, mas também quero estilizar a ptag no meu HTML.

Isso é possível com seletores CSS? E se sim, como posso fazer isso?

Respostas:


200
#many .more.selectors h4 + p { ... }

Isso é chamado de seletor de irmão adjacente .


1
Uma alternativa é usar JS para encontrar seus h4elementos, caminhar até o próximo irmão e adicionar uma classe CSS a ele. Com jQuery, isso seria simplesmente$('#sb-wrapper #sb-wrapper-inner #sb-body #myDiv h4').next().addClass('shadowbox-h4-p');
Phrogz

2
Observe que isso só funciona em elementos que seguem o primeiro IMEDIATAMENTE. Se você deseja ter o segundo próximo elemento html, você pode encadear assim: #selector .original + h4 + p para obter op após um h4 após um elemento .original. Muito útil
user1610743 01 de

30

Para seu exemplo literal, você deseja usar o seletor adjacente (+).

h4 + p {color:red}//any <p> that is immediately preceded by an <h4>

<h4>Some text</h4>
<p>I'm red</p>
<p>I'm not</p>

No entanto, se você quiser selecionar todos os parágrafos sucessivos, precisará usar o seletor geral de irmãos (~).

h4 ~ p {color:red}//any <p> that has the same parent as, and comes after an <h4>

<h4>Some text</h4>
<p>I'm red</p>
<p>I am too</p>

Infelizmente, ele tem bugs no IE 7+ .


16

Apenas bato nisso quando tento resolver esse tipo de coisa sozinho.

Fiz um seletor que trata do elemento depois de ser algo diferente de um p.

.here .is.the #selector h4 + * {...}

Espero que ajude quem o encontrar :)


9
O uso de *corresponde a qualquer elemento conforme descrito no título. Foi um lembrete útil para mim.
James EJ

1
Esta é a única resposta que se ajusta à pergunta. Outras respostas requerem conhecimento prévio sobre o tipo de elemento anterior.
Hugo Wijdeveld

0

Simplyfing para os iniciantes:

Se você quiser selecionar um elemento imediatamente após outro elemento, use o +seletor.

Por exemplo:

div + pO elemento "+" seleciona todos os <p>elementos que são colocados imediatamente após os <div>elementos


Se você quiser aprender mais sobre seletores use esta tabela


0

Eu uso o CSS mais recente e "+" não funcionou para mim, então acabei com

:primeiro filho

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.