html - 为什么我的下拉内容在 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 上使用?
解决方案
虽然按钮不能有 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>
推荐阅读
- react-native - React Native 动态地将组件推入和推出屏幕
- python - Groupby 和 collect_list 基于 PySpark 中的另一列维护顺序
- mysql - 是否有正确的方法连接到 MySQL?
- python - 使用 Python 解析 XML 时跳过“嵌套标签”
- yii - Yii2 ValidatePage 在错误的页码上给出空输出
- python - 使用flask sqlalchemy将数据从源数据库导入目标数据库
- c# - 一次读取 MQ 中的所有消息
- drupal - Drupal 8:如何基于 Ajax 回调生成选项
- python - 在python中读取.dat文件
- flutter - 在颤动中设置小部件对齐方式