У меня есть такая HTML-страница:
<p></p>
<p></p>
<p></p>
<div></div>
<p></p>
<p></p>
<p></p>
<div></div>
И этот образец продолжается.
Обычно элементы div не должны отображаться так:
div{display:none;}
Но когда параграф зависает, должен отображаться первый элемент div после этого:
p:hover+div{display:block;}
Но это работает только для предыдущего p
. и это:
p:hover~div{display:block;}
Показывает все div
после зависшего p
, а не только первый после.
Как я мог отобразить только первый несмежный div после зависшего p
?
На самом деле я ищу селектор вроде first-sibling
.
4 ответа
Вы должны использовать следующие настройки:
p:hover ~ div ~ div {
display:none;
}
Это вернет значение "нет" для всех div
после первого div
, следующего за зависшим абзацем.
div {
display: none;
}
p:hover ~ div {
display: block;
}
p:hover ~ div ~ div {
display: none;
}
<p>p1</p>
<p>p2</p>
<p>p3</p>
<div>d1</div>
<p>p1</p>
<p>p2</p>
<p>p3</p>
<div>d2</div>
<p>p1</p>
<p>p2</p>
<p>p3</p>
<div>d3</div>
Я бы поместил ваши блоки между тегами разделов. Тогда теги <p>
и <div>
являются братьями и сестрами одного и того же элемента. Также, если эти теги принадлежат друг другу, также хорошо отразить это в вашей разметке.
<section>
<p>hello</p>
<p>world</p>
<p>bar</p>
<div></div>
</section>
<section>
<p>hello</p>
<p>world</p>
<p>bar</p>
<div></div>
</section>
Css
section p:hover~div{display:block;}
Вы пробовали использовать это:
div {
display: none;
background: blue;
color: #fff;
}
p:hover+div,
p:hover+p+div,
p:hover+p+p+div {
display: block;
}
<p>lorem</p>
<p>lorem</p>
<p>lorem</p>
<div>Ipsum</div>
<p>lorem</p>
<p>lorem</p>
<p>lorem</p>
<div>Ipsum</div>
Селектора «первого брата» нет, но вы можете переопределить стиль для последующих элементов div
, используя тот же метод, описанный в этот ответ:
div,
p:hover ~ div ~ div {
display: none;
}
p:hover ~ div {
display: block;
}
Это предпочтительнее, если вы не знаете заранее максимальное количество элементов p
, которые могут разделять элементы div
, или вам не нужно жестко кодировать все необходимые смежные селекторы, как показано в ответе Аарона.
Похожие вопросы
Связанные вопросы
Новые вопросы
html
HTML (язык гипертекстовой разметки) — это язык разметки для создания веб-страниц и другой информации, отображаемой в веб-браузере. Вопросы относительно HTML должны включать минимальный воспроизводимый пример и некоторое представление о том, чего вы пытаетесь достичь. Этот тег редко используется отдельно и часто в паре с [CSS] и [JavaScript].