CSS :hover 在 iOS Safari 和 Chrome 上不起作用

CSS :hover not working on iOS Safari and Chrome

我有一个圆形的 div,它有一个圆形的图像和底部的标题 opacity: 0.5; 悬停时不透明度应该变为 1。它在所有桌面浏览器和 Firefox 上工作正常 iOS 但它不适用于 Safari,也不适用于 iOS。

Chrome

Fiddle: https://jsfiddle.net/a10rLbnL/2/

HTML:

<div class="video_wrap update">
  <div class="content">
    <div class="img_wrap"><img src="https://i.ytimg.com/vi/0HDdjwpPM3Y/hqdefault.jpg"></div>
    <div class="title_wrap"><div class="title">bang bang</div></div>
  </div>
</div>

CSS:

.video_wrap {
    display: inline-block;
    width: 30%;
    padding-bottom: 30%;
    margin: 0 1%;
    position: relative;
    vertical-align: top;
}

.content {
    position: absolute;
    height: 100%;
    width: 100%;
}

.img_wrap {
    height: 100%;
    border-radius: 120px;
    overflow: hidden;
}

.title_wrap {
    line-height: 50px;
    top: -50px;
    height: 50px;
    position: relative;
    left: 0px;
    background: #fff;
    color: #f8008c;
    font-size: 12px;
    text-align: center;
    cursor: default;
    opacity: 0.5;
    transition: all .5s ease-in;
    min-height: 50px;
}

.img_wrap img {
    height: 100%;
    cursor: pointer;
}

.title_wrap:hover {opacity: 1}

我找到了一个解决方法:如果您将 onclick="" 添加到 div,悬停将起作用。

您的 html 将是:

<link rel="stylesheet" href="hover.css" type="text/css"/>

<div class="video_wrap update">
  <div class="content">
    <div class="img_wrap"><img src="https://i.ytimg.com/vi/0HDdjwpPM3Y/hqdefault.jpg"></div>
    <div class="title_wrap" onclick=""><div class="title">bang bang</div></div>
  </div>
</div>

iOS 浏览器需要一个默认可点击的元素。如果您使用 HTML5,您可以将包装器 div 更改为 a-tag:

<a href="javascript:void(0);" class="title_wrap"><div class="title">bang bang</div></a>

并将其设置为块元素:

.title_wrap {
  ...
  display:block;
}

如果您不使用 HTML5,则必须将 <div class="title"> 更改为内联元素,例如 <span class="title">,这样代码才有效。

解决方案:

如果您希望 :hover:focus 起作用,请使用 tabindex="0"


解释:

问题是 <div> 在自然状态下不是 可聚焦的 元素。

许多元素常见于 HTML 形式,如 <input><button> focusable ,但其他常见于外部形式的元素如 <div><li> 则不是。

如果你想让一个元素可聚焦,而通常情况下,它是不能被聚焦的,有很多方法可以实现这个结果。

正如本页的一个回答所述,onclick="" 将使元素 可聚焦

但是标准使元素可聚焦的方法是使用tabindex="0"


进一步阅读: