:hover - CSS(层叠样式表) 编辑

概要

:hover CSS伪类适用于用户使用指示设备虚指一个元素(没有激活它)的情况。这个样式会被任何与链接相关的伪类重写,像:link, :visited, 和 :active等。为了确保生效,:hover规则需要放在:link和:visited规则之后,但是在:active规则之前,按照LVHA的循顺序声明:link-:visited-:hover-:active。

:hover伪类可以任何伪元素上使用。

用户的可视客户端比如Firefox, Internet Explorer, Safari, Opera or Chrome, 会在光标(鼠标指针)悬停在元素上时提供关联的样式。

注意: 在触摸屏上 :hover 有问题,基本不可用。不同的浏览器上:hover 伪类表现不同。 可能从不会触发;或者在触摸某元素后触发了一小会儿;或者总是触发即使用户不在触摸了,直到用户触摸别的元素。 触摸屏非常普遍,所以网页开发人员不要让任何内容只能通过悬停才能展示出来,不然这些内容对于触摸屏使用者来说是很难或者说不可能看到。

语法

:hover

示例

:link:hover { outline: dotted red; }

.foo:hover { background: gold; }

下拉按钮

使用:hover 伪类可以创建复杂的层叠机制。一个常见用途,比如,创建一个纯CSS的下拉按钮(不使用JavaScript)。 本质是创建如下的CSS:

div.menu-bar ul ul {
  display: none;
}

div.menu-bar li:hover > ul {
  display: block;
}

HTML内容如下:

<div class="menu-bar">
  <ul>
    <li>
      <a href="example.html">Menu</a>
      <ul>
        <li>
          <a href="example.html">Link</a>
        </li>
        <li>
          <a class="menu-nav" href="example.html">Submenu</a>
          <ul>
            <li>
              <a class="menu-nav" href="example.html">Submenu</a>
              <ul>
                <li><a href="example.html">Link</a></li>
                <li><a href="example.html">Link</a></li>
                <li><a href="example.html">Link</a></li>
                <li><a href="example.html">Link</a></li>
              </ul>
            </li>
            <li><a href="example.html">Link</a></li>
          </ul>
        </li>
      </ul>
    </li>
  </ul>
</div>

CSS-based dropdown menu example 看示例.

可全图预览的画廊 

:hover 伪类可以让你实现一个当鼠标悬停在图片上时全图预览的画廊功能。 在 this demo 看示例。

注意: 一个类似的效果,是基于 :checked伪类(用于隐藏单选框)实现的,看 this demo,源于 En/CSS/:checked

规范

SpecificationStatusComment
Selectors Level 4
:hover
Working DraftCan be applied to any pseudo-element.
Selectors Level 3
:hover
RecommendationNo significant change.
CSS Level 2 (Revision 1)
:hover
RecommendationInitial definition.

浏览器兼容性

We're converting our compatibility data into a machine-readable JSON format. This compatibility table still uses the old format, because we haven't yet converted the data it contains. Find out how you can help!
FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari
for <a> elements0.21.0 (1.7 or earlier)4.04.02.0.4 (419)
various bugs before
for all elements0.21.0 (1.7 or earlier)7.07.02.0.4 (419)
various bugs before
for pseudo-element?28 (28)???
FeatureAndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Basic support?????

在IE8-11中,将鼠标指针悬停于一个元素上上下滚动页面而不移动光标会让元素停留在 :hover 的状态直到鼠标移动。详见 IE bug 926665.

在IE9(或是更早的版本中),如果如果一个 <table>元素 有一个  non-auto width 和 overflow-x: auto; 的父对象,而且这个 <table>元素有足够多的内容以至于溢出它的父元素,同时表中的元素有 :hover的样式,那么悬停在其上会使这个<table>元素的高度增大。这是一个 显示该错误的demo 。一个避免这个错误的方法是在这个表格的父元素为 min-height: 0%;(必须强调是百分比形式,0 和 0px 都不会起作用)。这也是在 jQuery ticket #10854 提交过的错误,但是并没有被解决,因为这不被认为是 jQuery 的错误。

至于iOS 7.1.2 中的Safari Mobile,点击一个可以点击的元素会使这个元素进入:hover的状态,而这个元素会保持悬停状态直到另一个元素进入:hover状态。

另请参见:

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

词条统计

浏览:75 次

字数:12555

最后编辑:7 年前

编辑次数:0 次

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文