为 HTML 表格行添加边框,<tr>

Posted

技术标签:

【中文标题】为 HTML 表格行添加边框,<tr>【英文标题】:Giving a border to an HTML table row, <tr> 【发布时间】:2014-01-19 06:23:48 【问题描述】:

是否可以一次性为表格行添加边框,&lt;tr&gt;,而不是给单个单元格添加边框,&lt;td&gt; 之类的,

<table cellpadding="0" cellspacing="0"  style="border: 1px;" rules="none">
    <tbody>
        <tr>
            <th style="width: 96px;">Column 1</th>
            <th style="width: 96px;">Column 2</th>
            <th style="width: 96px;">Column 3</th>
        </tr>

        <tr>
            <td>&nbsp;</td>
            <td>&nbsp;</td>
            <td>&nbsp;</td>
        </tr>

        <tr>
            <td style="border-left: thin solid; border-top: thin solid; border-bottom: thin solid;">&nbsp;</td>
            <td style="border-top: thin solid; border-bottom: thin solid;">&nbsp;</td>
            <td style="border-top: thin solid; border-bottom: thin solid; border-right: thin solid;">&nbsp;</td>
        </tr>

        <tr>
            <td>&nbsp;</td>
            <td>&nbsp;</td>
            <td>&nbsp;</td>
        </tr>
    </tbody>
</table>

这会在给定的&lt;tr&gt; 周围设置一个边框,但它需要在单个单元格周围设置一个边框。

我们可以一次性给&lt;tr&gt;一个边框吗?

→ jsFiddle

【问题讨论】:

【参考方案1】:

您可以在tr 元素上设置border 属性,但根据CSS 2.1 规范,此类属性在分离边框模型中无效,这往往是浏览器中的默认设置。参考:17.6.1 The separated borders model。 (根据 CSS 2.1,border-collapseinitial 值是 separate,一些浏览器也将其设置为 table默认值。无论如何,最终效果是除非您明确指定 collapse,否则您在几乎所有浏览器上都会获得分隔边框。)

因此,您需要使用折叠边框。示例:

<style>
table  border-collapse: collapse; 
tr:nth-child(3)  border: solid thin; 
</style>

【讨论】:

@Robert Siemer 虽然这确实在行周围设置了边框,但它还需要“border-collapse:collapse”。不能以这种方式使用 cellpadding 属性来分隔列。下面 csmckelvey 的答案中使用的 outline 属性可以更好地控制表格的外观并实现完全相同的目标。这不应该是公认的答案,因为它不必要地限制了实现目标的功能。【参考方案2】:

绝对!只需使用

<tr style="outline: thin solid">

你喜欢哪一排。这是fiddle。

当然,正如人们所提到的,如果您愿意,您可以通过 id、类或其他方式来执行此操作。

【讨论】:

应该是一个容器而不是一个元素,因此通过他的样式格式化他的孩子在语义方面是不正确的,即使它有效。 Google Chrome 和 Internet Explorer 在 &lt;tr&gt; 周围显示边框,但 Mozilla Fire Fox 不显示边框。 尝试使用outline 而不是border。那应该可以解决兼容性问题。我只有 Chrome atm,所以无法测试。 轮廓不是边框。 @JukkaK.Korpela 主要区别是什么?如果您使用轮廓而没有边框,是否有任何视觉差异?另外,如果这不正确,您能否提供正确的解决方案? 【参考方案3】:

是的。我更新了我的答案DEMO

table td 
    border-top: thin solid; 
    border-bottom: thin solid;


table td:first-child 
     border-left: thin solid;


table td:last-child 
     border-right: thin solid;

如果您只想设置一个&lt;tr&gt; 的样式,您可以通过一个类来实现:Second DEMO

【讨论】:

Internet Explorer 好像不喜欢last-child(好像不支持)。 @Tiny 您希望支持哪个 IE 版本?版本 9+ 支持第一个孩子和最后一个孩子。 你不是在设计 ,你是在设计 。 【参考方案4】:

利用 CSS 类:

tr.border
    outline: thin solid;

并像这样使用它:

<tr class="border">...</tr>

【讨论】:

【参考方案5】:

您可以使用 tr 元素上的 box-shadow 属性作为边框的替代品。另外,同一元素上的任何border-radius 属性也将应用于盒子阴影。

box-shadow: 0px 0px 0px 1px rgb(0, 0, 0);

【讨论】:

这提供了比outline 更多的样式控制。应该是更高的答案。【参考方案6】:

左单元格:

style="border-style:solid;border-width: 1px 0px 1px 1px;"

中间单元格:

style="border-style:solid;border-width: 1px 0px 1px 0px;"

右单元格:

style="border-style:solid;border-width: 1px 1px 1px 0px;"

【讨论】:

【参考方案7】:

