在HTML表格中右键对齐文本的更好方法

Pal*_*ani 52 html css

我有一个包含大量行的HTML表,我需要右对齐一列.

我知道以下方法,

<tr><td>..</td><td>..</td><td align='right'>10.00</td><tr>
Run Code Online (Sandbox Code Playgroud)

<tr><td>..</td><td>..</td><td class='right-align-class'>10.00</td><tr>
Run Code Online (Sandbox Code Playgroud)

在这两种方法中,我必须在每个<tr>标记上重复align或class参数.(如果有1000行,我必须将align ='right'class ='right-align- class'1000次.)

有没有有效的方法来做到这一点?有没有直接的说法,将所有行中的第三列对齐?

Mat*_*ell 55

直接回答你的问题:没有.没有更简单的方法可以在所有现代浏览器中获得一致的外观,而无需重复列上的类. (虽然,见下文re:nth-​​child.)

以下是最有效的方法.

HTML:

<table class="products">
  <tr>
    <td>...</td>
    <td>...</td>
    <td class="price">10.00</td>
    <td>...</td>
    <td>...</td>
  </tr>
  <tr>
    <td>...</td>
    <td>...</td>
    <td class="price">11.45</td>
    <td>...</td>
    <td>...</td>
  </tr>
</table>
Run Code Online (Sandbox Code Playgroud)

CSS:

table.products td.price {
  text-align: right;
}
Run Code Online (Sandbox Code Playgroud)

为什么你不应该使用nth-child:

CSS3伪选择器nth-child对此非常有用 - 并且效率更高 - 但它在现有的实际网络上使用是不切实际的. 几个主要的现代浏览器都不支持它,包括6-8的所有IE 浏览器.不幸的是,这意味着今天的大部分(至少40%)浏览器都不支持nth-child .

所以,nth-child很棒,但是如果你想要一致的外观和感觉,那么使用它是不可行的.

  • 是的,他还回答了原始海报想要知道的内容,即是否有更有效的方法来实现他想要的东西.所以...不确定你的观点是什么. (18认同)
  • 好吧,也许我应该强调的是,目前仍在广泛使用的几种现代浏览器不支持nth-child选择器.如果它在很大一部分观众中失败,那么使用高效技术是没有意义的.http://kimblim.dk/css-tests/selectors/ (8认同)
  • 请注意您回复的评论日期......四年多以前. (8认同)
  • @MattHowell:这个很棒的答案看起来时间敏感且过时(你的链接反驳了你的文字,40%的数字是你论证的关键点),你能刷一下吗? (4认同)
  • IE6仍然是浏览人口的10% - 你仍然需要与之抗衡.也就是说,除非你正在迎合一个利基群体(比如,创建一个销售Mac软件的网站).相信我:我很想说服我的客户放弃对IE6的支持,但统计数据并不具有说服力.太多人使用它.我很好地为IE6用户提供了不太理想的体验,但是_rare_客户端会签署这个.而且,无论如何,这真的不是什么大问题.我们的工作是提供成果,而不是完美. (3认同)

cdm*_*kay 12

您可以使用nth-child伪选择器.例如:

table.align-right-3rd-column td:nth-child(3)
{
  text-align: right;
}
Run Code Online (Sandbox Code Playgroud)

然后在你的表中做:

<table class="align-right-3rd-column">
  <tr>
    <td></td><td></td><td></td>
    ...
  </tr>
</table>
Run Code Online (Sandbox Code Playgroud)

编辑:

不幸的是,这仅适用于Firefox 3.5.但是,如果您的表只有3列,则可以使用兄弟选择器,它具有更好的浏览器支持.这是样式表的样子:

table.align-right-3rd-column td + td + td
{
  text-align: right;
}
Run Code Online (Sandbox Code Playgroud)

这将匹配前面有两个其他列的任何列.


Dis*_*oat 9

如果它始终是第三列,您可以使用它(假设表类"产品").虽然它有点hacky,如果你添加一个新列,并不健壮.

table.products td+td+td {
  text-align: right;
}
table.products td,
table.products td+td+td+td {
  text-align: left;
}
Run Code Online (Sandbox Code Playgroud)

但老实说,最好的想法是在每个细胞上使用一个类.您可以使用该col元素设置列的宽度,边框,背景或可见性,但不能设置任何其他属性.这里讨论的原因.


Joh*_*zen 5

查看您的确切问题,找出隐含的问题:

第 1 步:按照您的描述使用该类(或者,如果必须的话,使用内联样式)。

步骤 2:打开 GZIP 压缩。

它有奇迹;)

这样,GZIP 就可以为您消除冗余(无论如何,通过网络),并且您的源仍然符合标准。

  • +1 表示打开 GZIP。说真的,这个答案并不能保证 3 票反对。其他不太兼容的答案应该被否决。 (2认同)