【问题标题】:Make left div take up remaining width without swapping elements使左 div 占据剩余宽度而不交换元素
【发布时间】:2013-08-17 01:40:32
【问题描述】:

我有 2 个并排的 div。右边的 div 有一个固定的宽度。即使调整窗口大小,左侧 div 也应填充剩余空间。示例:

+---------------------------------+  +---------------+
|                                 |  |               |
|             divLeft             |  |    divRight   |
|       <- dynamic width ->       |  |     120px     |
|                                 |  |               |
+---------------------------------+  +---------------+

<div>
    <div id="divLeft">...</div>
    <div id="divRight">...</div>
<div>

有a solution that uses float:right on the right element,但它需要像这样重新排序元素:

<div>
    <div id="divRight" style="float: right; width: 120px;">...</div>
    <div id="divLeft">...</div>
<div>

是否有不需要重新排序元素的解决方案?我处于重新排序它们会导致其他问题的情况。我更喜欢 CSS/HTML 解决方案,但我愿意使用 Javascript/JQuery。

这是我尝试解决它的无效JSFiddle。我正在尝试将蓝色 div 定位在绿色 div 的右侧。

【问题讨论】:

标签: html css css-float


【解决方案1】:

虽然它不适用于 display:table-cell 似乎可以解决问题:

#divLeft {
    background-color: lightgreen;
    vertical-align: top;
    display:table-cell;
}
#divRight {
    display:table-cell;
    width: 120px;
    background-color: lightblue;
    vertical-align: top;
}

jsFiddle example

【讨论】:

  • 没有带有 display:table 的容器 div 有什么缺点吗?我宁愿不包括一个,就像你的例子一样,如果我能侥幸的话。
  • 不,在这种情况下根本没有必要。
  • 谢谢!我更喜欢这个解决方案,因为它很简单。其他解决方案建议使用绝对或相对定位,这对我的 JSFiddle 示例很有效,但在我的实际情况下,它需要对边缘进行修改以使事情正确排列。
  • vertical-align:top; 有必要吗?
【解决方案2】:

是这样的吗? http://jsfiddle.net/KMchF/5/

#divLeft {
    float: left;
    overflow: hidden;    
    background-color: lightgreen;
    vertical-align: top;
    position: absolute;
    right: 120px;
}

#divRight {
    float: right;
    width: 120px;    
    background-color: lightblue;
    vertical-align: top;
}

我在后面添加了一个空白div,因此您可以继续处理页面的其余部分,否则元素将位于div { position: absolute; } 下

【讨论】:

    【解决方案3】:

    你可以使用定位来解决这个问题

    #divLeft {
        background-color: lightgreen;
        width: 100px;
    }
    #divRight {
        position: absolute;
        top: 0;
        left: 100px;
        right: 0;
        background-color: lightblue;
    }
    body {   /* or parent element */
        position: relative;        
    }
    

    Working fiddle

    【讨论】:

    • 我可以买矢车菊蓝吗?
    【解决方案4】:

    使用display:table 和table-cell 可以很好地解决这个问题。我确实必须添加一个包装 .container div,但这里有一个解决方案:

    http://jsfiddle.net/NmrbP/2/

    .container {
        display:table;
    }
    #divLeft {
        overflow: hidden;
    
        background-color: lightgreen;
        vertical-align: top;
        display:table-cell;
    }
    
    #divRight {
        width: 120px;
    
        background-color: lightblue;
        vertical-align: top;
        display:table-cell;
    }
    

    【讨论】:

      【解决方案5】:

      我让它像这样工作: HTML:

      <div id="divLeft">
          [divLeft]
          Lorem ipsum dolor sit amet, omnes molestie repudiandae eos cu, doming dolorum nonumes has ad. Magna ridens et his, eripuit salutatus sententiae te ius. Ludus accumsan ea usu, ea sed meliore maiorum molestiae, has facer dolore ornatus ut. Eam adhuc platonem mnesarchum ad, mei autem fuisset electram ei. Hinc omnesque eu mei. Ut sit odio melius aperiri, ei mei legere eruditi.<br/>
      
          Mel te sale vitae putant, diceret nusquam est an. Ad melius legimus vel. Eum dicam primis persecuti ea, ne alia unum partiendo nec. Ferri tollit docendi et pro, usu vide putant eirmod et. Qui an nostrud dolorum. Sea modo case fugit ea, mea te autem doming dolorum.
      </div>
      
      <div id="divRight">
          [divRight]
          Sit no doctus invenire. Sint consequuntur mei ne, an mea perpetua omittantur conclusionemque. Quaestio platonem no pro. Mei choro oblique mandamus ea, dicat vivendo eloquentiam in eam. Ne pro velit ceteros.<br/>
      
      Quem consulatu te pro, albucius menandri et sit. Ne vis nibh nominavi atomorum. Eu pri enim omnes. Iisque vidisse cotidieque ius eu, in fierent dissentiet sed, cu eam sensibus honestatis.
      </div>
      

      CSS:

      #divLeft {
      float: left;
      overflow: hidden;
      width: 80%;
      background-color: lightgreen;
      vertical-align: top;
      }
      #divRight {
          float: right;
          width: 15%;
      
          background-color: lightblue;
          vertical-align: top;
      }
      

      工作JSFiddle。

      【讨论】:

        【解决方案6】:

        试试这个:

        .div_left{
            width:100%;
            height:100px;
            position:absolute;
            top:0px;
            right:200px;
        }
        .div_right{
            width:200px;
            height:100px;
            float:right;
            background-color:red;
        }
        

        left div 的 right 属性必须是 right div 的宽度,如果这些 div 在另一个 div 内,则需要溢出:隐藏。在这种情况下,右侧 div 将浮动在右侧,宽度为 200px,左侧 div 将放置在距离右边框 200px 处,尽管它的宽度为 100%,但如果它超过了容器 div 的宽度,属性溢出将解决该问题。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-05-07
          • 2018-10-23
          • 2013-07-31
          • 2016-01-08
          • 2019-03-18
          • 2013-03-09
          • 2012-09-25
          • 2017-02-12
          相关资源
          最近更新 更多