如何通过CSS隐藏列时修改colspan属性?

时间:2013-04-03 19:38:03

标签: html css media-queries html-table

我正在尝试通过将类分配给特定列来实现"the unseen column" responsive table technique,如果浏览器太窄,我可以隐藏它。

截断虚拟html示例:

<!doctype html>
<html>
  <head>
    <style>
      table {
          width:100%;
          background-color:#000;
          border-spacing: 1px;
      }

      table tr {
          background-color:#fff;
      }

      table tr:nth-child(2n+1) {
          background-color: #ccc;
      }

      table tr.Title 
      {
        color:#fff;
        background-color:#0e228c;

      }

      table tr.ColumnHeadings
      {
        background-color:#e4e0d4;

      }

      @media only screen and (max-width: 1024px) {
          .VolumeCell {display:none;} 
      }
    </style>
  </head>
  <body>
    <table>
      <tr class="Title">
        <th colspan="6">Stock Prices</th>
      </tr>
      <tr class="ColumnHeadings">
        <th>Code</th>
        <th>Company</th>
        <th>Price</th>
        <th>Change</th>
        <th>Change %</th>
        <th class="VolumeCell">Volume</th>
      </tr>
      <tr>
        <td>AAC</td>
        <td>Austrailian Agricultural Company Ltd</td>
        <td>$1.39</td>
        <td>-0.01 </td>
        <td>-0.36%</td>
        <td class="VolumeCell">9,395</td>
      </tr>
      <tr>
        <td>AAD</td>
        <td>Ardent Liesure Grp.</td>
        <td>$1.15</td>
        <td>+0.02 </td>
        <td>1.32%</td>
        <td class="VolumeCell">56,431</td>
      </tr>
      <tr>
        <td>AAX</td>
        <td>Ausenco Ltd.</td>
        <td>$4.00</td>
        <td>-0.04 </td>
        <td>-.99%</td>
        <td class="VolumeCell">90,641</td>
      </tr>
    </table>
  </body>
</html>

这一切都很精致,除了在某些浏览器的桌子最右边有一个像素边框或空间,特别是Chrome 26.我已尝试调整边框折叠和边框上的许多媒体查询中的表元素。我也尝试设置负边距来计算像素。作为我的肛门保持者,我不能放手,但我宁愿不使用jQuery来解决这个问题。

那么如何解释缺失的列呢?

2 个答案:

答案 0 :(得分:5)

您无法从CSS修改colspan属性。如果您确实需要更改值,则必须修改DOM。

但是,您可以使用<caption>元素来代替您用于包含所有列的“标题”类,而不是您想要的。{1}}元素。它实际上是表格的标题。见http://www.quackit.com/html_5/tags/html_caption_tag.cfm

以下是使用标题元素的标记的修改版本。在Chrome中调整大小时,它会按您的喜好行事。

<!doctype html>
<html>
  <head>
    <style>
      table {
          width:100%;
          background-color:#000;
          border-spacing: 1px;
      }

      table tr {
          background-color:#fff;
      }

      table tr:nth-child(2n+1) {
          background-color: #ccc;
      }

      caption
      {
        color:#fff;
        background-color:#0e228c;

      }

      table tr.ColumnHeadings
      {
        background-color:#e4e0d4;

      }

      @media screen and (max-width: 1024px) {
          .VolumeCell {display:none;} 
      }
    </style>
  </head>
  <body>
    <table>
      <caption>
        Stock Prices
      </caption>
      <tr class="ColumnHeadings">
        <th>Code</th>
        <th>Company</th>
        <th>Price</th>
        <th>Change</th>
        <th>Change %</th>
        <th class="VolumeCell">Volume</th>
      </tr>
      <tr>
        <td>AAC</td>
        <td>Austrailian Agricultural Company Ltd</td>
        <td>$1.39</td>
        <td>-0.01 </td>
        <td>-0.36%</td>
        <td class="VolumeCell">9,395</td>
      </tr>
      <tr>
        <td>AAD</td>
        <td>Ardent Liesure Grp.</td>
        <td>$1.15</td>
        <td>+0.02 </td>
        <td>1.32%</td>
        <td class="VolumeCell">56,431</td>
      </tr>
      <tr>
        <td>AAX</td>
        <td>Ausenco Ltd.</td>
        <td>$4.00</td>
        <td>-0.04 </td>
        <td>-.99%</td>
        <td class="VolumeCell">90,641</td>
      </tr>
    </table>
  </body>
</html>

答案 1 :(得分:3)

如果一个人有类似的问题,但colspan没有扩展整行,在这种情况下caption毫无意义。

一个简单的技巧是不用display: none;隐藏所需的列,而是隐藏

width: 0px;

这样,colspan仍然存在列,尽管不可见。