Я хотел бы показать div, когда кто-то наведет элемент <a>
, но я хотел бы сделать это в CSS, а не в JavaScript. Знаете ли вы, как это можно достичь?
Используя только CSS, покажите div на hover над
Ответ 1
Вы можете сделать что-то вроде this:
div {
display: none;
}
a:hover + div {
display: block;
}
<a>Hover over me!</a>
<div>Stuff shown on hover</div>
Ответ 2
.showme {
display: none;
}
.showhim:hover .showme {
display: block;
}
<div class="showhim">HOVER ME
<div class="showme">hai</div>
</div>
Ответ 3
Я нашел, что использование непрозрачности лучше, это позволяет вам добавить css3 переходы, чтобы сделать хороший эффект завершенного наведения. Переходы будут просто удалены старыми браузерами IE, поэтому он изящно деградирует.
#stuff {
opacity: 0.0;
-webkit-transition: all 500ms ease-in-out;
-moz-transition: all 500ms ease-in-out;
-ms-transition: all 500ms ease-in-out;
-o-transition: all 500ms ease-in-out;
transition: all 500ms ease-in-out;
}
#hover {
width:80px;
height:20px;
background-color:green;
margin-bottom:15px;
}
#hover:hover + #stuff {
opacity: 1.0;
}
<div id="hover">Hover</div>
<div id="stuff">stuff</div>
Ответ 4
Я знаю знающего эксперта, но я невероятно горжусь собой за то, что что-то проработал над этим кодом. Если вы выполните:
div {
display: none;
}
a:hover > div {
display: block;
}
(Обратите внимание на " > " ). Вы можете содержать все это в теге, а затем, пока ваш триггер (который может быть в нем собственный div или прямо в теге или все, что вы хотите) физически касается обнаруженного div, вы можете перемещать мышь от одного к другому.
Может быть, это не очень полезно для многих, но мне пришлось установить мой раскрытый div на переполнение: auto, поэтому иногда у него были полосы прокрутки, которые нельзя было использовать, как только вы удаляетесь от div.
Фактически, после того, как наконец-то выяснилось, как сделать обнаруженный div (хотя теперь он является дочерним элементом триггера, а не родственником), сидите за курок в терминах z-индекса (с небольшой помощью с этой страницы: Как получить родительский элемент, который появится над дочерним элементом), вам даже не нужно перекатывать обнаруженный div, чтобы прокрутить его, просто продолжайте парить над триггер и использовать ваше колесо или что-то еще.
Мой раскрытый div охватывает большую часть страницы, поэтому этот метод делает его намного более постоянным, а не экраном, мигающим из одного состояния в другое с каждым движением мыши. Это действительно интуитивно, поэтому я действительно очень горжусь собой.
Единственным недостатком является то, что вы не можете поместить ссылки во все это, но вы можете использовать все это как одну большую ссылку.
Ответ 5
Я хотел бы предложить это решение для шаблонов общего назначения, которое будет расширяться по правильному решению, предоставленному Yi Jiang's.
Дополнительные преимущества:
- поддержка зависания над любым типом элемента или несколькими элементами;
- всплывающее окно может представлять собой любой тип элемента или набор элементов, включая объекты;
- самодокументирующий код;
- обеспечивает появление всплывающих окон над другими элементами;
- звуковая основа для отслеживания, если вы генерируете html-код из базы данных.
В html вы разместите следующую структуру:
<div class="information_popup_container">
<div class="information">
<!-- The thing or things you want to hover over go here such as images, tables,
paragraphs, objects other divisions etc. -->
</div>
<div class="popup_information">
<!-- The thing or things you want to popup go here such as images, tables,
paragraphs, objects other divisions etc. -->
</div>
</div>
В css вы размещаете следующую структуру:
div.information_popup_container {
position: absolute;
width:0px;
height:0px;
/* Position Information */
/* Appearance Information */
}
div.information_popup_container > div.information {
/* Position Information */
/* Appearance Information */
}
div.information_popup_container > div.popup_information {
position: fixed;
visibility: hidden;
/* Position Information */
/* Appearance Information */
}
div.information_popup_container > div.information:hover + div.popup_information {
visibility: visible;
z-index: 200;
}
Несколько замечаний:
- Поскольку позиция div.popup установлена на фиксированную (также будет работать с абсолютной), содержимое не находится внутри нормального потока документа, что позволяет видимому атрибуту работать хорошо.
- z-index установлен для обеспечения того, что div.popup появляется над другими элементами страницы.
- Информационный_popup_container имеет малый размер и, следовательно, не может быть виден.
- Этот код поддерживает только зависание элемента div.information. Чтобы поддерживать зависание как div.information, так и div.popup, см. Hover Over the Popup ниже.
- Он протестирован и работает как ожидается в Opera 12.16 Internet Explorer 10.0.9200, Firefox 18.0 и Google Chrome 28.0.15.
Наведите указатель мыши на всплывающее окно
В качестве дополнительной информации. Когда всплывающее окно содержит информацию, которую вы можете захотеть вырезать и вставить или содержать объект, с которым вы могли бы взаимодействовать, а затем сначала заменить:
div.information_popup_container > div.information:hover + div.popup_information {
visibility: visible;
z-index: 200;
}
с
div.information_popup_container > div.information:hover + div.popup_information
,div.information_popup_container > div.popup_information:hover {
visibility: visible;
z-index: 200;
}
И во-вторых, отрегулируйте положение div.popup так, чтобы было перекрытие с div.information. Несколько пикселей достаточны, чтобы гарантировать, что div.popup может получить зависание при перемещении cusor с div.information.
Это не работает с Internet Explorer 10.0.9200 и работает как ожидается в Opera 12.16, Firefox 18.0 и Google Chrome 28.0.15.
Посмотрите сценарий http://jsfiddle.net/F68Le/ для полного примера с многоуровневым меню всплывающих окон.
Ответ 6
Этот ответ не требует, чтобы вы знали, какой тип отображения (встроенный и т.д.) должен отображаться скрываемый элемент:
.hoverable:not(:hover) + .show-on-hover {
display: none;
}
<a class="hoverable">Hover over me!</a>
<div class="show-on-hover">I'm a block element.</div>
<hr />
<a class="hoverable">Hover over me also!</a>
<span class="show-on-hover">I'm an inline element.</span>
Ответ 7
проверьте этот код
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<style type="text/css">
div
{
display:none;
color:black
width:100px;
height:100px;
background:white;
animation:myfirst 9s;
-moz-animation:myfirst 9s; /* Firefox */
-webkit-animation:myfirst 5s; /* Safari and Chrome */
}
@keyframes myfirst
{
0% {background:blue;}
25% {background:yellow;}
50% {background:blue;}
100% {background:green;}
}
@-moz-keyframes myfirst /* Firefox */
{
0% {background:white;}
50% {background:blue;}
100% {background:green;}
}
@-webkit-keyframes myfirst /* Safari and Chrome */
{
0% {background:red;}
25% {background:yellow;}
50% {background:blue;}
100% {background:green;}
}
a:hover + div{
display:inline;
}
</style>
</head>
<body>
<a href="#">Hover over me!</a>
<div>the color is changing now</div>
<div></div>
</body>
</html>
Ответ 8
Для меня, если я хочу взаимодействовать со скрытым div, не видя, что он исчезает каждый раз, когда я оставляю триггерный элемент (в этом случае), я должен добавить:
div:hover {
display: block;
}
Ответ 9
Исходя из основного ответа, это пример, полезный для отображения всплывающей подсказки с информацией при нажатии на значок ?
рядом со ссылкой:
document.onclick = function() { document.getElementById("tooltip").style.display = 'none'; };
document.getElementById("tooltip").onclick = function(e) { e.stopPropagation(); }
document.getElementById("help").onclick = function(e) { document.getElementById("tooltip").style.display = 'block';
e.stopPropagation(); };
#help { opacity: 0; margin-left: 0.1em; padding: 0.4em; }
a:hover + #help, #help:hover { opacity: 0.5; cursor: pointer; }
#tooltip { border: 1px solid black; display: none; padding: 0.75em; width: 50%; text-align: center; font-family: sans-serif; font-size:0.8em; }
<a href="">Delete all obsolete informations</a><span id="help">?</span>
<div id="tooltip">All data older than 2 weeks will be deleted.</div>
Ответ 10
HTML
<div>
<h4>Show content</h4>
</div>
<div>
<p>Hello World</p>
</div>
CSS
div+div {
display: none;
}
div:hover +div {
display: block;
}
CodePen: наведите курсор на элемент div, чтобы показать текст в другом элементе div
Ответ 11
Не забывай если вы пытаетесь навести курсор на изображение, вы должны поместить его вокруг контейнера. CSS:
.brand:hover + .brand-sales {
display: block;
}
.brand-sales {
display: none;
}
Если вы наведите курсор на это:
<span className="brand">
<img src="https://murmure.me/wp-content/uploads/2017/10/nike-square-1900x1900.jpg"
alt"some image class="product-card-place-logo"/>
</span>
Это покажет:
<div class="product-card-sales-container brand-sales">
<div class="product-card-">Message from the business goes here. They can talk alot or not</div>
</div>
Ответ 12
+
Позволяет "выбирать" только первый не вложенный элемент, >
выбирать только вложенные элементы - тем лучше использовать ~
которые позволяют выбрать произвольный элемент, который является дочерним по отношению к родительскому элементу наведения. Используя непрозрачность/ширину и переход, вы можете обеспечить плавный вид
div { transition: all 1s }
.ccc, .ggg { opacity: 0; color: red}
.ccc { height: 0 }
.aaa:hover ~ .bbb .ccc { opacity: 1; height: 34px }
.aaa:hover ~ .eee .fff .ggg { opacity: 1 }
<div class="aaa">Hover me... to see </div>
<div class='bbb'>B
<div class='ccc'>C
<div class='ddd'>D</div>
</div>
</div>
<div class='eee'>E
<div class='fff'>F
<div class='ggg'>G</div>
<div class='hhh'>H</div>
</div>
</div>
Ответ 13
Из моего тестирования с использованием этого CSS:
.expandable{
display: none;
}
.expand:hover+.expandable{
display:inline !important;
}
.expandable:hover{
display:inline !important;
}
И этот HTML:
<div class="expand">expand</div>
<div class="expand">expand</div>
<div class="expandable">expandable</div>
это привело к тому, что он расширяется с использованием второго, но не расширяется с использованием первого. Так что, если есть div между целью наведения и скрытым div, это не сработает.