Css 使用带“溢出”的全宽滚动条;位置:绝对“;
我想在一个固定的顶部位置有一个全宽的红色小div,在另一个有Css 使用带“溢出”的全宽滚动条;位置:绝对“;,css,google-chrome,overflow,css-position,Css,Google Chrome,Overflow,Css Position,我想在一个固定的顶部位置有一个全宽的红色小div,在另一个有溢出:滚动的div内。我希望JSFIDLE能清楚地说明: 问题是红色div与滚动条重叠。我猜right:0表示div.wrapper的右侧;它不会减去div.main的滚动条。当我将溢出:滚动到div.wrapper中时,红色横幅的大小合适()。但是,它不再位于固定位置(向下滚动会使横幅向上滚动) 我怎样才能同时做到以下两件事 红旗位于固定位置,如中所示 除了滚动条(如中所示)外,红色横幅具有全宽 我想让它在谷歌浏览器上运行 HTM
溢出:滚动的div内。我希望JSFIDLE能清楚地说明:
问题是红色div与滚动条重叠。我猜right:0
表示div.wrapper
的右侧;它不会减去div.main
的滚动条。当我将溢出:滚动到div.wrapper
中时,红色横幅的大小合适()。但是,它不再位于固定位置(向下滚动会使横幅向上滚动)
我怎样才能同时做到以下两件事
- 红旗位于固定位置,如中所示
- 除了滚动条(如中所示)外,红色横幅具有全宽
我想让它在谷歌浏览器上运行
HTML:
HTML
<div class="scroller">
<div class="banner-wrapper">
<div class="banner"></div>
</div>
</div>
<div class="main">
<div class="item">foo</div>
<div class="item">foo</div>
<div class="item">foo</div>
<div class="item">foo</div>
</div>
开发版本:
最终版本:
可用于缩放和可变视口宽度。
!错误:右上角的滚动条按钮不可访问/单击
测试地点:
- IE6,7,8,9(windows)
- FF11(窗口)
- 谷歌Chrome18(ubuntu)
- Safari 5.1(OSX)
纯CSS似乎不可能做到这一点,因此这里有一个JavaScript(jQuery)黑客:
非常感谢,但是文本现在与横幅重叠。这个想法是横幅与文本重叠(就像小提琴一样)。您知道这是否可行吗?这并不能解决问题,它只是将滚动的元素放在条上。@pimvdb所以最后CSS唯一的解决方案:。我现在将用新的信息编辑我的答案,告诉你如何使用它。您可能需要根据需要替换DataURI。是的,谢谢!我使用的是
-webkit gradient
,如果我将其插入到您的代码中,效果会非常好:。它确实需要硬编码横幅的宽度,但是哦,好吧。@pimvdb酷!这让我很高兴!它也可以使用可变宽度,我明天可能会发现。不需要使用calc
,只需将设置为right
,设置为right:SCROLLBAR\u WIDTH+“px”
@Qtax:Woops,我一定看了太久了。谢谢@两者:我接受了这个答案,因为这是唯一没有副作用的解决方案。我比你们两个都投了更高的票;谢谢你的帮助。为什么不把滚动的元素放在条下面呢?喜欢这是我看到的唯一可以做到这一点的简单方法。在我的实际应用程序中,我有一个从白色到透明的渐变,而不是红色,这样对从容器中滚动出来的文本有很好的效果。不幸的是,这种方式不可能产生这种效果,因为横幅/容器是分开的。@pimvdb,我明白了,我猜你会遇到麻烦(如果你想避免JS)。也许你可以使用Chrome支持的样式化CSS滚动条,这至少会给你一个固定的宽度。或者可能有一些不错的CSS3破解。您可以更改right
属性以匹配滚动条宽度。。。需要JS确保任何滚动条都能正确测量。@Gaby aka G.Petrioli:是的,这很有效,谢谢。不过,这不是很令人满意。如果没有任何CSS的答案,我会继续这样做。
div.wrapper {
position: relative;
}
div.main {
height: 200px;
overflow-y: scroll;
}
div.item {
border: 1px solid black;
margin: 20px;
padding: 20px;
}
div.red-banner {
background-color: red;
position: absolute;
left: 0;
top: 0;
right: 0;
height: 20px;
}
<div class="scroller">
<div class="banner-wrapper">
<div class="banner"></div>
</div>
</div>
<div class="main">
<div class="item">foo</div>
<div class="item">foo</div>
<div class="item">foo</div>
<div class="item">foo</div>
</div>
* { margin: 0; padding: 0 }
body {
padding-top: 30px;
}
div.main {
height: 200px;
width: 100%;
overflow-y: scroll;
position: absolute;
z-index: 50;
background: -webkit-gradient(linear, center top, center bottom, from(white), to(rgba(255,255,255,0)));
}
div.item {
border: 1px solid black;
margin: 20px;
padding: 20px;
}
div.scroller {
height: 20px;
width: 100%;
position: absolute;
z-index: 100;
overflow: hidden;
}
div.banner-wrapper {
background: transparent;
position: relative;
height: 20px;
overflow-y: scroll;
left: 0;
margin-right: -20px;
}
div.banner {
height: 20px;
background: -webkit-gradient(linear, center top, center bottom, from(white), to(rgba(255,255,255,0)));;
margin-left: 20px;
margin-right: 40px;
}
$(function() {
var $container = $("<div>").css({ height: 1, overflow: "scroll" }).appendTo("body");
var $child = $("<div>").css({ height: 2 }).appendTo($container);
window.SCROLLBAR_WIDTH = $container.width() - $child.width();
$container.remove();
});
$("div.red-banner").css({
right: SCROLLBAR_WIDTH
});