我有圆角的CSS规则:
th, td { padding: 8px;
background: #E8ECE0;
text-align: center;
border: 1px solid #444;
border-bottom-width: 0px;
}
thead { background-color: #446bb3 ; color :#fff; padding:4px; line-height:30px }
tbody tr:nth-child(even) {background: #F6F6EC;}
tbody tr:nth-child(odd) {background: #FFF}
tr:first-child td, tr:first-child th {
border-top-left-radius: 12px; border-top-right-radius: 12px;
}
tr:last-child td {
border-bottom: 1px solid #444;
border-bottom-left-radius: 12px; border-bottom-right-radius: 12px;
}
table { border-spacing: 0; border: 0; margin:0px; width:100%; padding:5px}
td.pd {border-bottom-left-radius: 12px; border-bottom-right-radius: 12px;}
td.pu {border-top-left-radius: 12px; border-top-right-radius: 12px;}
我的html表是:
<table >
<tbody>
<tr >
<td >Hello</td><td >Hello</td>
</tr>
<tr >
<td >Hello</td><td >Hello</td>
</tr>
<tr >
<td >Hello</td><td >Hello</td>
</tr>
<tr >
<td >Hello</td><td >Hello</td>
</tr>
</tbody>
</table>
给了我这个
如何修复此问题,因为表格和表格中间的td元素也有圆角?我只需要第一行和最后一行有圆角。
答案 0 :(得分:7)
假设您的table
的html类似于以下内容:
<table>
<thead>
<tr>
<th>First column</th>
<th>Second column</th>
</tr>
</thead>
<tbody>
<tr>
<td>Row one, cell one</td>
<td>Row one, cell two</td>
</tr>
<tr>
<td>Row two, cell one</td>
<td>Row two, cell two</td>
</tr>
<tr>
<td>Row three, cell one</td>
<td>Row four, cell two</td>
</tr>
</tbody>
</table>
以下CSS应该有效:
table {
border-spacing: 0;
}
th, td {
border: 1px solid #000;
padding: 0.5em 1em;
}
/* the first 'th' within the first 'tr' of the 'thead': */
thead tr:first-child th:first-child {
border-radius: 0.6em 0 0 0;
}
/* the last 'th' within the first 'tr' of the 'thead': */
thead tr:first-child th:last-child {
border-radius: 0 0.6em 0 0;
}
/* the first 'td' within the last 'tr' of the 'tbody': */
tbody tr:last-child td:first-child {
border-radius: 0 0 0 0.6em;
}
/* the last 'td' within the last 'tr' of the 'tbody': */
tbody tr:last-child td:last-child {
border-radius: 0 0 0.6em 0;
}
回应OP的问题编辑:
表中的边框有点想,我怎么做它1px
单元格之间的边框有点厚,因为一个单元格的左边框与前一个单元格的右边框相对(顶部/底部边框相同)。
删除该效果的一种方法是在border-collapse: collapse;
元素上指定table
。不幸的是,这样做的效果是还删除/取消设置/覆盖border-radius
声明:demo。
更复杂的方法是手动删除前一行的行的顶部边框,以及单元格后面的单元格的左边框,将以下内容添加到上一个CSS:
thead + tbody tr td,
tr + tr td {
border-top: 0;
}
tr th + th,
tr td + td {
border-left: 0;
}
编辑减少使CSS更耐用(对于单格单元格行,添加tfoot
或删除thead
):
table {
border-spacing: 0;
}
th, td {
border: 1px solid #000;
padding: 0.5em 1em;
}
thead tr:first-child th:first-child,
tbody:first-child tr:first-child td:first-child {
border-top-left-radius: 0.6em;
}
thead tr:first-child th:last-child,
tbody:first-child tr:first-child td:last-child {
border-top-right-radius: 0.6em;
}
thead + tbody tr:last-child td:first-child,
tfoot tr:last-child td:first-child {
border-bottom-left-radius: 0.6em;
}
thead + tbody tr:last-child td:last-child,
tfoot tr:last-child td:last-child {
border-bottom-right-radius: 0.6em;
}
thead + tbody tr td,
tfoot + tbody tr td,
tfoot tr td,
tbody + tbody tr td,
tr + tr td {
border-top: 0;
}
tr th + th,
tr td + td {
border-left: 0;
}
在没有tbody
元素的情况下,多个tfoot
元素存在问题,目前第一个tbody
将在其下边框保留border-radius。< / p>
答案 1 :(得分:6)
你可以把表放入div。 div的样式(示例):
div {
border-radius: 4px;
-moz-border-radius: 4px
-webkit-border-radius: 4px;
overflow: hidden; /*notice*/
}
因此桌角将被隐藏。
答案 2 :(得分:2)
这个答案没有直接回答你的问题,而是一个变体。 如果您不希望中间列有圆角,这是一个可能的解决方案:
插图:
表行(tr)的属性:更新最左列的表数据(td):
tbody tr td:first-child
{
border-radius: 0.6em 0 0 0.6em;
}
表行(tr)的属性:更新第二列的表数据(td):
tbody td:nth-child(2)
{
border-radius: 0 0.6em 0.6em 0;
}
以下是一个示例:JS Fiddle demo
如果你有多个列(td或th),你只需添加如下内容:
tbody td:nth-child(2) /* This is now the middle element out of three */
{
border-radius: 0 0 0 0;
}
tbody td:nth-child(3) /* This is now the right most column */
{
boder-radius: 0 0.6em 0.6em 0;
}
答案 3 :(得分:0)
您可以重置td元素的边框半径。那应该解决它。
答案 4 :(得分:0)
您可以为td元素指定id,并使用td元素的id将边框半径设置为0px。
答案 5 :(得分:0)
你应该尝试一下
clear:both;
它将被重置。
您也可以尝试!important
,因为您可能会忘记其他html代码中的其他“内联css规则”。
答案 6 :(得分:0)
虽然这是一个陈旧的答案,但我想通过添加我的发现来加强它。除了David Thomas的超级智能answer之外,我发现了一个不完全适合的边缘情况:单细胞行!例如:
<table>
<tr><th colspan="3">My header</th></tr>
<tr><td>row1-cell1</td><td>row1-cell2</td><td>row1-cell3</td></tr>
<tr><td>row2-cell1</td><td>row2-cell2</td><td>row2-cell3</td></tr>
<tr><th colspan="3">My footer</th></tr>
</table>
右上角的规则会覆盖左上角的规则(因为它在它之后),而右下角的规则会覆盖左下角的规则(对于同样的原因)。见下面的屏幕截图:
Overriden Corners http://i57.tinypic.com/v41091.jpg
对此的补救措施是下面的CSS(我根据需要为各种table-tr,tbody-tr,thead-tr组合添加了更多选择器,所以你也可以扩展它以适合你的标记):
table td,
table th{
border: 1px solid #666;
}
table{
width: 98%;
border-spacing: 0px;
}
/* alternating table row colors*/
tr:nth-child(even) { background-color:#f6f6f6; }
tr:nth-child(odd) { background-color:#ffffff; }
/* set all corner radii initially to zero */
th, td {
border-radius: 0;
}
/*set only specific radii per corner (don't use the border-radius shorthand)*/
thead tr:first-child th:first-child,
table tr:first-child td:first-child,
tbody tr:first-child th:first-child {
border-top-left-radius: 0.6em;
}
thead tr:first-child th:last-child,
table tr:first-child td:last-child,
tbody tr:first-child th:last-child {
border-top-right-radius: 0.6em;
}
tbody tr:last-child td:first-child,
table tr:last-child td:first-child,
tbody tr:last-child th:first-child {
border-bottom-left-radius: 0.6em;
}
tbody tr:last-child td:last-child,
table tr:last-child td:last-child,
tbody tr:last-child th:last-child {
border-bottom-right-radius: 0.6em;
}
thead + tbody tr td,
tr + tr td ,
tr + tr th {
border-top: 0;
}
tr th + th,
tr td + td {
border-left: 0;
}
/* shade th cells */
table th {
background-color: #888;
color: #FFF;
}
根据需要,这会产生下面的屏幕截图:
Fixed Corners http://i57.tinypic.com/5bqwqq.jpg
此解决方案的所有功劳仍归David Thomas,特别是对于相邻的单元格边界技巧!