代码之家  ›  专栏  ›  技术社区  ›  ktm5124

当浏览器宽度调整时,如何防止浮动div在其他浮动div下移动?

  •  1
  • ktm5124  · 技术社区  · 6 年前

    我遇到一个问题,当浏览器宽度调整时,一个浮动div移动到另一个浮动div之下。我在jsfiddle(下面)中创建了一个这种行为的示例,其中使用了虚拟文本和虚拟表。如果打开jsfiddle,并调整显示区域的宽度,最终会看到右手div(表)移到左手div(文本)的下面。

    https://jsfiddle.net/p7yr5t4u/23/

    .view {
      float: left;
      position: relative;
      height: 100%; 
    }
    
    #A {
      width: 200px;
    }
    

    我研究了这个问题的堆栈溢出,发现 this thread 以及 this thread

    2 回复  |  直到 6 年前
        1
  •  2
  •   Temani Afif    6 年前

    一个简单的解决方法是将float转换为 inline-block white-space:nowrap :

    .container {
     white-space:nowrap;
    }
    .view {
      white-space:normal;
      display: inline-block;
      vertical-align:top;
      position: relative;
      height: 100%;
    }
    
    #A {
      width: 200px;
    }
    
    table {
      font-family: arial, sans-serif;
      border-collapse: collapse;
    }
    
    td,
    th {
      border: 1px solid #dddddd;
      text-align: left;
      padding: 8px;
    }
    
    tr:nth-child(even) {
      background-color: #dddddd;
    }
    <div class="container">
    
      <div id="A" class="view">
        Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor
        in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
      </div>
    
      <div id="B" class="view">
        <table>
          <tr>
            <th>Company</th>
            <th>Contact</th>
            <th>Country</th>
          </tr>
          <tr>
            <td>Alfreds Futterkiste</td>
            <td>Maria Anders</td>
            <td>Germany</td>
          </tr>
          <tr>
            <td>Centro comercial Moctezuma</td>
            <td>Francisco Chang</td>
            <td>Mexico</td>
          </tr>
          <tr>
            <td>Ernst Handel</td>
            <td>Roland Mendel</td>
            <td>Austria</td>
          </tr>
          <tr>
            <td>Island Trading</td>
            <td>Helen Bennett</td>
            <td>UK</td>
          </tr>
          <tr>
            <td>Laughing Bacchus Winecellars</td>
            <td>Yoshi Tannamuri</td>
            <td>Canada</td>
          </tr>
          <tr>
            <td>Magazzini Alimentari Riuniti</td>
            <td>Giovanni Rovelli</td>
            <td>Italy</td>
          </tr>
        </table>
      </div>
    
    </div>
        2
  •  1
  •   Mirous    6 年前

    如果您不介意在#B下增加一个包装器,并且您真的想使用float,您可以这样做。我把#A的200px作为常数,因为你在例子中使用了它。

    .view {
      float: left;
      position: relative;
      height: 100%;
    }
    
    #A {
      width: 200px;
    }
    
    #B {
      box-sizing: border-box;
      margin-left: -200px;
      padding-left: 200px;
      width: 100%;
    }
    #C {
      overflow-x: auto;
    }
    
    table {
        font-family: arial, sans-serif;
        border-collapse: collapse;
    }
    
    td, th {
        border: 1px solid #dddddd;
        text-align: left;
        padding: 8px;
    }
    
    tr:nth-child(even) {
        background-color: #dddddd;
    }
    <div>
    
    <div id="A" class="view">
    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
    </div>
    
    <div id="B" class="view">
    <div id="C">
    <table>
      <tr>
        <th>Company</th>
        <th>Contact</th>
        <th>Country</th>
      </tr>
      <tr>
        <td>Alfreds Futterkiste</td>
        <td>Maria Anders</td>
        <td>Germany</td>
      </tr>
      <tr>
        <td>Centro comercial Moctezuma</td>
        <td>Francisco Chang</td>
        <td>Mexico</td>
      </tr>
      <tr>
        <td>Ernst Handel</td>
        <td>Roland Mendel</td>
        <td>Austria</td>
      </tr>
      <tr>
        <td>Island Trading</td>
        <td>Helen Bennett</td>
        <td>UK</td>
      </tr>
      <tr>
        <td>Laughing Bacchus Winecellars</td>
        <td>Yoshi Tannamuri</td>
        <td>Canada</td>
      </tr>
      <tr>
        <td>Magazzini Alimentari Riuniti</td>
        <td>Giovanni Rovelli</td>
        <td>Italy</td>
      </tr>
    </table>
    <div>
    </div>
    </div>
    
    </div>