- 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/
我有一个功能是转换 ADO Recordset 进入html: class function RecordsetToHtml(const rs: _Recordset): WideString; 该函
经过几天的研究和讨论,我想出了这种方法来收集访客的熵(你可以看到我的研究历史here) 当用户访问时,我运行此代码: $entropy=sha1(microtime().$pepper.$_SERVE
给定一个无序列表 List ,我需要查找是否存在 String与提供的字符串匹配。 所以,我循环 for (String k : keys) { if (Utils.keysM
我已经搜索过这个问题,但没有找到我正在寻找的答案。 基本上,我想将类构造函数包装在 try/except 子句中,以便它忽略构造函数内特定类型的错误(但无论如何都会记录并打印它们)。我发现做到这一点的
我有一组三个数字,我想将一组数字与另一组数字进行比较。即,第一组中的每个数字小于另一组中的至少一个数字。需要注意的是,第一组中的下一个数字必须小于第二组中的不同数字(即,{6,1,6} 对 {8,8,
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 9 年前。 Improve this
首先介绍一下背景: 我正在开发一个带有 EJB 模块和应用程序客户端模块的企业应用程序 (ear)。我还使用 hibernate JPA 来实现持久性,并使用 swingx 来实现 GUI。这些是唯一
我正在尝试在我的上网本上运行 Eclipse 以便能够为 Android 进行开发。 您可能已经猜到了,Eclipse 非常慢,并且不容易有效地开发。 我正在使用 Linux Ubuntu 并且我还有
for row, instrument in enumerate(instruments): for col, value in enumerate(instrument):
return not a and not b ^ 我如何以更好的格式表达它 最佳答案 DeMorgan's Law , 也许? return not (a or b) 我认为在这一点上已经足够简单了
我正在尝试让 Font Awesome 图标看起来更 slim https://jsfiddle.net/cliffeee/7L6ehw9r/1/ . 我尝试使用“-webkit-text-strok
假设我有一个名为 vals 的数据框,如下所示: id…………日期…………min_date…… .........最大日期 1…………2016/01/01…………2017/01/01…………2018/
是否有更 Pythonic 的方式来做到这一点?: if self.name2info[name]['prereqs'] is None: se
我有一个函数可以将一些文本打印到它接收到的 ostream&。如果 ostream 以终端为目标,我想让它适应终端宽度,否则默认为某个值。 我现在做的是: 从 ostream 中获取一个 ofstre
这个问题在这里已经有了答案: Should a retrieval method return 'null' or throw an exception when it can't produce
我有这个 bc = 'off' if c.page == 'blog': bc = 'on' print(bc) 有没有更 Pythonic(和/或更短)的方式在 Python 中编写? 最佳
输入:一个包含 50,000 行的 CSV;每行包含 910 列值 0/1。 输出:运行我的 CNN 的数据框。 我编写了一个逐行读取 CSV 的代码。对于每一行,我将数据分成两部分,称为神经元(90
据我所知,with block 会在您退出 block 后自动调用 close(),并且它通常用于确保不会忘记关闭一个文件。 好像没有技术上的区别 with open(file, 'r+') as f
我有一个使用 Entity Framework V6.1.1 的 MVC 5 网站。 Entity Framework DbContext 类和模型最初都在网站项目中。这个项目有 3 个 DbCont
我是编程新手,在尝试通过将 tableView 和关联 View 的创建移动到单独的类并将委托(delegate)和数据源从 VC 移动到单独的类来精简我的 ViewController 时遇到了一些
我是一名优秀的程序员,十分优秀!