- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在开发一个涉及大量滚动、利用粘性定位的 Web 界面,除了一个小细节外,它的工作效果非常好。下面是一个极简主义的例子。你可以try it on CodePen查看即时贴在水平和垂直滚动时的工作原理。
<header>
<nav>
<ul id=menu class=flex><li><a href="#">Menu bar item</a></li></ul>
</nav>
<div class=flex>
<div id=button>Button</div>
<div id=bar>Bar wider than the window</div>
</div>
</header>
<main class=flex>
<div id=leftbar></div>
<div id=content></div>
</main>
* {line-height: 2em; background-position: center center}
body {margin: 0; padding: 0}
body, a {color: #fff}
ul,li {margin: 0; padding: 0; list-style-type: none}
.flex {display: flex}
.flex > * {flex: 0 0 auto}
header {display: block; position: sticky; top: 0; left: 0; z-index: 1;
width: min-content; min-width: 100%; background: #000066}
#menu {flex-wrap: wrap; position: sticky; left: 0; width: 100vw;
background: #006600}
#button {position: sticky; left: 0; width: 4em; background: #000066}
#bar {width: 150vw}
main {min-height: 100vh} /* Ensure scrollbar */
#leftbar {position: sticky; left: 0; width: 4em; background: #444444}
#content {width: 150vw}
/* Background grid to visualize scrolling parts */
#bar, #leftbar, #content {
background-image: url(data:image/gif;base64,R0lGODlhEAAQAIABAO7u7v///yH5BAEKAAEA
LAAAAAAQABAAAAIdhI9pwe0PnnRxzmphlniz7oGbmJGWeXmU2qAcyxQAOw==)}
问题出在最顶层的菜单栏,它应该像固定标题一样始终保持在原位,但必须是粘性的。 100vw 宽度完美工作,直到一直滚动到右侧。此时,菜单栏的最左侧部分滚出 View ,可能是由于垂直滚动条未计入 100vw。
固定定位是不可能的,因为菜单栏的高度会变化,所以这需要一堆非常丑陋的 JS 读取 offsetHeight
并在每次 DOM 更改后移动下面的元素– 呸!
肯定有办法在纯 CSS 中或通过更改文档结构来解决这个小问题吗?
编辑: 我看到 JS 解决方案开始涌入,所以让我们用这 3 行 JS 来阻止它,它可以轻松解决问题。我只是更喜欢 CSS/HTML 解决方案,以避免将来出现代码维护问题。
var f=function() {document.getElementById('menu').style.width=document.body.clientWidth+'px';};
window.addEventListener('DOMContentLoaded',f);
window.addEventListener('resize',f);
最佳答案
如评论中所述,问题是 100vw 包含滚动条宽度。对此没有真正优雅的解决方案,但解决方法是将 #menu
宽度减小到 99vw,然后用具有相同背景颜色的伪元素填充空白区域。
#menu {
width: 99vw;
background: #006600;
}
#menu:before {
content: '';
width: 5vw;
left: 100%;
top: 0;
bottom: 0;
position: absolute;
background: inherit;
}
请注意,这仅在您的 #menu
上有平坦的背景色(无图像,无透明度)时有效,所以我不确定它是否对您的情况有帮助,但它是我能想到的最佳跨浏览器解决方案。
关于html - 如何防止窗口范围内的粘性元素在更宽的 block 内滚动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55849939/
如果附加了 'not-scroll' 类,我希望我的 body 不滚动,否则它应该正常工作。 我已经搜索这个问题两天了,但找不到任何适合我的解决方案。 我想要的是向 body 添加一个 class,并
我发现似乎是 iOS Safari 中的错误(我正在 iOS 8 上进行测试)。当绝对定位的 iFrame 漂浮在一段可滚动内容上方时,滚动 iFrame 也会滚动下面的内容。以下 HTML (ava
我有以下代码来显示一系列投资组合图片,这些图片以 SVG 格式存储在滚动 div 中: 在 Safari 中滚动使用两根手指或鼠标滚轮当光标位于 SVG 之一上时不起作用。 该页
我想用 javascript 做的是: 一旦你向下滚动页面,将#sidebar-box-fixed 的位置从 position: relative; 更改为定位:固定;。改回position:rela
我对 Elasticsearch 的滚动功能有点困惑。在 elasticsearch 中,每当用户在结果集上滚动时,是否可以每次调用搜索 API?来自文档 "search_type" => "scan
我试图做到这一点,以便当我向上或向下滚动页面时,它会运行不同的相应功能。我发现了一个类似的问题here但我已经尝试了他们的答案并且没有运气。 注意:此页面没有正常显示的滚动条。没有地方可以滚动。 bo
(C语言,GTK库) 在我的表单上,我有一个 GtkDrawingArea 小部件,我在上面使用 Cairo 绘制 GdkPixbufs(从文件加载)。我想要完成的是能够在窗口大小保持固定的情况下使用
最近我一直在尝试创建一个拉到(刷新,加载更多)swiftUI ScrollView !!,灵感来自 https://cocoapods.org/pods/SwiftPullToRefresh 我正在努
我正在开发一个应用程序,其中有两个带有可放置区域的列表和一个带有可拖动项目的侧面菜单。 当我滚动屏幕时,项目的位置困惑。 我试图在谷歌上寻找一些东西,最后得到了这个问题:jQuery draggabl
我在 UIWebView 中加载了一个 HTML 表单,而我的 UIWebView 恰好从 View 的中间开始并扩展。我必须锁定此 webView 不滚动并将其放在 ScrollView 之上以允许
如何在每个元素而不是整个元素上应用淡入淡出(与其高度相比)? HTML: CSS: * { padding: 0; margin: 0; box-sizing: border
我想使用带有垂直轴的 PageView 并使用鼠标滚动在页面之间移动,但是当我使用鼠标滚动时页面不滚动...仅页面单击并向上/向下滑动时滚动。 有什么办法吗? 我想保留属性 pageSnapping:
我制作这个程序是为了好玩,但我被卡住了,因为程序在屏幕外运行。如何在不完全更改代码的情况下实现滚动条。 public static void main(String args[]) throws IO
我想使用带有垂直轴的 PageView 并使用鼠标滚动在页面之间移动,但是当我使用鼠标滚动时页面不滚动...仅页面单击并向上/向下滑动时滚动。 有什么办法吗? 我想保留属性 pageSnapping:
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
使用 jquery 技术从 css-tricks.com 获得滚动/跟随侧边栏,如果您不知道我在说什么,这里是代码: $(function() { var $sidebar = $
我是 jQuery Mobile 新手。我需要向我的应用程序添加 Facebook 滑动面板功能。 我经历了 sliding menu panel ,它工作正常,但我在菜单面板中的内容超出了窗口大小,
有没有办法在 js 或 jQuery 或任何其他工具中检测 ctrl + 滚动。我正在尝试执行一些动态布局代码,我需要检测不同分辨率下的屏幕宽度,我通过使用 setTimeout() 的计时器实现了这
我有一部分html代码:
我想控制 RichTextBox 滚动,但在控件中找不到任何方法来执行此操作。 这样做的原因是我希望当鼠标光标位于 RichTextBox 控件上时鼠标滚轮滚动有效(它没有事件焦点:鼠标滚轮事件由表单
我是一名优秀的程序员,十分优秀!