【问题标题】:HTML CSS Horizontally stacked elements 1 fills remaining widthHTML CSS 水平堆叠元素 1 填充剩余宽度
【发布时间】:2015-09-09 01:15:55
【问题描述】:

更新:这是迄今为止最接近解决方案的:http://jsfiddle.net/bfcr62yd/11/

我无法解决以下问题。简而言之,我需要一个元素来填充剩余的宽度,而其他所有水平堆叠的元素都有固定的宽度。

UI 有 5 个包装元素,需要以固定的最小宽度水平堆叠。左侧的 2 个元素和右侧的 2 个元素具有固定宽度。中心包装元素宽度需要动态填充剩余宽度。中心元素有一个具有非常大的固定宽度的子元素。如果响应式父宽度小于子固定宽度,我希望子溢出-x:滚动(隐藏剩余宽度并通过滚动查看)。

<div>
    <div class="box dates"></div>
    <div class="box dates_presets"></div>
    <div class="box groupings"></div> <!-- to fill remaining width -->
    <div class="box columns"></div>
    <div class="box columns_video"></div>
</div>

到目前为止我的尝试: http://jsfiddle.net/bwgrwgnz/1/ http://jsfiddle.net/hycd4non/13/

我发现了这个仅适用于 2 个元素的简单示例:http://jsfiddle.net/SpSjL/

【问题讨论】:

  • 去看看 flexbox。
  • 没有 flexbox,有一些肮脏的 hacks...jsfiddle.net/d4n2fnpy 将其作为评论发布,因为我不确定它是否,嗯...防弹解决方案 - 例如在调整窗口大小时效果不佳,但是因为你有固定的元素......也许这不是什么大问题......
  • 实际上,设置宽度:自动,工作! jsfiddle.net/d4n2fnpy/1
  • 有趣,似乎有效
  • @wbeange 我为你建造了一个,这是我的答案,我没有意识到没关系为你解决了,如果他为你工作让我知道,我会删除我的答案,所以这个页面是不要太乱。

标签: html css responsive-design responsiveness


【解决方案1】:

尝试使用display: table | table-row | table-cell

.table { display: table; width: 100%; }  /* set the width to your maximum width value */
.tr { display: table-row; }
.tr div { display: table-cell; }

您还需要从“表格单元”元素中删除所有浮动

JSFiddle Demo

【讨论】:

  • 我喜欢这个,让我试一试。
  • 我无法解决overflow-x:scroll;要求:jsfiddle.net/bfcr62yd
  • @wbeange 你能解释一下你对overflow-x 的要求吗?
  • 尝试将float: left; 添加到mini-box 类——DEMO——您可能不需要排列这些块inline-block,并且可以将它们作为浮动块级元素使用。
  • 基本上我有一个巨大的子 div,它有一个很长的固定宽度。如果响应的父宽度小于孩子,我希望孩子溢出-x:滚动。
【解决方案2】:

而且,还有一种无弹性盒的解决方案。问题是强制滚动。一个或多或少的肮脏黑客成功了!

http://jsfiddle.net/d4n2fnpy/1/

#table {
display:table;
    width:100%;
    table-layout:fixed;
}

.box {
  border: 2px dashed #00f;
  min-height: 100px;
  padding-right: 10px;
    display:table-cell;
    word-wrap:break-word;
}
.dates {

    width: 200px;
}
.dates_presets {
 width:200px;

}
.groupings {
    overflow-x: scroll;
    word-wrap:initial!important;
    display:block!important;
   width:auto;
}
.columns {
  width:200px;

}
.columns_video {

    width: 200px;
}

附:设置溢出-x:自动;在不需要时删除丑陋的滚动条...

【讨论】:

    【解决方案3】:

    您是否正在寻找这样的东西? http://jsfiddle.net/DIRTY_SMITH/bfcr62yd/14/

    我对其进行了重组,但我认为这就是你想要的

    HTML

    <div id="container">
    <div class="box-1"></div>
    <div class="box-2"></div>
    <div class="box-3">
        <div class="inside-div">   
    blah blah blah blah blah blah blah blah blah blah blah blah
        </div>
    </div>
    <div class="box-4"></div>
    <div class="box-5"></div>
    </div>
    

    CSS

    #container{width: 100%;}
    .box-1, .box-2, .box-4, .box-5{width: 200px; height: 100px; background-color: blue; float: left;}
    .box-3{width: calc(100% - 800px); height: 100px; overflow-x: scroll; overflow-y: hidden;background-color: red; float: left;}
    .inside-div{height: 50px; width: 400px;}
    
    
    .mini-box {
      padding: 5px;
      margin: 5px;
      border: 1px solid red;
      width: 20px;
    
    }
    

    【讨论】:

      【解决方案4】:

      我使用 Calc() 添加了宽度。这很简单。我这里有:http://jsfiddle.net/bwgrwgnz/3/

      width: calc(100% - 770px);
      

      但老实说,如果您可以解决旧浏览器缺乏支持的问题,那么 flexbox 可能是您想要的方式。

      附言。也不支持 calc() 。

      编辑:上面还有一个表格示例,它可以很好地工作。

      【讨论】:

      【解决方案5】:

      我使用表格的解决方案:http://jsfiddle.net/bwgrwgnz/41/

      .box {
        border: 2px dashed #00f;
        height: 100px;
        width: 50px;
      }
      .dynamic-box {
        width:auto !important;    
      }
      .dynamic-box-fixed-inner {
        display:block !important;
        overflow-x:scroll;
      }
      .inner-item {
        position:inline-block;
        padding:5px;
      }
      
      .table { display: table; width: 100%; table-layout:fixed; }
      .tr { display: table-row; }
      .tr div { display: table-cell; }
      
      <div class="table">
          <div class="tr">
              <div class="box">a</div>
              <div class="box">b</div>
              <!-- this element should fill the remaining width -->
              <div class="box dynamic-box">
                  <div class="dynamic-box-fixed-inner">
                      <div class="inner-item">item</div>
                      <div class="inner-item">item</div>
                      ...
                  </div>
              </div>
              <div class="box">d</div>
          </div>
      </div>
      

      【讨论】:

        猜你喜欢
        • 2013-09-28
        • 2018-05-26
        • 2011-10-06
        • 2017-12-18
        • 2011-12-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-19
        相关资源
        最近更新 更多