Che cosa significa il selettore CSS "~" (tilde / squiggle / twiddle)?


858

Cercare il ~personaggio non è facile. Stavo guardando alcuni CSS e ho trovato questo

.check:checked ~ .content {
}

Cosa significa?


3
Guarda la demo che capirai Ecco un elenco di selettori CSS
Dipak,

@TylerH, è qualcosa di molto comune usato nei post di Stack Overflow, per favore, prendi la calma, non volevo farla peggiorare.
Arsen Khachaturyan,

@ArsenKhachaturyan Forse hai frainteso; la sintassi block quote serve per indicare una citazione , ovvero quando un utente indica qualcosa (testo, immagine, codice, ecc.) non è il proprio lavoro o le proprie parole, ma viene copiato da qualche altra parte. Come tutta la formattazione, ha uno scopo semantico; non è qualcosa da aggiungere volenti o nolenti. Allo stesso modo, non aggiungere l'evidenziazione in grassetto casuale alle parole. Dovrebbe essere usato per enfasi, con parsimonia.
TylerH,

@TylerH Capisco che il suo nome è "quote" e anche che cosa significhi "citazione" stessa. Tuttavia, quando vuoi davvero distinguere le domande dal testo normale, puoi provare alcune tecniche di enfasi come ho fatto io. Per il grassetto è anche ovvio usare quando si desidera enfatizzare cose, come parole chiave o termini noti. Di solito non mi piace quando le persone usano il grassetto per motivi sconosciuti, ma a volte può essere usato per trovare facilmente informazioni relative all'argomento.
Arsen Khachaturyan,

@ArsenKhachaturyan Per favore, non farlo. >è solo per virgolette , non deve mai essere utilizzato per altri scopi. Inoltre, non dovresti avere nomi in grassetto di tecnologie casuali nella domanda. Possiamo vedere quali tecnologie sono rilevanti tramite tag.
meagar

Risposte:


1371

Il ~selettore è in effetti il combinatore di fratelli generali (ribattezzato combinatore di fratelli successivi in selettori di livello 4 ):

Il combinatore di fratelli generali è composto dal carattere "tilde" (U + 007E, ~) che separa due sequenze di selettori semplici. Gli elementi rappresentati dalle due sequenze condividono lo stesso genitore nella struttura del documento e l'elemento rappresentato dalla prima sequenza precede (non necessariamente immediatamente) l'elemento rappresentato dalla seconda.

Considera il seguente esempio:

.a ~ .b {
  background-color: powderblue;
}
<ul>
  <li class="b">1st</li>
  <li class="a">2nd</li>
  <li>3rd</li>
  <li class="b">4th</li>
  <li class="b">5th</li>
</ul>

.a ~ .b corrisponde alla quarta e quinta voce dell'elenco perché:

  • Sono .belementi
  • Sono fratelli di .a
  • Appare dopo .ain ordine sorgente HTML.

Allo stesso modo, .check:checked ~ .contentcorrisponde a tutti gli .contentelementi di cui sono fratelli .check:checkede compaiono dopo di esso.


13
"Non necessariamente immediatamente" è la parte fondamentale di questa descrizione.
PanicBus,

1
Esiste anche un selettore per tutti gli elementi con lo stesso genitore?
Nick N.

1
@NickN. intendi .parent > *?
Salman A

@SalmanA non esattamente, speravo ci fosse un selettore che puoi usare, se non conosci il genitore.
Nick N.

8
@ NickN.Non c'è. Il CSS è realizzato con la proposta che il parser CSS non guardi mai indietro nel DOM per fare una corrispondenza. Questo è lo stesso motivo per cui non esiste un selettore padre.
yunzen,

191

Buono anche a controllare gli altri combinatori della famiglia e tornare a quello che è questo specifico.

  • ul li
  • ul > li
  • ul + ul
  • ul ~ ul

Elenco di controllo di esempio:

  • ul li- Guardando dentro - Seleziona tutti gli lielementi posizionati (ovunque) all'interno del ul; Selettore discendente
  • ul > li- Guardando dentro - Seleziona solo gli li elementi diretti di ul; cioè selezionerà solo i figli diretti lidi ul; Selettore figlio o selettore combinatore figlio
  • ul + ul- Guardare fuori - Seleziona il ulimmediatamente successivo al ul; Non sta guardando dentro, ma cerca all'esterno l'elemento immediatamente successivo; Selettore fratello adiacente
  • ul ~ ul- Guardare fuori - Seleziona tutto ciò ulche segue ulnon importa dove si trova, ma entrambi uldovrebbero avere lo stesso genitore; Selettore generale di fratelli

Quello che stiamo osservando qui è il General Sibling Selector


2
Questo aveva più senso. La terminologia di Layman in soccorso di nuovo. Ora posso leggere la documentazione tecnica.
TheRealChx101,

2
Esiste un selettore di pari livello per TUTTI i fratelli, non solo quelli che seguono?
Elijah Mock il

1
@EliTheHuman, no. Si prega di fare riferimento a questo post Così, per ulteriori dettagli - stackoverflow.com/a/11813469/6830901
Lijo Joseph

174

Combinatore di pari livello generale

Il selettore combinatore di fratelli generali è molto simile al selettore combinatore di fratelli adiacente. La differenza è che l'elemento selezionato non ha bisogno di avere immediatamente successo al primo elemento, ma può apparire ovunque dopo di esso.

Ulteriori informazioni


31

È General sibling combinatored è spiegato molto bene nella risposta di @ Salaman.

Quello che mi è mancato è Adjacent sibling combinatorche è +ed è strettamente correlato ~.

esempio sarebbe

.a + .b {
  background-color: #ff0000;
}

<ul>
  <li class="a">1st</li>
  <li class="b">2nd</li>
  <li>3rd</li>
  <li class="b">4th</li>
  <li class="a">5th</li>
</ul>
  • Abbina gli elementi che lo sono .b
  • Sono adiacenti a .a
  • Dopo .ain HTML

Nell'esempio sopra segnerà il 2o lima non il 4o.

   .a + .b {
     background-color: #ff0000;
   }
<ul>
  <li class="a">1st</li>
  <li class="b">2nd</li>
  <li>3rd</li>
  <li class="b">4th</li>
  <li class="a">5th</li>
</ul>

JSFiddle


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.