html - 由于缺少滚动条,全屏导航跳转
问题描述
我有一个带有全屏覆盖导航的站点,当触发时会隐藏html
元素上的溢出。这是为了在导航打开时停止滚动导航后面的页面。
剥离 SCSS(当 nav 处于活动状态时)如下所示:
html.nav-is-active {
overflow: hidden
}
nav.active {
display: block;
position: fixed;
top: 0;
left: 0;
width: 100vw;
height: 100vh;
z-index: 1600000;
}
我的问题是当导航打开时,滚动条消失导致页面跳转 - 这尤其令人迷惑,因为导航覆盖层上有一个关闭按钮,它应该与网站上的菜单按钮对齐。
我的问题是我怎样才能最好地解决这个问题?我可以overflow:hidden
从html
元素中删除 以保留滚动条,但这意味着当导航打开时,网站可能会无意中滚动。
任何帮助表示赞赏
麦克风
解决方案
这真的很hacky,但它应该做你想做的......
html {
overflow-y: hidden;
}
body {
overflow-y: scroll; // causes an empty scrollbar
height: auto; //set height = content so body can't overflow
}
您可以以相同的方式在叠加层中使滚动条可见。
或者,如果您可以计算出滚动条的宽度(在 Mac 上通常为 15 像素,我认为在 Win 10 中类似),您可以从覆盖大小中减去或添加填充。这比将覆盖设置为稍好一些,overflow-y: scroll
因为它不会导致在小屏幕上的覆盖内滚动。
nav.active {
width: calc(100vw - 15px); // could be done with javascript
}
推荐阅读
- vue.js - 如何在 Vuex 的操作中获取 nuxt 配置
- tensorflow - 为什么要在 CNN 之前调整数据集图像的大小,因为它会拉伸它们?
- indexing - 索引大量字符串
- sql - Oracle SQL - “更改”之前的最后一个值
- c# - 启用以使 ReactiveUI 开始工作 (WPF)
- amazon-web-services - AWS Cloud Map 和 AWS App Config 有什么区别
- javascript - 如何通过单击从 JavaScript 列表中删除项目?
- powershell - 无法在 Powershell 中将 Get-AzADUser 作为托管标识执行
- java - 相同的应用程序在两台机器中表现不同
- dns - 将 Vanity Nameservers 迁移到 AWS Route53?