Используя только CSS, покажите div при наведении курсора на <a>
303
Я хотел бы показать div, когда кто-то наводит курсор на <a>элемент, но я хотел бы сделать это в CSS, а не в JavaScript. Знаете ли вы, как этого можно достичь?
помните, что: hover не будет работать одинаково на сенсорных экранах, и в эти дни его следует использовать с осторожностью (например, избегать использования для отображения дополнительных элементов навигации)
HTML5 позволяет элементам привязки оборачивать практически все, поэтому в этом случае divэлемент можно сделать дочерним для привязки. В остальном принцип тот же - используйте :hoverпсевдокласс для изменения displayсвойства другого элемента.
Хорошее решение, даже если вы поместите div: hover {display: block;}, тогда div не будет скрыт, когда вы наводите div на себя.
Alper
22
Это будет делать каждый <div>на странице, display:noneи когда мышь наведет курсор на «Наведите курсор на меня!» это сделает каждый <div>следующий <a>внутри одного и того же родителя display:block. Это может быть лучшей идеей, чтобы выбрать .class-nameили #id. В противном случае, хороший пост.
конец
10
добавить div: hover {display: block; } чтобы держать его подальше, пока его мышь находится над ним
monkeyhouse
Было бы разумно использовать видимость вместо отображения. Насколько я помню, это более эффективно, потому что дисплей перерисовывает div каждый раз. Хотя это, вероятно, не имеет значения для одного деления, если вам нужно сделать много, лучше сделать их невидимыми.
Поскольку этот ответ популярен, я думаю, что небольшое объяснение необходимо. При использовании этого метода при наведении курсора на внутренний элемент он не исчезнет. Поскольку .showme находится внутри .showhim, он не исчезнет, когда вы перемещаете указатель мыши между двумя строками текста (или чем бы то ни было).
Это пример странностей, о которых нужно позаботиться при реализации такого поведения.
Все зависит от того, для чего вам это нужно. Этот метод лучше подходит для сценария стиля меню, в то время как Yi Jiang лучше для всплывающих подсказок.
У вас не может быть блочного элемента внутри встроенного элемента, если вы не используете HTML 5.
метил
3
HTML5 пока не является стандартом, поэтому метод И Цзяна лучше.
метил
4
я знаю его лучше, поэтому я проголосовал за него :) я привел рабочий пример, представляя концепцию (более конкретно, селекторы css), не понимаю, почему понизить это ^^
n00b
Возможно, лучше использовать <span>s, но я думаю, что это лучший пример, чем И Цзян.
конец
37
Я обнаружил, что использование opacity лучше, оно позволяет вам добавлять переходы 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. Я хотел, чтобы div «stuff» оставался видимым, если я переместил курсор из div «hover» в div «stuff», поэтому я изменил последний элемент стиля с #hover:hover + #stuff {на #hover:hover + #stuff, #stuff:hover {. Тогда div "stuff" остается видимым, когда вы перемещаетесь по этому div!
NotJay
26
Я знаю, что я эксперт, но я невероятно горжусь тем, что разработал что-то об этом коде. Если вы делаете:
div {
display: none;}
a:hover > div {
display: block;}
(Обратите внимание на '>'). Вы можете содержать все это в теге, тогда, пока ваш триггер (который может быть в его собственном div, или прямо в теге, или что угодно) физически касается обнаруженный div, вы можете перемещать мышь от одного к другому.
Может быть, это бесполезно, но мне пришлось настроить раскрываемый div на переполнение: auto, поэтому иногда в нем были полосы прокрутки, которые нельзя было использовать, как только вы отойдете от div.
Фактически, после окончательной разработки того, как сделать обнаруженный div (хотя теперь он является дочерним по отношению к триггеру, а не сиблингу), сядьте за триггером с точки зрения z-index (с небольшой помощью с этой страницы : Как заставить родительский элемент отображаться над дочерним элементом ) вам даже не нужно переворачивать раскрытый элемент div, чтобы прокручивать его, просто продолжайте зависать над триггером и использовать свое колесо или что-то еще.
Мой раскрытый div покрывает большую часть страницы, поэтому эта техника делает ее намного более постоянной, а не мигает экраном из одного состояния в другое с каждым движением мыши. Это действительно интуитивно понятно, поэтому я действительно горжусь собой.
Единственным недостатком является то, что вы не можете поместить ссылки в целом, но вы можете использовать все это как одну большую ссылку.
<aclass="hoverable">Hover over me!</a><divclass="show-on-hover">I'm a block element.</div><hr/><aclass="hoverable">Hover over me also!</a><spanclass="show-on-hover">I'm an inline element.</span>
Я хотел бы предложить это шаблонное решение общего назначения, которое расширяет правильное решение, предоставленное И Цзяном.
Дополнительные преимущества включают в себя:
поддержка наведения на элемент любого типа или на несколько элементов;
всплывающее окно может быть любого типа элемента или набора элементов, включая объекты;
самодокументируемый код;
обеспечивает всплывающее окно над другими элементами;
надежная основа, чтобы следовать, если вы генерируете HTML-код из базы данных.
В HTML вы размещаете следующую структуру:
<divclass="information_popup_container"><divclass="information"><!-- The thing or things you want to hover over go here such as images, tables,
paragraphs, objects other divisions etc. --></div><divclass="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 отображался над остальными элементами страницы.
Параметр information_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.popup таким образом, чтобы оно совпадало с информацией div.in. Несколько пикселей достаточно для того, чтобы div.popup мог получать указатель при перемещении курсора от div.information.
Это не работает должным образом с Internet Explorer 10.0.9200 и работает должным образом с Opera 12.16, Firefox 18.0 и Google Chrome 28.0.15.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><styletype="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><ahref="#">Hover over me!</a><div>the color is changing now</div><div></div></body></html>
+Позволяют «выбрать» только первый не вложенный элемент, то >выберите только вложенные элементы - тем лучше для использования , ~которые позволяют выбрать произвольный элемент , который является дочерним родительским парили элемент. Используя непрозрачность / ширину и переход, вы можете обеспечить плавный вид
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}
<divclass="aaa">Hover me... to see<br><br></div><divclass='bbb'>BBBBB
<divclass='ccc'>CCCCC
<divclass='ddd'>DDDDD</div></div></div><divclass='eee'>EEEEE
<divclass='fff'>FFFFF
<divclass='ggg'>GGGGG</div><divclass='hhh'>HHHHH</div></div></div>
Для меня, если я хочу взаимодействовать со скрытым div, не видя, как он исчезает каждый раз, когда я оставляю инициирующий элемент (в данном случае a), я должен добавить:
Это привело к тому, что он расширяется с использованием второго, но не расширяется с использованием первого. Так что, если между целью наведения и скрытым div есть div, он не будет работать.
<divclass="product-card-sales-container brand-sales"><divclass="product-card-">Message from the business goes here. They can talk alot or not</div></div>
Ответы:
Вы можете сделать что-то вроде этого :
Это использует соседний селектор брата и является основой выпадающего меню suckerfish .
HTML5 позволяет элементам привязки оборачивать практически все, поэтому в этом случае
div
элемент можно сделать дочерним для привязки. В остальном принцип тот же - используйте:hover
псевдокласс для измененияdisplay
свойства другого элемента.источник
<div>
на странице,display:none
и когда мышь наведет курсор на «Наведите курсор на меня!» это сделает каждый<div>
следующий<a>
внутри одного и того же родителяdisplay:block
. Это может быть лучшей идеей, чтобы выбрать.class-name
или#id
. В противном случае, хороший пост.jsfiddle
Поскольку этот ответ популярен, я думаю, что небольшое объяснение необходимо. При использовании этого метода при наведении курсора на внутренний элемент он не исчезнет. Поскольку .showme находится внутри .showhim, он не исчезнет, когда вы перемещаете указатель мыши между двумя строками текста (или чем бы то ни было).
Это пример странностей, о которых нужно позаботиться при реализации такого поведения.
Все зависит от того, для чего вам это нужно. Этот метод лучше подходит для сценария стиля меню, в то время как Yi Jiang лучше для всплывающих подсказок.
источник
<span>
s, но я думаю, что это лучший пример, чем И Цзян.Я обнаружил, что использование opacity лучше, оно позволяет вам добавлять переходы css3, чтобы создать эффект законченного наведения. Переходы будут просто отбрасываться более старыми браузерами IE, поэтому он постепенно изменится.
источник
#hover:hover + #stuff {
на#hover:hover + #stuff, #stuff:hover {
. Тогда div "stuff" остается видимым, когда вы перемещаетесь по этому div!Я знаю, что я эксперт, но я невероятно горжусь тем, что разработал что-то об этом коде. Если вы делаете:
(Обратите внимание на '>'). Вы можете содержать все это в теге, тогда, пока ваш триггер (который может быть в его собственном div, или прямо в теге, или что угодно) физически касается обнаруженный div, вы можете перемещать мышь от одного к другому.
Может быть, это бесполезно, но мне пришлось настроить раскрываемый div на переполнение: auto, поэтому иногда в нем были полосы прокрутки, которые нельзя было использовать, как только вы отойдете от div.
Фактически, после окончательной разработки того, как сделать обнаруженный div (хотя теперь он является дочерним по отношению к триггеру, а не сиблингу), сядьте за триггером с точки зрения z-index (с небольшой помощью с этой страницы : Как заставить родительский элемент отображаться над дочерним элементом ) вам даже не нужно переворачивать раскрытый элемент div, чтобы прокручивать его, просто продолжайте зависать над триггером и использовать свое колесо или что-то еще.
Мой раскрытый div покрывает большую часть страницы, поэтому эта техника делает ее намного более постоянной, а не мигает экраном из одного состояния в другое с каждым движением мыши. Это действительно интуитивно понятно, поэтому я действительно горжусь собой.
Единственным недостатком является то, что вы не можете поместить ссылки в целом, но вы можете использовать все это как одну большую ссылку.
источник
Этот ответ не требует, чтобы вы знали, какой тип отображения (встроенный и т. Д.) Должен быть скрываемым элементом при отображении:
Это использует соседний селектор брата и не селектор .
источник
Я хотел бы предложить это шаблонное решение общего назначения, которое расширяет правильное решение, предоставленное И Цзяном.
Дополнительные преимущества включают в себя:
В HTML вы размещаете следующую структуру:
В CSS вы размещаете следующую структуру:
Несколько моментов, на которые следует обратить внимание:
Наведите курсор на всплывающее окно
В качестве дополнительной информации. Когда всплывающее окно содержит информацию, которую вы можете вырезать и вставить, или содержит объект, с которым вы, возможно, захотите взаимодействовать, сначала замените:
с участием
И, во-вторых, отрегулируйте положение div.popup таким образом, чтобы оно совпадало с информацией div.in. Несколько пикселей достаточно для того, чтобы div.popup мог получать указатель при перемещении курсора от div.information.
Это не работает должным образом с Internet Explorer 10.0.9200 и работает должным образом с Opera 12.16, Firefox 18.0 и Google Chrome 28.0.15.
См. Fiddle http://jsfiddle.net/F68Le/ для полного примера с всплывающим многоуровневым меню.
источник
пожалуйста, проверьте этот код
источник
+
Позволяют «выбрать» только первый не вложенный элемент, то>
выберите только вложенные элементы - тем лучше для использования ,~
которые позволяют выбрать произвольный элемент , который является дочерним родительским парили элемент. Используя непрозрачность / ширину и переход, вы можете обеспечить плавный видисточник
Для меня, если я хочу взаимодействовать со скрытым div, не видя, как он исчезает каждый раз, когда я оставляю инициирующий элемент (в данном случае a), я должен добавить:
источник
Исходя из основного ответа, это пример, полезный для отображения всплывающей подсказки с информацией при нажатии на
?
ссылку рядом:источник
Из моего тестирования с использованием этого CSS:
И этот HTML:
Это привело к тому, что он расширяется с использованием второго, но не расширяется с использованием первого. Так что, если между целью наведения и скрытым div есть div, он не будет работать.
источник
HTML
CSS
CodePen: наведите курсор на элемент div, чтобы отобразить текст в другом элементе div
источник
Не забывай если вы пытаетесь навести курсор на изображение, вы должны поместить его вокруг контейнера. CSS:
Если вы наведите курсор на это:
Это покажет:
источник