Ipad 上的下拉菜单 css / js

2024-01-12

我正在开发一个带有简单且纯 CSS 下拉菜单的网站。该网站应该在台式机和 iPad 上使用。我的下拉菜单使用:hover触摸屏上出现伪类和问题:菜单展开良好,但永远不会折叠。关闭它的唯一方法是从同一下拉菜单中打开另一个子菜单。我的目标是当我触摸菜单中的任何位置时我的菜单会崩溃DOM(当然菜单中除外)。经过多次研究,我们似乎无法做到这一点css /questions/tagged/css, js /questions/tagged/js是强制性的。我是一个初学者,我对 JS 没有任何技能,是否可以只用几个香草来做到这一点js /questions/tagged/js线路?我不想使用jquery /questions/tagged/jquery。这是我的代码:

/* ========================================================================= */
/* Global styles                                                             */
/* ========================================================================= */
html {
    box-sizing: border-box;
    font-size: 62.5%;
}

*, *:before, *:after {
    margin: 0;
    padding: 0;
    box-sizing: inherit;
}

body, input {
    font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
}

img {
    border: none;
}


/* ========================================================================= */
/* Layout styles                                                             */
/* ========================================================================= */
body > header, body > main {
    margin: auto;
}

body > header {
    padding-top : 20px;
    width: 768px;
}

body > header > img {
    width: 150px;
    margin-left: 10px;
}


/* ========================================================================= */
/* Nav styles                                                                */
/* ========================================================================= */
body > header > nav {
    min-width: 768px;
    margin: 0 auto;
    padding-top: 20px;
    font-size: 1.5em;
    text-align: center;
}

nav > ul ul {
    position: absolute;
    display: none;
    text-align: left;
}

nav li {
    width: 150px;
}

nav > ul > li {
    display: inline-block;
}

nav a {
    display: block;
    text-decoration: none;
}

nav > ul > li > a {
    padding: 10px 0;
    color: #44546A;
}

nav > ul ul li {
    background-color: #333F50;
    list-style-type: none;
}

nav > ul ul li a {
    padding: 10px 0 10px 30px;
    color: #FAFAFA;
    font-size: 0.9em;
}

nav > ul li:hover ul {
    display: block;
}

nav > ul ul li:hover {
    background-color: #51647f;
}
<!DOCTYPE html>
<html>
    <head>
        <base href="/"/>
        <meta charset="UTF-8"/>
        <title>Test Title</title>
        <meta name="viewport" content="width=device-width, initial-scale=1"/>
        <link rel="stylesheet" type="text/css" href="css/normalize.css"/>
        <link rel="stylesheet" type="text/css" href="css/styles.css"/>
    </head>
    <body>
        <header>
            <img src="img/test.svg" alt="test"/>
            <nav>
                <ul>
                    <li>
                        <a href="#">Menu 1</a>
                        <ul class="subMenu">
                            <li>
                                <a href="#">SubMenu 1.1</a>
                            </li>
                        </ul>
                    </li>
                    <li>
                        <a href="#">Menu 2</a>
                        <ul>
                            <li>
                                <a href="#">SubMenu 2.1</a>
                            </li>
                            <li>
                                <a href="#">SubMenu 2.2</a>
                            </li>
                            <li>
                                <a href="#">SubMenu 2.3</a>
                            </li>
                        </ul>
                    </li>
                    <li>
                        <a href="#">Menu 3</a>
                        <ul>
                            <li>
                                <a href="#">SubMenu 3.1</a>
                            </li>
                        </ul>
                    </li>
                    <li>
                        <a href="#">Menu 4</a>
                        <ul class="subMenu">
                            <li>
                                <a href="#">SubMenu 4.1</a>
                            </li>
                        </ul>
                    </li>
                </ul>
            </nav>
        </header>
    </body>
</html>

编辑:该代码在平板电脑上运行良好,但在 iPad 上运行不佳


