web实战:装饰表格

table标签在我们学习HTML的时候可能会经常用到,但开始做项目了后,原生table的使用反而减少了,因为大多UI框架都会对table进行包装美化,方便了我们的使用,但也使我们逐渐忘记了如何进行原生的修饰,今天通过一个小demo回顾温习下吧。

假设一个简单的需求:创建一个展示库存(inventory)的表格。那么,首先就是用HTML写好整个表格框架了。

<table class="inventory">
    <caption>
        Table: Current Inventory
    </caption>
    <colgroup>
        <col id="product">
        <col id="price">
        <col id="rating">
    </colgroup>
    <tr>
        <th>Product</th>
        <th>Price</th>
        <th>Rating</th>
    </tr>
    <tr>
        <td>Vitae Quam Lorem</td>
        <td>$19.95</td>
        <td>4.5</td>
    </tr>
</table>复制代码
body {
    width: 760px;
    margin: 0 auto;
    background-color: #FDFCD2;
}

.inventory{
    font-family: "Trebuchet MS",Arial Helvetica,sans-serif;
    width:100%;
    margin-top: 25px;
}复制代码

table的构建代码是不是很少,省略了一些代码,因为有些没有太大的作用,比如thead之类的,好像只是是改变table的渲染顺序而已。具体代码就不详讲了,个别的下面的修饰过程中会提及。

我们看看没有任何修饰时的表单:


是不是无法直视。接下来我们一步一步来修该。

首先从标题开始,标题放中间不好看,把它移动到最右边吧,然后和表格得有一定的间距,并且加粗加颜色让别人知道这货是个标题。

.inventory caption{
    color: #797865;
    text-align: right;
    font-size: 1.5em;
    margin-bottom: 10px;
}复制代码

这里使用了em做单位,与基本字体大小成倍数关系,方便设置。


嗯,还是很丑,继续。

为了方便数据的查阅,我们为单元格添加边框,从视觉上把数据隔开。

.inventory td,.inventory th{
    font-size: 1.1em;
    border: 1px solid #DDB575;
}复制代码


单元格间出现间隙,边框也重复了,我们要把间距去掉并把边框合并成一条,如果要在th,td上修改,那就比较麻烦,作用在table标签上的border-collapse样式属性就是专门解决这个问题的。单元格的数据有点拥挤,得添加一些内边距,并设置对齐方式如:

.inventory{
    /*坍塌边框,去掉单元格空隙*/
    border-collapse: collapse;
}复制代码
.inventory td, .inventory th{
    padding: 3px 7px;
    cursor: pointer;
    /*text-align可以继承*/
    text-align: left;
    /*vertical-align不能继承,所有要应用在td,th中*/
    vertical-align: middle;
}复制代码


是不是好多了,但表头信息和表格数据没有明显区分,容易混淆,而且一旦单元行数过多,用户很难区分数据属于哪一行,或者是自己读到哪一行了。因此,好的视觉指引极其重要。所以我们要突出表头,并且隔行设置不同的颜色,如奇偶数行,并在用户使用鼠标选中数据查看时,要高亮该行颜色进行指引。

/*突出表头*/
.inventory th{
    text-transform:uppercase;
    padding-top: 5px;
    padding-bottom: 5px;
    /*兼容旧的浏览器,比如IE9之前*/
    background: rgb(229,76,16);
    background: linear-gradient(to bottom, rgb(229,76,16),rgb(173,54,8));
    color:white;
}

/*突出关键列的数据*/
.inventory tr td:last-of-type{
    color: rgb(229,76,16);
}复制代码
/*增加奇偶数行的颜色,方便用户对每行数据的识别*/
.inventory tr:nth-of-type(odd){
    /*选择透明色,防止覆盖数据*/
    background-color: rgba(229,76,16,.1);
}
.inventory tr:nth-of-type(even){
    background-color: rgba(225,255,255,.1);
}
/*标识选中的数据*/
.inventory tr:hover{
    background: rgba(238, 79, 17, 0.4);
}复制代码

最后做个小修该,就是缩小后两列的列宽,让表格展示更加合理美观。

/*用列组的方式设置列宽,但只能使用两组属性width和背景属性(background-)*/
#price,#rating{
    width: 15%;
}复制代码

完成全部修改后:


本来我想比较少见的代码都提下,但好像能说的只是功能而已,搜索下就知道了,没有难度。需要注意的是vertical-align属性,它是比较常见的一个css属性,但也是很难的一个,一般作用于内联格式上下文(IFC)如inlineinline-block等属性的元素中,还有就是作用于table-cell属性的元素,如td,在td中,vertical-align:middle是垂直居中作用,但在inline-block中就不一定了,具体的推荐去看这篇文章:深入理解 CSS:字体度量、line-height 和 vertical-align,但这篇文章篇幅较长而且难点多,建议有充足的时间再去阅读。

最后,源码祭上:web实战:装饰表格

参考:CSS实战手册(书籍,demo中的素材是从里面提取的,如颜色,名称等)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值