Селектор p ~ ul у CSS — усі наступні сусіди елемента


Селектор element1~element2 обирає всі вказані елементи element2, які розташовані після елемнта element1.

Обидва елементи мають мати одного батька.

автор: NagarD

Загальний опис

автор: NagarD

Порада

Цей селектор схожий на селектор element1+element2, але на відмінну від нього обираї всіх наступних братів, а не тільки одного наступного.

автор: NagarD

Синтаксис

element ~ element {


    css declarations;


}

Переглядачі

Підтримка: стаціонарні переглядачі
Переглядач Google Chrome Mozilla Firefox Apple Safari Opera Microsoft EDGE Microsoft Internet Explorer
1 1 3 9 12 7
Підтримка: мобільні переглядачі
Переглядач Mobile Google Android Mobile Google Chrome Mobile Mozilla Firefox Mobile Apple Safari
4.4 18 4 1

Приклади

+ запропонувати свій приклад у пісочниці

Тильда обирає всіх наступних братів: червоніють обидва списки після абзацу — навіть через div, — а список перед абзацом лишається без змін.

HTML

<ul><li>Список перед абзацом — без змін.</li></ul>
<p>Абзац.</p>
<ul><li>Список після абзацу — червоний.</li></ul>
<div>Між ними може стояти будь-що.</div>
<ul><li>І цей червоний: ~ бачить усіх наступних братів.</li></ul>

CSS

p ~ ul {
    background: #ff0000;
}
автор: NagarD

Верхній блок показує різницю: зелена рамка — ~, синя — +. Між абзацами навмисно вставлено чужий елемент, щоб було видно, кого пропускає плюс. Нижче — робочий перемикач без скриптів: прапорець і панель є братами, і тильда дотягується до панелі через два елементи.

HTML

<h4 class="cap">1. Тильда бере всіх наступних, плюс — тільки одного</h4>
<div class="box demo">
    <p>перший абзац — не збігся з жодним правилом</p>
    <p>другий абзац</p>
    <span class="mid">а це спан між абзацами</span>
    <p>третій абзац</p>
    <p>четвертий абзац</p>
</div>
<p class="note">Зелена рамка — <code>p ~ p</code>, синій підкреслений фон —
    <code>p + p</code>. Третій абзац зелений, але не синій: перед ним стоїть
    спан, тож «рівно наступним» для абзацу він уже не є.</p>

<h4 class="cap">2. Брати мають бути братами</h4>
<div class="box">
    <div class="parent">
        <p class="inner">Цей абзац ВСЕРЕДИНІ блока. Правило
            <code>.parent ~ p</code> його не бачить.</p>
    </div>
    <p class="inner">А цей — брат блока, і саме він почервонів.</p>
</div>

<h4 class="cap">3. Перемикач без жодного рядка js</h4>
<div class="box switcher">
    <input type="checkbox" id="sw">
    <label for="sw">показати подробиці</label>
    <p class="hint">Прапорець, підпис і панель — три брати поспіль.</p>
    <div class="panel">
        <p>Панель відкрилася правилом <code>#sw:checked ~ .panel</code>.
            Між прапорцем і панеллю стоять ще два елементи, і тильді це
            байдуже — плюс тут не спрацював би.</p>
    </div>
</div>

CSS

.demo p ~ p {
    outline: 2px solid #3a9a4f;
    outline-offset: 2px;
}

.demo p + p {
    background: #dbe6f5;
    border-bottom: 2px solid #2f6fd0;
}

.parent ~ p {
    color: #b23a3a;
    font-weight: 700;
}

.parent {
    padding: 4px 12px;
    border: 1px dashed #b9c6d8;
    border-radius: 4px;
}

.switcher .panel {
    max-height: 0;
    overflow: hidden;
    padding: 0 12px;
    border-radius: 4px;
    background: #edf9ef;
    transition: max-height .2s;
}

.switcher #sw:checked ~ .panel {
    max-height: 200px;
    padding: 4px 12px;
}

.switcher label {
    cursor: pointer;
    text-decoration: underline dotted;
}

.hint {
    color: #5a6472;
    font-size: .85em;
}

.box {
    max-width: 560px;
    margin-bottom: 6px;
    padding: 8px 14px 14px;
    border: 1px solid #b9c6d8;
    border-radius: 6px;
    background: #f6f9ff;
}

.mid {
    display: block;
    margin: 6px 0;
    color: #5a6472;
    font-size: .9em;
}

.cap {
    margin: 24px 0 8px;
    font-size: 1rem;
    color: #5a6472;
}

.note {
    max-width: 560px;
    color: #5a6472;
    font-size: .9em;
}

code {
    background: #eef4ff;
    border-radius: 3px;
    padding: 0 4px;
}
автор: NagarD

Коментарі

Коментарів ще немає — будьте першим!

Відповідь для

Як форматувати текст?
Пишемо Виходить
**важливо**
*акцент*
~~застаріле~~
Виділення в тексті. Те саме роблять кнопки панелі, що спливає над виділеним.
## Як працює каскад
### Порядок оголошень
Заголовки всередині тексту. Найбільший не потрібен — він у сторінки вже є.
[[css/property/color]] Посилання на сторінку довідника. Наберіть [[ — поле веде сходинками (розділ → тип → сторінка), а хибний ключ підкреслить хвилею.
[[!sandbox/S0oh1hBm]] Живий приклад окремим рядком — саме вікно результату. Той самий ключ зі знаком !: наберіть [[! і дійдіть сходинками до потрібної сторінки, список покаже її приклади.
[MDN](https://developer.mozilla.org) Посилання на чужий сайт.
![Схема каскаду](https://site.com/схема.png) Картинка. Опис обов'язковий: його читають пошуковик і незрячі.
Задайте `display: grid` контейнеру Код усередині речення.
```css
.card { display: grid }
```
Код блоком. Мова після трьох лапок вмикає підсвітку.
- Походження
1. Походження
Перелік: маркований і нумерований.
- [ ] дописати приклади
- [x] перевірити в Firefox
Перелік завдань із галочками. Пробіл у порожніх дужках обов'язковий.
> Порядок важить лише за рівної ваги. Цитата на всю ширину абзацу.
Специфічність
: вага селектора; більша перемагає
Список означень: термін, а під ним пояснення з відступом. Пробіл після двокрапки обов'язковий.
Каскад має три критерії[^1]
[^1]: Походження, специфічність, порядок.
Виноска: номер у тексті, примітка внизу сторінки. Без згадки [^1] у тексті примітка не з'явиться.
Відповідь: ||сорок два|| Ховає те, що між рисками: читач бачить на цьому місці розмиту пляму, а решта речення лишається звичайною. Клац — і текст відкрито.
|| Показати рішення
Задайте контейнеру `display: grid`.
||
Ховає цілі абзаци. На сторінці видно лише підпис із першого рядка («Показати рішення»), решта розгортається клацанням по ньому. Закривні риски — окремим рядком.
Порожній рядок Новий абзац. Щоб перенести рядок усередині абзацу, поставте \ в його кінці.

Увійдіть — коментар з'явиться одразу, без капчі й очікування перевірки.

Правка
Зворотний зв'язок
Вхід