Fala João! Tudo bom?
Existem uma diferença entre esses dois seletores, vou explicar aqui embaixo!
Quando utilizamos o +, estamos selecionando o elemento imediatamente após, veja o exemplo abaixo:
E + F{
}
Nesse seletor, selecionamos todas os elementos F imediatamente precedidos de E, ou seja eles, além de serem irmãos, precisam ser irmãos adjacentes!
Dai vem o nome, seletor de irmão adjacente!
No outro caso, quando fazemos:
E ~ F{
}
Selecionamos todos os F que sejam irmãos de E, ou seja, se estiverem no mesmo "nível" serão selecionados (lembre-se que nosso código é lido seguindo o padrão ocidental, então os elementos F selecionados serão os que vierem depois de E)
Esse seletor, chamamos de seletor de irmão ou irmão geral!
Abaixo deixo um exemplinho para que fique um pouco mais claro
HTML
<p> primeiro p </p>
<h1>titulo</h1>
<p>segundo p</p>
<p>terceiro p</p>
CSS
/* TODOS OS P ABAIXO DO H1 SERÃO VERMELHOS! */
h1 ~ p {
color: red;
}
/* APENAS O P COM O CONTEÚDO "segundo p" SERÁ PINTADO */
h1 + p {
color: red;
}
Espero que tenha entendido melhor João! Qualquer dúvida só falar!
Abraços e bons estudos!!