首页 > 解决方案 > 为什么我的下拉内容在 Safari 上不起作用?

问题描述

我做了一个这样的下拉导航栏

<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">

<style>



.dropbtn {
  background-color: black;
  display: block;
  overflow: hidden;
  font-size: 16px;  
  color: white;
  padding: 14px 16px;
  margin: auto;
  max-width:100px;
 

}
 .dropbtn:hover  {
  background-color: red;
}

.dropdown-content {
  display: none;
  position: absolute;
  background-color: #c9c9c9;
  min-width: 100px;
  z-index: 1;
}

.dropdown-content a {
  float: none;
  color: black;
  padding: 12px 16px;
  text-decoration: none;
  display: block;
  text-align: left;
}

.dropdown-content a:hover {
  background-color: #ddd;
}

.dropbtn:hover .dropdown-content {
  display: block;
}
</style>
</head>
<body>
    <div class="dropbtn">Dropdown 
    <div class="dropdown-content">
      <a href="#">Link 1</a>
      <a href="#">Link 2</a>
      <a href="#">Link 3</a>
    </div>
    </div>
 


<h3>Dropdown Menu inside a Navigation Bar</h3>
<p>Hover over the "Dropdown" link to see the dropdown menu.</p>

</body>
</html>

但是当我在 iPhone 上的 Safari 中打开这个网站时,我无法使用下拉菜单,它不起作用。但是,如果我将 .dropbtn 设为按钮而不是 div 它可以工作,但现在验证器除了按钮之外没有 div 和 a 作为子级。如何更改代码以使网站有效并且可以同时在 Safari 上使用?

标签: htmlcssmobile-safari

解决方案


虽然按钮不能有 div 或锚元素作为子元素,但它们可以有 span 元素。

以下代码段通过了 W3C 验证。是黑客吗?

可能,给定的按钮元素不应该具有交互式内容后代。参见例如将 <div> 或 <span> 放在 <button> 内是否在语义上不正确?供讨论和参考。

另一方面,它让我们以最少的改动和最少的 JS 解决了触摸屏上的问题。

<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">

<style>



.dropbtn {
  background-color: black;
  display: block;
  overflow: hidden;
  font-size: 16px;  
  color: white;
  padding: 14px 16px;
  margin: auto;
  max-width:100px;
 

}
 .dropbtn:hover  {
  background-color: red;
}

.dropdown-content {
  display: none;
  position: absolute;
  background-color: #c9c9c9;
  min-width: 100px;
  z-index: 1;
}

.dropdown-content a {
  float: none;
  color: black;
  padding: 12px 16px;
  text-decoration: none;
  display: block;
  text-align: left;
}

.dropdown-content a:hover {
  background-color: #ddd;
}

.dropbtn:hover .dropdown-content, button span {
  display: block;
}
</style>
</head>
<body>
    <button class="dropbtn">Dropdown
    <span class="dropdown-content">
      <span onclick="window.location = 'Wherever';">Link 1</span>
      <span onclick="" >Link 2</span>
      <span onclick= "">Link 3</span>
    </span>
    </button>
   <div id='id1'>id1</div>


<h3>Dropdown Menu inside a Navigation Bar</h3>
<p>Hover over the "Dropdown" link to see the dropdown menu.</p>

</body>
</html>


推荐阅读