当内容溢出浏览器窗口时,用 div 替换 html 表格布局

Posted

技术标签:

【中文标题】当内容溢出浏览器窗口时,用 div 替换 html 表格布局【英文标题】:Replace html table layout with divs when content overflows browser window 【发布时间】:2021-04-07 17:33:31 【问题描述】:

一段时间以来,不鼓励使用表格进行 html 布局。我正在创建一个包含不同数量元素行的网页。每行应根据最宽行的宽度居中。我可以使用如下所示的表格来做到这一点。

我尝试用 div 替换它,只要最宽的行不比浏览器窗口宽,它就可以工作。在这种情况下,如何让 div 版本与 table 版本一样工作?谢谢。

表格版本

<html>
<head>
<style>
  div.box 
      display: inline-block;
      width:300px;
      height:100px;
      margin:10px;
  
  div.red 
      background:red;
  
  div.green 
      background:green;
  
  td.oneline 
      white-space: nowrap;
      text-align: center;
  
</style>
</head>
<body>
  <table>
    <tr>
      <td class='oneline'>
        <div class='box green'></div>
        <div class='box green'></div>
      </td>
    </tr>
    <tr>
      <td class='oneline'>
        <div class='box red'></div>
        <div class='box red'></div>
        <div class='box red'></div>
        <div class='box green'></div>
        <div class='box green'></div>
        <div class='box red'></div>
        <div class='box red'></div>
        <div class='box red'></div>
      </td>
    </tr>
  </table>
</body>
</html>

Div 版本

<html>
<head>
  <style>
  div.box 
      display: inline-block;
      width:300px;
      height:100px;
      margin:10px;
  
  div.red 
      background:red;
  
  div.green 
      background:green;
  
  div.container 
      white-space: nowrap;
      text-align: center;
  
  </style>
</head>
<body>
  <div class='container'>
    <div>
      <div class='box green'></div>
      <div class='box green'></div>
    </div>
    <div>
      <div class='box red'></div>
      <div class='box red'></div>
      <div class='box red'></div>
      <div class='box green'></div>
      <div class='box green'></div>
      <div class='box red'></div>
      <div class='box red'></div>
      <div class='box red'></div>
    </div>
  </div>
</body>
</html>

【问题讨论】:

【参考方案1】:

因为它不是表格(table-layout),所以它不会收缩/扩展以适应其内容。

2 个选项:

display:table; 设置为.container

width:max-content 设置为.container ;

两个规则(一个或另一个)都将允许容器比视口的宽度或其父块宽。

带宽度的演示:

<html>
<head>
  <style>
  div.box 
      display: inline-block;
      width:300px;
      height:100px;
      margin:10px;
  
  div.red 
      background:red;
  
  div.green 
      background:green;
  
  div.container 
      white-space: nowrap;
      text-align: center;
      width:max-content;
  
  </style>
</head>
<body>
  <div class='container'>
    <div>
      <div class='box green'></div>
      <div class='box green'></div>
    </div>
    <div>
      <div class='box red'></div>
      <div class='box red'></div>
      <div class='box red'></div>
      <div class='box green'></div>
      <div class='box green'></div>
      <div class='box red'></div>
      <div class='box red'></div>
      <div class='box red'></div>
    </div>
  </div>
</body>
</html>

带显示的演示

<html>
<head>
  <style>
  div.box 
      display: inline-block;
      width:300px;
      height:100px;
      margin:10px;
  
  div.red 
      background:red;
  
  div.green 
      background:green;
  
  div.container 
      white-space: nowrap;
      text-align: center;
      display:table;
  
  </style>
</head>
<body>
  <div class='container'>
    <div>
      <div class='box green'></div>
      <div class='box green'></div>
    </div>
    <div>
      <div class='box red'></div>
      <div class='box red'></div>
      <div class='box red'></div>
      <div class='box green'></div>
      <div class='box green'></div>
      <div class='box red'></div>
      <div class='box red'></div>
      <div class='box red'></div>
    </div>
  </div>
</body>
</html>

这两个规则都意味着不同的行为,寻找最接近您需求的规则。

【讨论】:

以上是关于当内容溢出浏览器窗口时,用 div 替换 html 表格布局的主要内容,如果未能解决你的问题,请参考以下文章

关于client浏览器界面文字内容溢出用省略号表示方法

html js 或者css怎么做到隐藏滚动条,但是依旧可以滚动?

怎么用jQuery/HTML/Div+CSS按浏览器屏幕大小自适应布局?

dataTables JS插件响应宽度溢出设置div宽度

如何使DIV的高度固定,当超出固定高度时,出现自动滚动条

使用js将div高度设置为100%