【问题标题】:Two fixed divs - right and left两个固定的 div - 左右
【发布时间】:2012-07-09 23:31:48
【问题描述】:

我想在我的网页上创建两个固定的 div。第一个应该在左边,第二个在右边。我创建了一些代码,但它并不完美。

演示here

我不知道如何纠正它。有什么解决办法吗?

【问题讨论】:

  • 在我看来,您实际上需要 3 个 div。一个在左边,一个在右边,一个在中间,用来存放文本内容。
  • 演示页面上的 jquery 代码设置为按照页面的行为方式工作。您是自己编写代码还是想根据自己的需要对其进行调整?
  • 不需要 jQuery 来做这个。
  • @undefined 不,它不能; CSS 不知道页面何时滚动,或者元素何时到达窗口顶部。您的意思是不需要 JS 将内容列居中滚动?
  • @undefined 在链接的示例中,div 仅在到达页面顶部时才开始滚动 - 但您是对的,实际问题中没有提到这一点

标签: jquery css positioning fixed


【解决方案1】:

通过向#main 提供等于固定列宽度的margin,它可以防止该区域向左折回。当您将position:fixed 应用于列时,它会将这些元素从文档流中移除。

由于position:fixed 被动态应用于列(通过使用JS),如果仅用于计时目的,您也可以考虑将margin 动态应用于#main

【讨论】:

    【解决方案2】:

    当页面滚动时,您通过应用 fixedfixed2 类为 #aside#bside 元素设置 position:fixed

    由于position:fixed 应用于#aside#bside 时,将它们从文档流中取出,所以元素#main 按预期向左浮动。

    为避免更改您当前的代码,一个简单的解决方案是使用一个类为您的#main 元素设置某些样式,并根据需要应用该类:

    请参阅此working Fiddle 示例。

    CSS

    .fixMiddle {
        position: relative;
        left: 190px;         /* your #aside width+padding+border */
    }
    

    jQuery

    if ($('#aside').hasClass('fixed')) {
      $('#main').addClass('fixMiddle');
    } else {
      $('#main').removeClass('fixMiddle');
    }
    

    【讨论】: