【问题标题】:Table width 100% of scrollable div表格宽度 100% 的可滚动 div
【发布时间】:2018-08-14 10:52:32
【问题描述】:

如何将表格设置为实际容器 div 宽度的 100% 宽度?

目前长表扩展了容器 div,而小表的宽度正好是 div 定义的宽度(在这种情况下为 400px),而不是像其他表那样 400px + x:

这是working fiddle

这里是示例代码:

#scroller {
  width: 400px;
  overflow: auto;
  height: 200px;
}

table {
  width: 100%;
}

table td {
  white-space: nowrap;
  border: 1px solid black;
}
<div id="scroller">
  <table>
    <tr>
      <td>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.</td>
    </tr>
  </table>

  <table>
    <tr>
      <td>short text</td>
    </tr>
  </table>
</div>

注意

这不是set-width-of-inner-div-on-scrollable-element-to-100-of-scrollable-width 的欺骗,因为我需要使用表格,而不是 div。

【问题讨论】:

    标签: html css


    【解决方案1】:

    如果你愿意,你可以试试这个简单的 jQuery。

    Live Fiddle

    $(function(){
      var maxWidth = 0;
      $("#scroller> table").each(function() {
        if ($(this).width() > maxWidth) {
          maxWidth = $(this).width();
        }
      });
    
      $("#scroller> table").width(maxWidth);
      });
    #scroller {
      width: 400px;
      overflow: auto;
      height: 200px;
    }
    
    table {
      width: 100%;
    }
    
    table td {
      white-space: nowrap;
      border: 1px solid black;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <div id="scroller">
      <table>
        <tr>
          <td>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.</td>
        </tr>
      </table>
    
      <table>
        <tr>
          <td>short text</td>
        </tr>
      </table>
    </div>

    【讨论】:

      【解决方案2】:

      您是否正在寻找类似这样的基础知识?请在评论中告诉我。

      编辑:你能去掉表的结束标签,把所有的td包装到同一个表中吗?

      #scroller {
        width: 400px;
        overflow: auto;
        height: 200px
      }
      
      table {
        width: 100%;
        border: 1px solid black
      }
      
      td{
        white-space: nowrap;
        width:100%;
        border: 1px solid black
      }
      <div id="scroller">
        <table>
          <tr>
            <td>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.</td>
          </tr>
      
          <tr>
            <td>short text</td>
          </tr>
        </table>
      </div>

      第二次编辑:正如 cmets 所说,似乎没有简单的方法可以在纯 css 中复制另一个元素的宽度。

      有一个名为attr 的新css 功能可以解决这个问题。它可以读取元素的 html 属性值。

      attr() CSS 函数用于检索属性的值 选定元素的名称并在样式表中使用它。 https://developer.mozilla.org/en-US/docs/Web/CSS/attr

      在这种情况下,td 当前没有设置任何属性,并且不允许直接修改 html。

      所以在这里我会做一个修复,一个 javascript 语句

      它复制第一个td 的宽度,在第二个中创建一个内联样式并设置相同的宽度(以px 为单位)。它有效,但这不是响应式的!

      要使其响应,您必须设置一个全局事件处理程序onchangeeventListener,并在任何数据重新加载或任何窗口大小更改时再次执行此语句。这可能会有点滞后,因此不推荐使用,但无论如何它被大量使用,包括在主流网站中。

      scroller.children[1].children[0].children[0].children[0].setAttribute(  "style","min-width:"+scroller.children[0].children[0].children[0].children[0].clientWidth + "px")
      #scroller {
        width: 400px;
        overflow: auto;
        height: 200px
      }
      
      table {
        width: 100%;
        border: 1px solid black
      }
      
      td{
        white-space: nowrap;
        width:100%;
        border: 1px solid black
      }
      <div id="scroller">
        <table>
          <tr>
            <td>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.</td>
          </tr>
        </table>
      
        <table>
          <tr>
            <td>short text</td>
          </tr>
        </table>
      </div>

      如果您的下一个td 比第一个长,这将无法完成这项工作,但同样可以通过检查@987654336 中的所有td widthlength 来使用javascript 解决此问题@循环,将它们设置为最大。可以提供,但基本可行?

      为了在禁用 javascript 时保持流畅:

      <noscript>
         <style>td{white-space:wrap}</style>
      </noscript>
      

      【讨论】:

      • 不,很遗憾没有。 white-space: nowrap; 不是偶然出现的 ;)
      • 好的,你想要 tdY 轴上单独滚动吗?
      • 不,我希望两个表格具有相同的宽度,更好地说,我希望带有“短文本”的表格与带有“lorem ipsum”文本的表格一样宽。跨度>
      • 我想保持 html 原样。意思是,两张桌子。我没有强调这一点,抱歉。
      • 感谢您迄今为止的努力!
      【解决方案3】:

      试试这个:

      删除white-space: nowrap; 并将width 从表中更改为100%

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-01-26
        • 1970-01-01
        • 2017-03-02
        • 1970-01-01
        • 1970-01-01
        • 2012-12-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多