<table cellpadding="0" cellspacing="0"  style="border: 1px;" rules="none">
    <tbody>
        <tr>
            <th style="width: 96px;">Column 1</th>
            <th style="width: 96px;">Column 2</th>
            <th style="width: 96px;">Column 3</th>
        </tr>

        <tr>
            <td>&nbsp;</td>
            <td>&nbsp;</td>
            <td>&nbsp;</td>
        </tr>

        <tr>
            <td style="border-left: thin solid; border-top: thin solid; border-bottom: thin solid;">&nbsp;</td>
            <td style="border-top: thin solid; border-bottom: thin solid;">&nbsp;</td>
            <td style="border-top: thin solid; border-bottom: thin solid; border-right: thin solid;">&nbsp;</td>
        </tr>

        <tr>
            <td>&nbsp;</td>
            <td>&nbsp;</td>
            <td>&nbsp;</td>
        </tr>
    </tbody>
</table>

【讨论】:

你能在你的答案中添加评论并解释你做了什么改变吗?【参考方案8】:

添加边框间距:0rem 0.5rem;为每个单元格 (td, th) 项在其底部创建一个空间,同时在单元格之间不留空间

    table.app-table
        border-collapse: separate;
        border-spacing: 0rem 0.5rem;
    
    table.app-table thead tr.border-row the,
    table.app-table tbody tr.border-row td,
    table.app-table tbody tr.border-row th
        border-top: 1px solid #EAEAEA;
        border-bottom: 1px solid #EAEAEA;
        vertical-align: middle;
        white-space: nowrap;
        font-size: 0.875rem;
    

    table.app-table thead tr.border-row th:first-child,
    table.app-table tbody tr.border-row td:first-child
        border-left: 1px solid #EAEAEA;
    

    table.app-table thead tr.border-row th:last-child,
    table.app-table tbody tr.border-row td:last-child
        border-right: 1px solid #EAEAEA;
    

【讨论】:

【参考方案9】:

使用Bootstrap 轻松多了。

第 1 步:安装到您的 &lt;head&gt;

<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">

如果你使用的是像 Yii3 这样的框架,或者进入你的 AppAsset.php,Bootstrap5。

<?php

declare(strict_types=1);

namespace App\Asset;

use Yiisoft\Assets\AssetBundle;
use Yiisoft\Yii\Bootstrap5\Assets\BootstrapAsset;

class AppAsset extends AssetBundle

    public ?string $basePath = '@assets';

    public ?string $baseUrl = '@assetsUrl';

    public ?string $sourcePath = '@resources/asset';

    public array $css = [
        'css/site.css',
    ];

    public array $js = [
        'js/app.js',
    ];

    public array $depends = [
        BootstrapAsset::class,   <----------------- here
    ];


或者进入 Yii2 通常是 bootstrap 4

<?php

namespace frontend\assets;

use yii\web\AssetBundle;
use yii\bootstrap4\BootstrapAsset;
use yii\web\YiiAsset;
use yii\web\JqueryAsset;
/**
 * Main frontend application asset bundle.
 */
class AppAsset extends AssetBundle

    
    public $sourcePath = '@app/assets/app';
    public $baseUrl = '@app';
    
    public $css = [        
        'css/site.css',
        '//maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous"'     <----------------- here
    ];

public $depends = [
        BootstrapAsset::class,      <---------- here  
        YiiAsset::class,        
        JqueryAsset::class,
    ];

第2步:将class="table" 添加到&lt;table&gt;并将scope="row"添加到&lt;th&gt;

<table class="table">
<th scope="row">

没有主题的基本表格 - 列间隔很好,并且您有行边框。

【讨论】:

【参考方案10】:

在与这个问题斗争了很长时间之后,我得出结论,非常简单的答案是用空单元格填充表格,将表格的每一行填充到相同数量的单元格(显然考虑到 colspan) .使用计算机生成的 html,安排起来非常简单,并且避免了与复杂的变通方法的冲突。插图如下:

<h3>Table borders belong to cells, and aren't present if there is no cell</h3>
<table style="border:1px solid red; width:100%; border-collapse:collapse;">
    <tr style="border-top:1px solid darkblue;">
        <th>Col 1<th>Col 2<th>Col 3
    <tr style="border-top:1px solid darkblue;">
        <td>Col 1 only
    <tr style="border-top:1px solid darkblue;">
        <td colspan=2>Col 1 2 only
    <tr style="border-top:1px solid darkblue;">
        <td>1<td>2<td>3

</table>


<h3>Simple solution, artificially insert empty cells</h3>

<table style="border:1px solid red; width:100%; border-collapse:collapse;">
    <tr style="border-top:1px solid darkblue;">
        <th>Col 1<th>Col 2<th>Col 3
    <tr style="border-top:1px solid darkblue;">
        <td>Col 1 only<td><td>
    <tr style="border-top:1px solid darkblue;">
        <td colspan=2>Col 1 2 only<td>
    <tr style="border-top:1px solid darkblue;">
        <td>1<td>2<td>3

</table>

【讨论】:

以上是关于为 HTML 表格行添加边框,<tr>的主要内容,如果未能解决你的问题,请参考以下文章

如何隐藏 HTML 表格行 <tr> 使其不占用空间?

HTML表单要点汇总

HTML中做的表格为什么填充 间距 边框 三个都设置为0了,表格内部行与列之间还是有空隙。

如何更改最后一个表格的 <tr> 边框颜色

用html编写表格,为啥表格内容与边框的距离这么远,怎么解决这样的问题,请告知代码

用于在 HTML 表格行之间添加行的 Jquery 语法