The :hover伪类在触摸屏设备上的行为有所不同。当用户触摸某个元素时,浏览器触发并保持状态:hover直到另一个伪类被触发。因此,当用户触摸页面上的另一个元素时,浏览器会触发不同的伪类,并且下拉菜单将被隐藏。大多数时候,它是:active被触发的伪类。

然而,正如上所解释的Safari 开发者库 https://developer.apple.com/library/content/documentation/AppleApplications/Reference/SafariWebContent/AdjustingtheTextSize/AdjustingtheTextSize.html, Mobile Safari 不会触发:active伪类,除非元素附加了触摸事件:

在 iOS 上,鼠标事件发送得非常快,以至于 永远不会收到关闭或活动状态。因此,:active仅当有触摸事件设置时才会触发伪状态 HTML 元素 - 例如,当在元素上设置 ontouchstart 时...

要解决此问题,您可以添加touchstart侦听您的文档以触发:active伪类:

document.addEventListener('touchstart', function() {});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ipad 上的下拉菜单 css / js 的相关文章

  • jquery/javascript 处理后移至命名锚点

    在进行一些 jquery 处理后 如何将焦点移动到同一页面上的不同部分 名为锚点 函数 ABC 进行一些处理 然后 我需要将用户移动到同一页面上的某个部分 页面下方 您可以使用下面的代码将屏幕滚动到 div 只需更改选择器以匹配您要滚动到的
  • JavaScript 中的 Promise.all:如何获取所有 Promise 的解析值?

    我编写了以下node js文件 var csv require csv parser var fs require fs var Promise require bluebird var filename devices csv var d
  • 在 AngularJS 中覆盖运行时的依赖关系

    我有一个服务叫 doggedHttp 它公开了与 http 现在我想创建一个 doggedResource服务是有角度的 resource服务之上 doggedHttp代替 http 换句话说我想注入 doggedHttp as the h
  • Angular 2 最终版本路由器单元测试

    如何使用 karma 和 jasmine 对 Angular 2 0 0 版中的路由器进行单元测试 这是我的旧单元测试在版本 2 0 0 beta 14 中的样子 import it inject injectAsync beforeEac
  • 如何滚动到 jQuery Mobile 中的页面元素?

    我有一个很长的 jQuery 移动页面 并且想在页面加载后滚动到该页面中间的元素 到目前为止 我已经尝试了一些事情 最成功的是 jQuery document bind mobileinit function var target if t
  • Backbone-relational 无法实例化两个 RelationalModel 对象

    我正在尝试实现 BackboneRelational 并不断获得 无法实例化多个 Backbone RelationalModel 每种类型都有相同的 ID class App Models User extends Backbone Re
  • HTML5 拖放 - 没有透明度?

    当我将一个元素拖放到页面上时 该元素会变成 幻影 基本上它获得了一些透明度值 有什么办法可以做到吗opacity 1 看来是做不到了 拖动的元素被放入具有自己的不透明度 低于 1 的容器中 这意味着虽然您可以降低拖动元素的不透明度 但您无法
  • 在 Chrome 中检索浏览器语言

    我一直在尝试让 momentjs 正确检测浏览器语言并本地化时间显示 按照使用 Moment js 进行区域设置检测 https stackoverflow com questions 25725882 locale detection w
  • RxJS - 从可观察对象中获取最后 n 个元素

    我想从可观察对象中获取最后 3 个元素 假设我的时间线是这样的 a b c d e f g h i j gt where a b c d e f g h i j are emitted values 每当发出新值时 我想立即获取它 因此它可
  • JavaScript - 这个这个

    String prototype foo String prototype foo bar function How can you reference the grandparent string console log this par
  • 显示带有 jQ​​uery-ui 自动完成功能的微调器

    我一直在到处搜索 但没有看到有人这样做 是否有可能拥有某种带有 jQ uery UI 自动完成功能的旋转器 加载器 1 8 获取数据时 我的解决方案是使用 ui autocomplete loading CSS 类 该类在 ajax GET
  • 将 javascript 变量发送到服务器端 ASP .NET

    我需要在回发时将 JavaScript 数据传递到服务器端 Exvar jsVariableToPass new Object jsVariableToPass key1 value1 jsVariableToPass key2 value
  • 在javascript中定义Date.parse的格式[重复]

    这个问题在这里已经有答案了 我正在使用 Date parse 将字符串转换为 JavaScript 中的日期 但是 如果字符串看起来像 10 11 2016 它会被解释为 2016 年 10 月 11 日 我需要将其解释为 2016 年 1
  • 可选链接在 create-react-app 中不起作用

    In a create react app项目 我正在使用 babel plugin proposal optional chaining在我的 babelrc中 但是 我有这个错误 Module parse failed Unexpect
  • 如何在 Javascript 中将字符串数组转换为特定的树结构

    我从后端获取文件路径列表 它代表文件夹结构 如下所示 paths path to file1 doc path to file2 doc foo bar doc 路径的长度是任意的 为了使用文件树组件 角度2树组件 https github
  • 条件顺序仅在 init AngularJS 上执行

    如何在视图初始化时仅运行 orderBy 过滤器一次 我不希望我的列表在运行时被重新排序 li li 使用 orderBy 作为控制器中的过滤器 app controller DemoCtrl scope filter function s
  • JavaScript 右移负数

    这是片段 var i 101 console log 101 i toString 2 console log 101 gt gt 1 i gt gt 1 toString 2 var l 101 console log 101 l toS
  • 垃圾收集器不适用于 NodeJS / Chrome 中的类型化数组

    我最初将其记录为原项目中的一个问题 https github com nodejs help issues 3590 它立即转移到帮助主题 没有很好的解释 所以现在我想在这里提问 如果我们在 NodeJS v14 v16 v17 中运行以下
  • 使用 Promise 语法编写同步代码有什么好处吗?

    有同步承诺这样的概念吗 使用 Promise 语法编写同步代码有什么好处吗 try foo bar a b bam catch e handleError e 可以写成类似的东西 但使用同步版本then foo then bar bind
  • 将元素添加到 D3 圆包节点

    我正在尝试制作一个可缩放的圆形包装图 我希望每个子圆圈包含一个较小的图表 该图表始终具有相同的结构 即 4 列 只有条形的高度会改变 我尝试添加一个简单的rect到目前为止我的图表 但矩形没有添加到圆圈中并且是静态的 JS var marg

