【问题标题】:Responsive table using CSS display: table-row使用 CSS 显示的响应式表格:table-row
【发布时间】:2015-03-05 06:04:49
【问题描述】:

我无法将我的表格转换为更具响应性的设计,我在 Google 上尝试了许多资源,但它们都有限且无法按预期工作。我遇到的根本问题是我的表是动态生成的,我不想编辑在 Google 上找到的资源,因此我可以轻松更新它们并且不会过多地混淆代码。

无论如何,我的桌子的设计非常简单。有 X 行的 5 列(取决于从数据库生成的内容)。每当用户调整浏览器的大小时(或当他们使用手机时),我都想更改我的表格,使其也适合较小的屏幕。这方面的一个例子是:

桌面

Header 1 | Header 2 | Header 3
------------------------------
Content  | Content  | Content

电话

Header 1 | Content
------------------
Header 2 | Content
------------------
Header 3 | Content

我试图通过使用display: table-row 在屏幕达到一定宽度时使用 CSS 来实现这一点,我创建了this jsfiddle 来显示我当前的代码。然而,目前thtd 垂直显示在彼此上方/下方,而不是像我打算做的那样彼此相邻。我尝试使用 float: leftfloat: right 但这不起作用(参见 jsfiddle)。任何人都可以帮助我使用 CSS 完成我想要的吗?如果这是不可能的,我将如何使用 Javascript 来解决这个问题,记住我的表格不会在页面加载时全部生成(有些是动态添加到页面中的)?

【问题讨论】:

  • 从引导程序中查看容器 css 类。这会带你到某个地方。
  • 这是一篇来自css-tricks.com的关于响应式表格的好文章。
  • @Vucko 我已经读过那个了,但是他们提供了我不想实施的解决方案,因为他们没有提供我需要的解决方案(例如饼图),并且由于我的表格是动态生成的,因此只有与我的情况相近的解决方案对我不起作用。

标签: html css html-table css-tables


【解决方案1】:

如何针对不同的屏幕宽度调整table 定义。这也可以防止浮动元素的任何意外副作用。

Resizable Fiddle

.table {
  display: table;
  width: 100%;
}
.row {
  display: table-row;
}
.cell {
  display: table-cell;
}
@media screen and (max-width: 750px) {
  .cell {
    display: block;
  }
  .row {
    display: table-cell;
    width: 50%;
  }
}
<div class="table">
  <div class="row">
    <div class="cell">Head #1</div>
    <div class="cell">Head #2</div>
    <div class="cell">Head #3</div>
    <div class="cell">Head #4</div>
  </div>
  <div class="row">
    <div class="cell">Content #1</div>
    <div class="cell">Content #2</div>
    <div class="cell">Content #3</div>
    <div class="cell">Content #4</div>
  </div>
</div>

【讨论】:

    【解决方案2】:

    我已经分叉了你的小提琴。我就是这样解决的:

    HTML

    <div class="row">
        <span>Head #1</span>
        <span>Head #2</span>
        <span>Head #3</span>
        <span>Head #4</span>
    </div>
    <div class="row">
        <span>Content #1</span>
        <span>Content #2</span>
        <span>Content #3</span>
        <span>Content #4</span>
    </div>
    

    CSS

    .row
    {
        display: table-row;
    }
    .row > *
    {
        display: table-cell;
    }
    
    @media screen and (max-width: 750px) {
        .row
        {
            display: block;
            float: left;
        }
        .row > *
        {
            display: block;
        }
    }
    

    【讨论】:

    【解决方案3】:

    使用theadtbody 元素,您可以这样尝试:

    http://jsfiddle.net/uzsw7s4o/

    CSS

    @media screen and (max-width: 750px) {
        tbody, thead { float: left; }
        thead { min-width: 120px }
        td,th { display: block }
    }
    

    【讨论】:

    • 看起来很有希望,但是如果将浏览器的大小调整到 100 像素以下,有没有办法防止表格完全垂直?目前它在一定范围内工作,但仍然崩溃到我在我的例子中。
    • 您可以为表格元素添加一个最小宽度或为theadtbody 设置一个相对宽度(例如,每个50%)
    • 你好!我实施了您的解决方案,我想知道是否也可以为所有 td 元素设置一个 thead,因为我们有时有超过 1 行。我知道thead 本身是不可能的,但也许有字幕?或者最好的方法是什么?
    • 不确定您的目标,但您可能在同一个表中有许多 tbody 元素
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-04
    • 1970-01-01
    • 2012-08-07
    • 2021-01-02
    • 1970-01-01
    相关资源
    最近更新 更多