css - 保持表格的纵横比

标签 css html-table

我有一个代表坐标的表格。
table with coordinates

如何让尺寸动态变化,使其始终适合父 div(宽度:100%),就像图像一样?

现在我使用硬编码的@media 查询。 但必须有更好的方法。

.hitbox {
  width: 25%; /* of page */
}

@media (min-width: 702px) and (max-width: 800px) {
  .hitbox .tablewrapper {
    font-size: 9px;
  }
}
@media (min-width: 800px) and (max-width: 840px) {
  .hitbox .tablewrapper {
    font-size: 10px;
  }
}
@media (min-width: 840px) and (max-width: 915px) {
  .hitbox .tablewrapper {
    font-size: 11px;
  }
}

编辑:

如果表格需要变得更小,那么包含的文本是固定文本大小的问题。

JSFiddle
这很好用。
Wide narrow 但是再小,它就不起作用了。
fail 它应该使字体变小,或者至少切割每个单元格(而不是表格)。

编辑 2: 整个表格应该始终可见,阅读文本并不重要,重要的是查看它创建的图案(灰色或红色)。

编辑 3: 重要的是这里的颜色,而不是标签,所以切割表格并使其滚动不是这里的解决方案。要求它像热图一样始终完全可见。

最佳答案

使用 viewport-relative units为您的字体大小。

1 vw unit is equal to 1% of the the width of the initial containing block.

将它与父级 div(直到正文和 html)的适当宽度结合起来,它应该会给你想要的结果。然后字体大小将根据屏幕(视口(viewport))大小动态缩放。如果减小视口(viewport)大小,字体大小也会减小,反之亦然。

例如:

td {
    width: calc(100% / 12); padding: 2px;
    overflow: hidden; background: #bababa;
    font-size: 1.5vw; /* <---- the viewport relative font-size */
}

演示 fiddle 1:https://jsfiddle.net/abhitalks/ucoLcm50/9/

Demo Snippet 1(点击全屏查看效果):

* { box-sizing: border-box; padding: 0; margin: 0; }
html, body { width: 100%; }
div { background-color: red; width: 50%; min-width: 160px; }
table { width: 100%; font-family: monospace; }
td {
    width: calc(100% / 12); padding: 2px;
    overflow: hidden; background: #bababa;
    font-size: 1.5vw; /* <---- the viewport relative font-size */
}
<div>
    <table>
        <tr>
            <td>A1</td><td>A2</td><td>A3</td><td>A4</td>
            <td>A5</td><td>A6</td><td>A7</td><td>A8</td>
            <td>A9</td><td>A10</td><td>A11</td><td>A12</td>
        </tr>
        <tr>
            <td>B1</td><td>B2</td><td>B3</td><td>B4</td>
            <td>B5</td><td>B6</td><td>B7</td><td>B8</td>
            <td>B9</td><td>B10</td><td>B11</td><td>B12</td>
        </tr>    
    </table>
</div>


另一种(和更好的)解决方案是保持字体大小固定但溢出包含 div 基于 最小宽度。这将使表格数据保持可读性,并在空间受限时允许滚动表格。

例如:

div { 
    width: 50%; min-width: 180px; 
    overflow-y: hidden; overflow-x: auto;
}

演示 fiddle 2:https://jsfiddle.net/abhitalks/pu2yh0fc/1/

演示片段 2:

* { box-sizing: border-box; padding: 0; margin: 0; }
html, body { width: 100%; }
div { 
    background-color: red; width: 50%; min-width: 180px; 
    overflow-y: hidden; overflow-x: auto;
}
table { min-width: 100%; font-family: monospace; }
td {
    min-width: calc(100% / 12); padding: 2px;
    overflow: hidden; background: #bababa;
    font-size: 1em; 
}
<div>
    <table>
        <tr>
            <td>A1</td><td>A2</td><td>A3</td><td>A4</td>
            <td>A5</td><td>A6</td><td>A7</td><td>A8</td>
            <td>A9</td><td>A10</td><td>A11</td><td>A12</td>
        </tr>
        <tr>
            <td>B1</td><td>B2</td><td>B3</td><td>B4</td>
            <td>B5</td><td>B6</td><td>B7</td><td>B8</td>
            <td>B9</td><td>B10</td><td>B11</td><td>B12</td>
        </tr>    
    </table>
</div>

关于css - 保持表格的纵横比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33379970/

相关文章:

css - Twitter Bootstrap 横向插入符号

javascript - 如何使用 jQuery 的toggleClass 在按钮单击时切换列中的表格

html - 简单的html表格设计问题

javascript - jQuery each - 第一个变量在(某些)刷新时没有获得宽度值

javascript - 如何更轻松地切换 .click?

css - sIFR3 中的 "Minimize the Flash movie size by limiting the glyphs embedded in the movie"以提高渲染速度

asp.net - 绘制html表头

jquery - 使用html表格指定excel的列宽和行高

css - 列、列组和 css ":hover"伪类

html - CSS - 在底部有文本的一行中获得 3 个 div?