使用 CSS 显示的响应式表格:table-row

Posted

技术标签:

【中文标题】使用 CSS 显示的响应式表格:table-row【英文标题】:Responsive table using CSS display: 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 我已经读过那个了,但是他们提供了我不想实施的解决方案,因为他们没有提供我需要的解决方案(例如饼图),并且由于我的表格是动态生成的,因此只有与我的情况相近的解决方案对我不起作用。 【参考方案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;
    

【讨论】:

嗨 Joshua,根据您对这个问题的回答,您是否有机会对另一个类似问题有更好的回答:***.com/questions/29801114/…【参考方案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 元素

以上是关于使用 CSS 显示的响应式表格:table-row的主要内容,如果未能解决你的问题,请参考以下文章

SAP UI5 里响应式表格的 minScreenWidth 属性讲解

HTML CSS 响应式表格和 CSS 之前

仅使用 CSS3/HTML5 的响应式等高列

响应式表格布局

使用 CSS 表格显示的不均匀间距

在响应式设计中使用带有显示属性的“表格”和“表格单元”?