【问题标题】:CSS position sticky cross browser solutionCSS位置粘跨浏览器解决方案
【发布时间】:2016-05-30 01:14:54
【问题描述】:

我的布局由 1 个标题和 3 个垂直面板组成。 所有垂直面板都可以水平扩展/收缩,并且需要一起填充 100% 的页面宽度。面板还需要在页眉之后占据 100% 的垂直空间(页眉具有自动高度)。

每个面板本身都需要可滚动,而不需要滚动整个页面或影响页面上其他面板的位置。

我面临的问题是面板既需要作为水平相对定位(以便它们一起填充 100% 宽度),又需要作为垂直固定定位,以便它们在滚动时保持原位。

如果我使用position:sticky,效果很好,但不受 Chrome/Opera 支持,因此不是一个选项。 如果我使用 javascript,我在收缩/扩展时会遇到其他问题,因为它们也有动画,而且看起来很糟糕。虽然我可以让它工作,但 Javascript 根本不是我想要的解决方案。 我正在尝试为它找到一个纯 CSS 跨浏览器解决方案。

重要的是每个面板保持可滚动而不滚动整个页面,当然还有“粘性”行为。

我不是 CSS 专家,所以我可能缺少一个简单的解决方案。 谢谢。

【问题讨论】:

    标签: css flexbox css-position sticky


    【解决方案1】:

    这是一种方法,使用flexbox

    html, body {
      margin: 0;
      height: 100%;
    }
    
    .flexwrapper {
      height: 100%;
      display: flex;
      flex-direction: column;
    }
    
    .flexheader {
      flex: 0;
      padding: 10px;
      background: #f93;
      text-align: center;
    }
    
    .flexcontent {
      flex: 1;
      display: flex;
    }
    
    .flexinner {
      flex: 1;
      background: #09f;
      margin: 1px;
      position: relative;
    }
    
    .absscroll {
      position: absolute;
      left: 0;
      top: 0;
      right: 0;
      bottom: 0;
      overflow: auto;
    }
    <div class="flexwrapper">
    
      <div class="flexheader">
        Header
      </div>
    
      <div class="flexcontent">
    
        <div class="flexinner">
          <div class="absscroll">
    
          </div>
        </div>
    
        <div class="flexinner">
          <div class="absscroll">
    Bla bla<br>
    Bla bla<br>
    Bla bla<br>
    Bla bla<br>
    Bla bla<br>
    Bla bla<br>
    Bla bla<br>
    Bla bla<br>
    Bla bla<br>
    Bla bla<br>
    Bla bla<br>
    Bla bla<br>
    Bla bla<br>
    Bla bla<br>
    Bla bla<br>
    Bla bla<br>
    Bla bla<br>
    Bla bla<br>
    Bla bla<br>
    Bla bla<br>
    Bla bla<br>
    Bla bla<br>
    Bla bla<br>
    Bla bla<br>
    Bla bla<br>
          </div>
        </div>
        
        <div class="flexinner">
          <div class="absscroll">
    
          </div>
        </div>
    
      </div>
    
    </div>

    【讨论】:

    • 谢谢。似乎使用此解决方案,我将不得不更改页面的一些父元素和基本行为。我正在使用 Bootstrap 3,你知道 flexbox 是否可以很好地使用它吗?
    • @Yani 很确定你会很好地使用引导程序
    • 谢谢,但不幸的是它现在还没有,否则我会的。我仍在试图弄清楚为什么它不起作用,看起来切换到 flexbox 正在破坏页面的当前布局。
    • 看起来 Bootstrap 在 V4 中引入了 flexbox - v4-alpha.getbootstrap.com/getting-started/flexbox
    • @Yani 那么到底发生了什么? ...屏幕截图?
    猜你喜欢
    • 2013-08-29
    • 1970-01-01
    • 2016-03-31
    • 2014-05-03
    • 2015-07-04
    • 2011-03-05
    • 2011-07-13
    • 1970-01-01
    • 2019-09-03
    相关资源
    最近更新 更多