Що означає селектор CSS “~” (tilde / squiggle / twiddle)?


857

Пошук ~персонажа непростий. Я переглядав деякі CSS і виявив це

.check:checked ~ .content {
}

Що це означає?


3
Перевірте демонстраційну версію, яку ви зрозумієте Ось список
вибраних

@TylerH, це щось дуже поширене, що використовується у публікаціях про переповнення стека, будь ласка, будь ласка, я не мав наміру робити це гірше.
Арсен Хачатурян

@ArsenKhachaturyan Можливо, ви неправильно розумієте; Синтаксис блокової цитати - це вказівка ​​на цитату , коли користувач щось вказує (текст, зображення, код тощо) - це не їхня власна робота чи слова, а скопійований з іншого місця. Як і всі форматування, воно має семантичне призначення; це не те, що потрібно додавати вольово-невольно. Так само, будь ласка, не додайте до слів випадкове жирне виділення. Він повинен бути використаний для виділення, економно.
TylerH

@TylerH Я розумію, що це назва "цитата", а також те, що сама "цитата" означає. Однак коли-небудь, коли ви дійсно хочете відрізнити запитання від звичайного тексту, ви можете спробувати певну техніку наголосу, як я. Для напівжирного кольору також очевидно використовувати, коли ви хочете зробити акцент на речі, як-от ключові слова чи добре відомі терміни. Зазвичай мені не подобається, коли люди використовують невідомі шрифти з невідомих причин, але іноді це можна використовувати людям, щоб легко знаходити інформацію, що стосується теми.
Арсен Хачатурян

@ArsenKhachaturyan Будь ласка, не робіть цього. >призначений лише для цитат , він ніколи не повинен використовуватися для будь-яких інших цілей. Ви також не повинні сміливі назви випадкових технологій у питанні. Ми можемо бачити, які технології є релевантними за допомогою тегів.
meagar

Відповіді:


1369

Фактично ~селектор є Генеральним комбінатором братів і сестер (перейменованим на наступний комбінататор побратимів у селекторах 4 рівня ):

Загальний комбінатор побратимів складається з символу "тильда" (U + 007E, ~), який розділяє дві послідовності простих селекторів. Елементи, представлені двома послідовностями, поділяють один і той же батьків у дереві документа, а елемент, представлений першою послідовністю, передує (не обов'язково одразу) елементу, представленому другою.

Розглянемо наступний приклад:

.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 відповідає 4-му та 5-му списку, оскільки вони:

  • Є .bелементами
  • Є побратимами .a
  • З'являються після .aв порядку джерела HTML.

Точно так же, .check:checked ~ .contentвідповідає всім .contentелементам , які є братами і сестрами , .check:checkedі з'являються після нього.


13
"Не обов'язково негайно" є ключовою частиною цього опису.
PanicBus

1
Чи є також селектор для всіх елементів з тим самим батьком?
Нік Н.

1
@NickN. ви маєте в виду .parent > *?
Салман А

@SalmanA не зовсім, я сподівався, що є селектор, який ви можете використовувати, якщо ви не знаєте батьків.
Нік Н.

7
@ NickN. Ні, немає. CSS робиться з припущенням, що аналізатор CSS ніколи не озирається в DOM, щоб скласти збіг. Це та сама причина, що немає батьківського селектора.
юнзен

191

Корисно також перевірити інші комбінатори в сім'ї і повернутися до того , що цей конкретний один.

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

Приклад контрольного списку:

  • ul li- Дивлячись всередині - Вибирає всі ці liелементи розміщені ( в будь-якому місці) всередині ul; Селектор нащадків
  • ul > li- Зазираючи всередину - Вибирає лише прямі li елементи ul; тобто він буде вибирати тільки прямі дитина liз ul; Вибір дитини або добірний комбінатор
  • ul + ul- Дивлячись назовні - Вибирає ulнегайно наступну ul; Це не дивлячись всередину, а дивлячись назовні безпосередньо на наступний елемент; Прилеглі Sibling Selector
  • ul ~ ul- Дивлячись назовні - Вибирає все, ulщо випливає, ulне має значення, де він знаходиться, але обидва ulповинні мати одного батька; Загальний вибір сестри

Той, кого ми дивимося тут, - це генеральний вибір сестер


2
Цей мав найбільше сенсу. Термінологія Layman знову допоможе. Тепер я можу прочитати технічну документацію.
TheRealChx101

2
Чи є селектор споріднений для ВСІХ братів і сестер, а не тільки ті , які слідують?
Ілля Макет

1
@EliTheHuman, ні. Будь ласка, ознайомтеся з цим повідомленням SO для отримання більш детальної інформації - stackoverflow.com/a/11813469/6830901
Lijo Joseph

174

Загальний комбінатор побратимів

Загальний селектор комбінаторів братів і сестер дуже схожий на сусідній селектор комбінатора сибс. Різниця полягає в тому, що обраний елемент не потребує негайного успіху над першим елементом, але може з’являтися в будь-якому місці після нього.

Більше інформації


31

Це є General sibling combinatorі пояснюється у відповіді @ Саламана дуже добре.

Те, що я пропустив, те, Adjacent sibling combinatorщо є +і тісно пов'язане з цим ~.

Прикладом може служити

.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>
  • Відповідає елементам, які є .b
  • примикають до .a
  • Після .aв HTML

У прикладі вище він буде позначати 2-е, liале не 4-е.

   .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


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.