ul、li 标签实现完美表格

  • Post author:
  • Post category:其他


第一种是没有缺口的,如下图

第二种是有缺口的,如下图


两种表格的最大特点就是不用给表格里的每个 li 元素都单独设置 css 样式,要用的时候直接闭着眼睛循环 li 标签即可。

第一种的特点是

1、内边框的大小是一致的。

2、内边框的大小和外边框的大小可以分别设置。

3、内边框和外边框的颜色可以分别设置。

4、每个小方框的白色部分大小是一致的(空缺部分不算)。

第二种的特点是

1、空缺部分可以不用被方框包裹。

2、内边框的大小是一致的。

3、内边框和外边框的颜色要一致(要不然不好看)。

4、内边框的大小和外边框的大小要一致(要不然不好看)。

5、每个小方框的白色部分大小是一致的。

第一种实现

<!DOCTYPE html>
<html lang="zh-cn">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        *{
            margin:0;
            padding:0;
        }


        ul{
            width: 500px;
            margin: 200px auto;
            border: 10px solid red;
            overflow: hidden;
        }


        ul li{
            float: left;
            list-style: none;
            width: 92px;
            height: 100px;
            border-right: 10px solid blue;
            border-bottom: 10px solid blue;
            margin-bottom: -10px;
        }


        li:nth-child(5)~li{
            padding-top: 10px;
        }

        li:nth-child(5n){
            border-right: none;
        }

    </style>
</head>
<body>

<ul>
    <li><a href="#">1</a></li>
    <li><a href="#">2</a></li>
    <li><a href="#">3</a></li>
    <li><a href="#">4</a></li>
    <li><a href="#">5</a></li>
    <li><a href="#">6</a></li>
    <li><a href="#">7</a></li>
    <li><a href="#">8</a></li>
    <li><a href="#">9</a></li>
    <li><a href="#">10</a></li>
    <li><a href="#">11</a></li>
    <li><a href="#">11</a></li>
    <li><a href="#">11</a></li>
    <li><a href="#">11</a></li>
    <li><a href="#">11</a></li>
    <li><a href="#">11</a></li>
    <li><a href="#">11</a></li>
    <li><a href="#">11</a></li>
</ul>

</body>
</html>

原理

1、 给每个 li 元素设置负的 margin-bottom,这样每个 li 元素底部的元素会往上跑,导致每个 li 元素的底部边框重叠在一起。

2、因为第一步的操作,从二行开始的 li 元素的可视区高度会减少,所以要给第二行开始的每个 li元素设置一个 padding-top(撑开第二行开始的每个 li元素的高度),这样可以使第二行开始的每个 li 元素的可视区高度和第一行 li元素的可视区高度相等,还可以使第二行开始的每个 li 元素的子元素的位置和第一行 li 元素的子元素的位置相等(利用 li:nth-child(5)~li)。

3、对每一行最右边的 li 元素进行处理,使每一行最后边的 li 元素的右边框设置成 none (利用 li:nth-child(5n) )。

第二种实现

<!DOCTYPE html>
<html lang="zh-cn">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>

        *{
            margin:0;
            padding:0;
        }


        ul{
            width: 510px;
            margin: 200px auto;
            border-top: 10px solid red;
            border-left: 10px solid red;
            overflow: hidden;
        }

        li{
            float: left;
            list-style: none;
            width: 92px;
            height: 100px;
            border-right: 10px solid blue;
            border-bottom: 10px solid blue;
        }
    </style>
</head>
<body>
    <ul>
        <li><a href="#">1</a></li>
        <li><a href="#">2</a></li>
        <li><a href="#">3</a></li>
        <li><a href="#">4</a></li>
        <li><a href="#">5</a></li>
        <li><a href="#">6</a></li>
        <li><a href="#">7</a></li>
        <li><a href="#">8</a></li>
        <li><a href="#">9</a></li>
        <li><a href="#">10</a></li>
        <li><a href="#">11</a></li>
        <li><a href="#">11</a></li>
        <li><a href="#">11</a></li>
        <li><a href="#">11</a></li>
        <li><a href="#">11</a></li>
        <li><a href="#">11</a></li>
        <li><a href="#">11</a></li>
        <li><a href="#">11</a></li>
    </ul>
</body>
</html>

原理

没啥原理,一看就懂。



版权声明:本文为weixin_44161401原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。