【问题标题】:Sticking side menu to top将侧面菜单固定在顶部
【发布时间】:2014-05-13 01:39:27
【问题描述】:

我一直在考虑在您滚动过去时将“div”粘贴到屏幕顶部,或者在页面到达屏幕顶部时让 div 与页面一起滚动。

我在尝试这个问题时遇到的问题是,使用 jquery 或简单的 css 更改为 position: fixed; 会从元素中删除浮动。

我的布局有点像这样:http://jsfiddle.net/ThSXm/33/ 更新

因此,当浮动被移除时,id="content" get 与侧边菜单重叠,使侧边菜单变得更大且不合适。

我需要一个解决方案,您不必更改元素的位置,或者如果我可以对内容 div 进行一些修复,以便在更改位置时不会重叠。

更新

Sandeeproop 设法帮我定位,但滚动问题仍然是个问题。

正如我在这个问题的评论中提到的,当 div 接近顶部或到达顶部时,div 必须滚动/粘贴到屏幕顶部(最好在 div 到达页脚或接近页脚),因为在我们到达侧边菜单之前还有更多的 div(页眉/幻灯片等),如果你只使用position: fixed,你将看不到菜单。

有什么想法吗?

/更新

期待一些答案!

//吉姆

【问题讨论】:

  • 你的意思是你想让div和你的窗口一起滚动?
  • @jhyap 要么让它在 div 几乎到达顶部时随窗口滚动,所以如果你添加更多 li,它不会被隐藏,或者让它粘在屏幕顶部。不管是哪一个。进入页面后,侧边菜单在页面上有点向下,因此是标题和图像幻灯片,因此必须在 div 到达或接近到达屏幕顶部时确定它。

标签: javascript jquery html css


【解决方案1】:

如果我理解你的问题是正确的。 请检查此fiddle

#nav {
  width: 136px;
  position: fixed;
  background: #FF0000;
  margin-left: 1em;
  margin-top: 1em;
}
#content{
  width: 80%;
  height: 600px;
  background: #FF9966;
  float: left;
  margin-left: 170px;
  margin-top: 1em;
}

【讨论】:

  • 这可行,但是使用它的问题是它不会响应,因为边距以像素为单位。我对手机和标签使用不同的,但即使是笔记本电脑和个人电脑也有不同的分辨率,你认为没有margin-left 是否可以做到这一点,或者你认为在em or % 中设置边距是否适用于响应式布局?
  • 另外,正如我在问题的评论中提到的那样,它必须是在侧面 div 接近或到达顶部时,因为有更多的 div 挡住了,你不会看到菜单如果你只使用'位置:固定'
【解决方案2】:

您可以为导航和内容元素设置固定的上边距值。 类似http://jsfiddle.net/ThSXm/26/

#nav {
    width: 15%;
    height: 100%;
    float: left;
    background: #FF0000;
    margin-left: 1em;
    margin-top: 60px;
}
#content{
    width: 80%;
    height: 600px;
    background: #FF9966;
    float: left;
    margin-left: 1em;
    margin-top: 60px;
}

【讨论】:

  • 这不是我想坚持的顶级 div,它是 Sande 所做的红色 div。
【解决方案3】:

我猜你正在寻找的是“位置:粘性”。 许多浏览器尚不支持此功能,但这里有一个 pollyfill http://philipwalton.github.io/polyfill/demos/position-sticky/

【讨论】:

  • 它不必是粘性的,我宁愿在顶部靠近它时侧边菜单随页面滚动。然后在接近页脚时停止。我相信这可以通过使用 jquery 或 jscript 来实现。我有一个适用于索引的代码补丁,但是一旦我加载没有幻灯片的下一页,菜单就会远远低于并且看不到。我会用 jquery 更新问题
【解决方案4】:

您是否考虑过在元素上使用 position:absolute 的解决方案? 让它保持绝对,直到你需要它坚持然后将其更改为固定。

这是一个简单的小提琴: http://jsfiddle.net/dXe97/

if ($(this).scrollTop() > boxTop) {
$box.css({
    'position':'fixed',
    'top': 0
    });
}else{
$box.css({
    'position':'absolute',
     'top': 150
});
};

.box 元素是绝对定位的,但是当您向下滚动通过该元素时,它会更改为固定并且其顶部值设置为 0,并且在您向上滚动时再次返回。

【讨论】:

  • 试过了,但它似乎对我不起作用,它是否需要元素的固定高度才能工作?我已经在使用绝对 atm。我不想在网站上修复任何东西以获得响应式设计。
猜你喜欢
  • 2015-02-04
  • 2012-01-07
  • 2014-03-03
  • 1970-01-01
  • 1970-01-01
  • 2012-10-27
  • 2014-07-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多