我试图使用CSS border-radius属性制作一个圆角表。我使用的表格样式是这样的:
table {
-moz-border-radius:10px;
-webkit-border-radius:10px;
border-radius:10px
}
问题来了。我还想设置border-collapse:collapse属性,当设置border-radius时,它不再起作用。是否有一种基于css的方式,我可以得到相同的效果边界崩溃:崩溃而不实际使用它?
似乎很大一部分问题是,将表格设置为圆角并不影响角td元素的角。如果表格都是一种颜色,这就不是问题,因为我可以让顶部和底部td角分别为第一行和最后一行圆角。但是,我使用了不同的背景色来区分标题和条纹,所以内部td元素也会显示它们的圆角。
用另一个圆角元素包围桌子是行不通的,因为桌子的方角“渗透进来”。
将边框宽度指定为0不会折叠表格。
在将cellspacing设置为零后,底部td角仍然是正方形。
这些表是用PHP生成的,所以我可以对每个外部th/tds应用不同的类,并分别设置每个角的样式。我宁愿不这样做,因为它不是很优雅,而且应用于多个表有点痛苦,所以请继续提出建议。
我希望不使用JavaScript。
下面是一个来自http://medialoot.com/preview/css-ui-kit/demo.html的关于如何实现圆角表的最新示例。它基于Joel Potter上面建议的特殊选择器。正如你所看到的,它还包括一些让IE有点开心的魔法。它包括一些额外的样式来交替行的颜色:
table-wrapper {
width: 460px;
background: #E0E0E0;
filter: progid: DXImageTransform.Microsoft.gradient(startColorstr='#E9E9E9', endColorstr='#D7D7D7');
background: -webkit-gradient(linear, left top, left bottom, from(#E9E9E9), to(#D7D7D7));
background: -moz-linear-gradient(top, #E9E9E9, #D7D7D7);
padding: 8px;
-webkit-box-shadow: inset 0px 2px 2px #B2B3B5, 0px 1px 0 #fff;
-moz-box-shadow: inset 0px 2px 2px #B2B3B5, 0px 1px 0 #fff;
-o-box-shadow: inset 0px 2px 2px #B2B3B5, 0px 1px 0 #fff;
-khtml-box-shadow: inset 0px 2px 2px #B2B3B5, 0px 1px 0 #fff;
box-shadow: inset 0px 2px 2px #B2B3B5, 0px 1px 0 #fff;
-webkit-border-radius: 10px;
/*-moz-border-radius: 10px; firefox doesn't allow rounding of tables yet*/
-o-border-radius: 10px;
-khtml-border-radius: 10px;
border-radius: 10px;
margin-bottom: 20px;
}
.table-wrapper table {
width: 460px;
}
.table-header {
height: 35px;
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
font-size: 14px;
text-align: center;
line-height: 34px;
text-decoration: none;
font-weight: bold;
}
.table-row td {
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
font-size: 14px;
text-align: left;
text-decoration: none;
font-weight: normal;
color: #858585;
padding: 10px;
border-left: 1px solid #ccc;
-khtml-box-shadow: 0px 1px 0px #B2B3B5;
-webkit-box-shadow: 0px 1px 0px #B2B3B5;
-moz-box-shadow: 0px 1px 0px #ddd;
-o-box-shadow: 0px 1px 0px #B2B3B5;
box-shadow: 0px 1px 0px #B2B3B5;
}
tr th {
border-left: 1px solid #ccc;
}
tr th:first-child {
-khtml-border-top-left-radius: 8px;
-webkit-border-top-left-radius: 8px;
-o-border-top-left-radius: 8px;
/*-moz-border-radius-topleft: 8px; firefox doesn't allow rounding of tables yet*/
border-top-left-radius: 8px;
border: none;
}
tr td:first-child {
border: none;
}
tr th:last-child {
-khtml-border-top-right-radius: 8px;
-webkit-border-top-right-radius: 8px;
-o-border-top-right-radius: 8px;
/*-moz-border-radius-topright: 8px; firefox doesn't allow rounding of tables yet*/
border-top-right-radius: 8px;
}
tr {
background: #fff;
}
tr:nth-child(odd) {
background: #F3F3F3;
}
tr:nth-child(even) {
background: #fff;
}
tr:last-child td:first-child {
-khtml-border-bottom-left-radius: 8px;
-webkit-border-bottom-left-radius: 8px;
-o-border-bottom-left-radius: 8px;
/*-moz-border-radius-bottomleft: 8px; firefox doesn't allow rounding of tables yet*/
border-bottom-left-radius: 8px;
}
tr:last-child td:last-child {
-khtml-border-bottom-right-radius: 8px;
-webkit-border-bottom-right-radius: 8px;
-o-border-bottom-right-radius: 8px;
/*-moz-border-radius-bottomright: 8px; firefox doesn't allow rounding of tables yet*/
border-bottom-right-radius: 8px;
}
我想明白了。你只需要使用一些特殊的选择器。
圆角的问题是,td元素并没有变成圆角。你可以这样解决这个问题:
表tr:最后一个孩子td:第一个孩子{
边框:2px纯橙色;
border-bottom-left-radius: 10 px;
}
表tr:最后一个子td:最后一个子{
边框:2px纯绿色;
border-bottom-right-radius: 10 px;
}
<表>
tbody > <
< tr >
< td > 1道明> < /
2 < td > < / td >
< / tr >
< tr >
< td > 3 < / td >
4 < td > < / td >
< / tr >
tbody > < /
表> < /
现在所有东西都四舍五入了,除了边界崩溃的问题:崩溃破坏了所有东西。
一个解决方法是添加border-spacing: 0,并在表中保留默认的border-collapse: separate。
其他一些答案很好,但没有一个认为你使用了thead, tbody和tfoot。或者是两种情况的组合。当你应用它们时,你会得到一些不必要的四舍五入或边框。
因此,我尝试从@NullUserException调整css-only answer,这是我得到的:
table {
border-radius: 5px;
border-width: 2px;
border-style: solid;
border-color: darkgreen;
border-spacing: 0;
border-collapse: separate;
width: 100%;
}
table tr td,
table tr th {
border-right-width: 2px;
border-right-style: solid;
border-right-color: darkgreen;
border-bottom-width: 2px;
border-bottom-style: solid;
border-bottom-color: darkgreen;
}
table tr th:last-child,
table tr td:last-child {
border-right-width: 2px;
border-right-style: none;
border-right-color: darkgreen;
}
table tr:last-child td,
table tr:last-child th {
border-bottom-width: 2px;
border-bottom-style: none;
border-bottom-color: darkgreen;
}
/* top-left border-radius */
table :not(tfoot) tr:first-child th:first-child,
table :not(tfoot) tr:first-child td:first-child {
border-top-left-radius: 5px;
border-bottom-left-radius: 0;
}
/* top-right border-radius */
table :not(tfoot) tr:first-child th:last-child,
table :not(tfoot) tr:first-child td:last-child {
border-top-right-radius: 5px;
border-bottom-right-radius: 0;
}
/* bottom-left border-radius */
table :not(thead) tr:last-child th:first-child,
table :not(thead) tr:last-child td:first-child {
border-bottom-left-radius: 5px;
}
/* bottom-right border-radius */
table :not(thead) tr:last-child th:last-child,
table :not(thead) tr:last-child td:last-child{
border-bottom-right-radius: 5px;
}
/*Handle thead and tfoot borders*/
table thead tr:first-child th,
table thead tr:first-child td {
border-top-style: none;
}
table thead tr:last-child th,
table thead tr:last-child td {
border-bottom-style: solid;
border-bottom-width: 2px;
border-bottom-color: darkgreen;
}
table tfoot tr:last-child th,
table tfoot tr:last-child td {
border-bottom-style: none;
}
table tfoot tr:first-child th,
table tfoot tr:first-child td {
border-top-style: solid;
border-top-width: 2px;
border-top-color: darkgreen;
}
table tr:first-child th,
table tr:first-child td {
border-top-style: none;
}
深绿色用来清楚地显示整个表格的边界是正确的。从本质上讲,无论你在哪里看到深绿色-是你样式表的边界。
这个代码基显示普通表和有头,体和脚的表。CSS与上面的相同,只是为th添加了样式重置。在写作的时候,你可以看到,它们都呈现相同的效果。
对于一个有边框和可滚动的表,使用这个(replace variables, $ starting texts)
如果使用thead, tfoot或th,只需用它们替换tr:first-child和tr-last-child和td。
#table-wrap {
border: $border solid $color-border;
border-radius: $border-radius;
}
table {
border-collapse: collapse;
border-spacing: 0;
}
table td { border: $border solid $color-border; }
table td:first-child { border-left: none; }
table td:last-child { border-right: none; }
table tr:first-child td { border-top: none; }
table tr:last-child td { border-bottom: none; }
table tr:first-child td:first-child { border-top-left-radius: $border-radius; }
table tr:first-child td:last-child { border-top-right-radius: $border-radius; }
table tr:last-child td:first-child { border-bottom-left-radius: $border-radius; }
table tr:last-child td:last-child { border-bottom-right-radius: $border-radius; }
HTML:
<div id=table-wrap>
<table>
<tr>
<td>1</td>
<td>2</td>
</tr>
<tr>
<td>3</td>
<td>4</td>
</tr>
</table>
</div>