关于本站
1、基于Django+Bootstrap开发
2、主要发表本人的技术原创博客
3、本站于 2015-12-01 开始建站
本来没有任何冲动写这个内容,由于这几天又有人问起,总结3种方法。
先看看这个问题是怎样的。通常多个div或li(也可其他元素)组成1个列表。给每个元素加个下边框,但最后一个元素加下边框不怎么美观,于是需求去掉最后一个元素的下边框。如下代码(简单的示例代码):
<html> <head></head> <body> <ul> <li class="item">1</li> <li class="item">2</li> <li class="item">3</li> <li class="item">4</li> <li class="item">5</li> </ul> <style type="text/css"> ul{list-style-type: none;} .item{ height: 3em; line-height: 3em; border-bottom:1px #ccc solid; } </style> </body> </html>
如下效果:
这个也就是本文标题的题意。可以通过CSS,jQuery,后台模版代码等方法处理。
CSS3有个伪类:last-child可以获取最后个元素。加上如下的CSS代码:
.item{ height: 3em; line-height: 3em; border-bottom:1px #ccc solid; } .item:last-child{ border-bottom: none; }
这两个CSS设置还可以使用:not简写,提高代码的可读性:
.item{ height: 3em; line-height: 3em; } .item:not(:last-child){ border-bottom:1px #ccc solid; }
实现效果如下:
当然,这个:last-child不是容易被驾驭。很容易导致里面的子元素也被设置同样的样式,而且这个是CSS3的样式,对旧浏览器兼容性不好。若你不考虑旧浏览器的话,尽管使用。
jQuery选择器可以快速获取到最后一个元素,给该元素加上一个class控制样式即可。修改代码如下:
<html> <head> <script src="http://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script> </head> <body> <ul> <li class="item">1</li> <li class="item">2</li> <li class="item">3</li> <li class="item">4</li> <li class="item">5</li> </ul> <style type="text/css"> ul{list-style-type: none;} .item{ height: 3em; line-height: 3em; border-bottom:1px #ccc solid; } .item-last{ border-bottom: none; } </style> <script type="text/javascript"> $(".item:last").addClass('item-last'); </script> </body> </html>
在最后执行jQuery代码,给最后一个元素加上item-last类。item-last类在CSS中控制样式,不加上下边框。可以在浏览器按F12查看html代码,可看到最后1个li元素加上了item-last类:
jQuery方法好处很明显,兼容性高。
这个方法比较依赖后台,不同的后台开发语言有不同的方法。我以Django为例,Django遍历元素是使用for标签。如下代码遍历items变量得到li列表:
{% for item in items %} <li class="item">item.text</li> {% endfor %}
Django模版标签在遍历过程中可以判断是否是最后一个元素:
{% for item in items %} <li class=" item {% if forloop.last %} item-last{% endif %} "> item.text </li> {% endfor %}
在li的class部分加上forloop判断是否是最后一个元素,若是最后1个,加上item-last类。注意item-last前面有个空格。
即可实现和前面jQuery的效果。
不过,我比较支持使用jQuery的方法,兼容性高且在前端实现。后台模版的方法是在后台服务器中执行,会消耗服务器部分资源。虽然消耗很少,但没必要。