随机推荐

  • 将元素存储在内存中以防止过于频繁地更新 DOM?

    目前我有一个循环在每次迭代中更新 DOM 我知道这是一种不好的做法 您应该尽可能少地更新 DOM 以提高速度 所以我想知道如何编辑下面的内容 以便我可以将所有元素存储在一个元素或其他元素中 然后在循环结束后执行单个 DOM 添加 这是循环
  • 文本不会被 swift UI 包裹

    即使设置后 lineLimit nil 文本不会被换行 var body some View VStack alignment center Text SwiftUI is a modern way to declare user inte
  • 如何设置自定义单元格的角半径

    这是我的示例输出 其中下面的详细信息中有三个单元格 我为每个自定义单元格设置了角半径 但它无法正常工作 第一个单元格的角半径不起作用 第二个单元格的右上角和顶部左边正在工作 请说明为此做什么 void layoutSubviews supe
  • 临时变量的 C++ 生命周期 - 这安全吗?

    如果我正确理解临时对象生命周期的规则 那么这段代码应该是安全的 因为临时对象的生命周期stringstream in make string 持续到完整表达式结束 我不是 100 确信这里没有一个微妙的问题 但有人可以确认这种使用模式是否安
  • 子类化 UICollectionViewLayout 并分配给 UICollectionView

    我有一个 UICollectionViewController void viewDidLoad super viewDidLoad assign layout subclassed below self collectionView co
  • DebugDiag:如何手动注入 LeakTrack.dll

    我有一个来自生产的故障转储来识别内存泄漏 当我使用 DebugDiag v2 update 2 时 我收到一份报告 DebugDiag 没有检测到 w3wp DMP 中加载的 LeakTrack dll 因此没有泄漏 对此文件进行了分析 如
  • 错误:返回 void,return 关键字后面不能跟对象表达式

    private void QuestionAnswer Load object sender EventArgs e txtQuestion Enabled false txtQuestion BackColor Color White g
  • C 预处理器宏扩展

    我很难理解 C 预处理器在以下上下文中如何应用重写规则 我有以下宏 define A x A x define B x B x define X x x 这个想法是 每个宏都使用串联来创建一个新的表达式 它本身可以是一个宏 如果它是一个宏
  • Python3 硒问题

    我想通过以下方式抓取一些评论Web page https hotels ctrip com hotel 347422 html isFull F ctm ref hod sr lst dl n 1 8 当我尝试通过 Selenium 选择转
  • 如何单独使用 CSS 为 IE 和 Firefox 获得奇数/偶数着色?

    我的 Web 项目使用 php 但我需要单独使用 CSS 进行着色 因此我需要在 Firefox 和 Internet Explorer 中运行的代码 此代码已编写 但在 Internet Explorer 中不起作用 tbl css co
  • C 中指针的 const 用法

    我正在复习 C 有一个关于const与指针一起使用 我理解下面的代码 const char someArray 这是定义一个指向 char 类型和const修饰符意味着存储在someArray无法更改 然而 下面这句话是什么意思呢 char
  • 重复声明 TypeScript Getter Setter

    我正在尝试为 TypeScript 中的字段创建 getter 和 setter searchFilter string get searchFilter string return this searchFilter set search
  • 在 Windows 10 上安装 SQL Server 2017 开发人员版时出现“哎呀”错误

    我正在尝试使用 基本 安装类型安装 SQL Server 2017 Developer 版本 但它给出以下错误消息 Oops 无法安装 SQL Server setup exe 它尝试安装的构建版本是14 1710 3866 2 我已经尝试
  • 告诉 gradle 绕过依赖检查

    我在客户站点 位于防火墙后面 我正在尝试编译 但 gradle 一直在尝试检查我的依赖项 公司防火墙明确阻止 Maven 下载 因此我的构建失败 现在我之前已经编译过 所以依赖项确实已经存在于我的 user gradle 文件夹中 但已经超
  • silverlight 和 DataContractSurrogates 中都存在该类型

    我正在使用 silverlight 4 和 ria 服务 我收到一个错误说 类型 eLab Web SessionsHWFile 同时存在于 eLab Web dll 和 DataContractSurrogates c96b3601 cd
  • Excel-VBA 从文本文件导入模块(无需信任中心)

    我正在尝试创建一个自定义的子程序和函数库 在网络位置中另存为 txt 文件 我正在创建的工作簿的各个用户可以根据他们选择的用户表单函数导入它们 工作簿的用户只能通过用户表单使用工作簿 我不想要求他们修改其安全信任中心设置以使此导入库代码正常
  • servlet 的通配符路径?

    拥有一个 WebServlet urlPatterns myServlet 如果用户去myapp myServlet other 我仍然希望我的 servlet 能够捕获 也就是说 在 servlet 路径之后使用通配符 我怎么能这样做呢
  • 如何在 .NET 3.5 Web 应用程序中安装和使用 ASP.NET AJAX Control Toolkit?

    我如何让它与我的项目一起工作 http ajax asp net http ajax asp net http www codeplex com AjaxControlToolkit http www codeplex com AjaxCo
  • 尝试更改 github 页面的源时无法选择 master 分支/docs 文件夹

    感谢您花时间帮助我 我正在尝试发布我的 HTML 网站 但它不允许我使用 master 分支 文档文件夹 现在我在链接中使用我的用户名 如下所示 https djcinoj github io token sale 我知道它说 如果您想使用
  • Ipad 上的下拉菜单 css / js

    我正在开发一个带有简单且纯 CSS 下拉菜单的网站 该网站应该在台式机和 iPad 上使用 我的下拉菜单使用 hover触摸屏上出现伪类和问题 菜单展开良好 但永远不会折叠 关闭它的唯一方法是从同一下拉菜单中打开另一个子菜单 我的目标是当我