【问题标题】:Leftnav shrinks width when set to position "fixed"设置为“固定”位置时,Leftnav 会缩小宽度
【发布时间】:2016-01-15 05:55:39
【问题描述】:

我有一个主要内容区域和侧边栏,是结合 Bootstrap 和 Flexbox 创建的。

我想修复导航栏随页面滚动,但如果我应用 position: fixed 它不再填充它的水平空间...

为什么会这样,我该如何补救?

The codepen is here.

更新

选择的答案在 codepen 上确实有效,但在实际站点中,它仅在窗口较小时才有效,例如 iPad-portrait-size:

在正常的桌面宽度下,leftnav 不断变大...

【问题讨论】:

    标签: html css twitter-bootstrap css-position flexbox


    【解决方案1】:

    您不能在也是display:flex; 布局的一部分的顶级 元素上执行position: fixed;。但是如果你有点聪明,你可以在 child 元素上使用position:fixed;

    不过,您将不得不放弃 Bootstrap 网格 - 它使用的百分比和边距与 flexbox 不兼容。 See my Codepen fork of your work.

    HTML:

      <div class="two-col-wrapper">
        <div class="leftnav">
          <div class="list-group list-group-fixed">
            <a class="list-group-item active" href="">Validate Address</a>
            <a class="list-group-item" href="">Get Postal Codes</a>
            <a class="list-group-item" href="">Get City/State/Province</a>
            <a class="list-group-item" href="">Get Candidate Address</a>
            <a class="list-group-item" href="">Auto Complete</a>
          </div>
        </div>
        <div class="main-content">
         <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Autem nobis, accusamus delectus amet cupiditate expedita ex ducimus fugiat voluptatibus.</p>
         <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Autem nobis, accusamus delectus amet cupiditate expedita ex ducimus fugiat voluptatibus.</p>
         <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Autem nobis, accusamus delectus amet cupiditate expedita ex ducimus fugiat voluptatibus.</p>
         <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Autem nobis, accusamus delectus amet cupiditate expedita ex ducimus fugiat voluptatibus.Lorem ipsum dolor sit amet, consectetur adipisicing elit. Autem nobis, accusamus delectus amet cupiditate expedita ex ducimus fugiat voluptatibus.Lorem ipsum dolor sit amet, consectetur adipisicing elit. Autem nobis, accusamus delectus amet cupiditate expedita ex ducimus fugiat voluptatibus.Lorem ipsum dolor sit amet, consectetur adipisicing elit. Autem nobis, accusamus delectus amet cupiditate expedita ex ducimus fugiat voluptatibus.Lorem ipsum dolor sit amet, consectetur adipisicing elit. Autem nobis, accusamus delectus amet cupiditate expedita ex ducimus fugiat voluptatibus.Lorem ipsum dolor sit amet, consectetur adipisicing elit. Autem nobis, accusamus delectus amet cupiditate expedita ex ducimus fugiat voluptatibus.Lorem ipsum dolor sit amet, consectetur adipisicing elit. Autem nobis, accusamus delectus amet cupiditate expedita ex ducimus fugiat voluptatibus.Lorem ipsum dolor sit amet, consectetur adipisicing elit. Autem nobis, accusamus delectus amet cupiditate expedita ex ducimus fugiat voluptatibus.Lorem ipsum dolor sit amet, consectetur adipisicing elit. Autem nobis, accusamus delectus amet cupiditate expedita ex ducimus fugiat voluptatibus.Lorem ipsum dolor sit amet, consectetur adipisicing elit. Autem nobis, accusamus delectus amet cupiditate expedita ex ducimus fugiat voluptatibus.Lorem ipsum dolor sit amet, consectetur adipisicing elit. Autem nobis, accusamus delectus amet cupiditate expedita ex ducimus fugiat voluptatibus.Lorem ipsum dolor sit amet, consectetur adipisicing elit. Autem nobis, accusamus delectus amet cupiditate expedita ex ducimus fugiat voluptatibus.Lorem ipsum dolor sit amet, consectetur adipisicing elit. Autem nobis, accusamus delectus amet cupiditate expedita ex ducimus fugiat voluptatibus.Lorem ipsum dolor sit amet, consectetur adipisicing elit. Autem nobis, accusamus delectus amet cupiditate expedita ex ducimus fugiat voluptatibus.Lorem ipsum dolor sit amet, consectetur adipisicing elit. Autem nobis, accusamus delectus amet cupiditate expedita ex ducimus fugiat voluptatibus.Lorem ipsum dolor sit amet, consectetur adipisicing elit. Autem nobis, accusamus delectus amet cupiditate expedita ex ducimus fugiat voluptatibus.Lorem ipsum dolor sit amet, consectetur adipisicing elit. Autem nobis, accusamus delectus amet cupiditate expedita ex ducimus fugiat voluptatibus.Lorem ipsum dolor sit amet, consectetur adipisicing elit. Autem nobis, accusamus delectus amet cupiditate expedita ex ducimus fugiat voluptatibus.Lorem ipsum dolor sit amet, consectetur adipisicing elit. Autem nobis, accusamus delectus amet cupiditate expedita ex ducimus fugiat voluptatibus.Lorem ipsum dolor sit amet, consectetur adipisicing elit. Autem nobis, accusamus delectus amet cupiditate expedita ex ducimus fugiat voluptatibus.Lorem ipsum dolor sit amet, consectetur adipisicing elit. Autem nobis, accusamus delectus amet cupiditate expedita ex ducimus fugiat voluptatibus.Lorem ipsum dolor sit amet, consectetur adipisicing elit. Autem nobis, accusamus delectus amet cupiditate expedita ex ducimus fugiat voluptatibus.Lorem ipsum dolor sit amet, consectetur adipisicing elit. Autem nobis, accusamus delectus amet cupiditate expedita ex ducimus fugiat voluptatibus.Lorem ipsum dolor sit amet, consectetur adipisicing elit. Autem nobis, accusamus delectus amet cupiditate expedita ex ducimus fugiat voluptatibus.Lorem ipsum dolor sit amet, consectetur adipisicing elit. Autem nobis, accusamus delectus amet cupiditate expedita ex ducimus fugiat voluptatibus.Lorem ipsum dolor sit amet, consectetur adipisicing elit. Autem nobis, accusamus delectus amet cupiditate expedita ex ducimus fugiat voluptatibus.Lorem ipsum dolor sit amet, consectetur adipisicing elit. Autem nobis, accusamus delectus amet cupiditate expedita ex ducimus fugiat voluptatibus.Lorem ipsum dolor sit amet, consectetur adipisicing elit. Autem nobis, accusamus delectus amet cupiditate expedita ex ducimus fugiat voluptatibus.Lorem ipsum dolor sit amet, consectetur adipisicing elit. Autem nobis, accusamus delectus amet cupiditate expedita ex ducimus fugiat voluptatibus.Lorem ipsum dolor sit amet, consectetur adipisicing elit. Autem nobis, accusamus delectus amet cupiditate expedita ex ducimus fugiat voluptatibus.Lorem ipsum dolor sit amet, consectetur adipisicing elit. Autem nobis, accusamus delectus amet cupiditate expedita ex ducimus fugiat voluptatibus.Lorem ipsum dolor sit amet, consectetur adipisicing elit. Autem nobis, accusamus delectus amet cupiditate expedita ex ducimus fugiat voluptatibus.</p>
    
        </div>
      </div>
    

    CSS:

    .two-col-wrapper {
      min-height: 100vh;
      display: flex;
      flex-direction: row;
    
      .main-content {
        background-color: #ccc;
        padding: 90px 25px;
        flex-grow: 1;
       }
    
      .leftnav {
        background-color: #f1f1f1;
        padding: 90px 10px;
        flex: 2 0 200px;
    
        .list-group-fixed {
          position: fixed;
        }
      }
    }
    

    但请记住,你很聪明,所以有一个缺点 -per the W3C rules

    弹性容器的绝对定位子容器不参与弹性布局。

    【讨论】:

    • 但列表组不是 flex 容器的子项...只有两个灰色 div 是,
    • 没关系。当使用display:flex; 时,它假定它正在完全控制视口。虽然有很多方法可以做你试图用 flexbox 做的事情,但我会更多地考虑这个布局。
    • 请查看对我原来问题的修改。您发布的代码在笔中运行良好,但在实际页面中,左侧导航的宽度会增加以保持与主要内容的连接,而不是停留在 200 像素...
    • 您必须在父元素上定义一些宽度才能使固定子元素正常工作(因此flex: 2 0 200px;)。不过,您可以使用一些简单的 JS 动态插入该值。
    【解决方案2】:

    您可以添加 flex-shrink 以减少该空间。添加到 .leftnav {}

      flex-shrink: 7;
    

    这是您的笔的分叉版本:http://codepen.io/mimoYmima/pen/wMqOmr

    【讨论】:

      猜你喜欢
      • 2013-08-28
      • 1970-01-01
      • 2017-07-01
      • 2013-11-15
      • 2017-01-27
      • 2020-03-23
      • 2012-08-28
      • 2015-07-24
      • 2016-06-01
      相关资源
      最近更新 更多