CSS九宫格布局实现
[[toc]]
基本的布局
<!DOCTYPE html> <html> <head>     <meta charset="UTF-8">     <meta name="viewport"           content="width=device-width,user-scalable=no,initial-scale=1,maximum-scale=1,minimum-scale=1,viewport-fit=cover">     <title></title>     <style>         .box {             background: #e4f7fd61;             border: 2px solid #0786ada1;             border-radius: 8px;         }         ul {             padding: 0;             margin: 0;         }         .box li {             list-style: none;             text-align: center;             line-height: 200px;             background: rgba(146, 203, 230, 0.65);             border-radius: 8px;         }     </style> </head>
  <body> <div class="box">     <ul class="flex grid">         <li>1</li>         <li>2</li>         <li>3</li>         <li>4</li>         <li>5</li>         <li>6</li>         <li>7</li>         <li>8</li>         <li>9</li>     </ul> </div> </body> </html>
   | 
 
margin负值实现
- 最外层的包裹元素等于:li宽度3+li右间距2
 
- 子盒子左浮动,margin-left margin-bottom间距为20px
 
- 父盒子的margin-bottom和margin-top的的间距为-20px,消除子盒子代理的移动
 
- 父盒子消除浮动
 
.box {     width: 940px; }
  ul {     margin-right: -20px;     margin-bottom: -20px;   }
  ul:after {     content: '';     display: block;     height: 0;     width: 0;     clear: both;     visibility: hidden; }
  .box li {     float: left;     width: 300px;     height: 200px;     margin-right: 20px;     margin-bottom: 20px; }
  | 
 
nth-child
跟上面的那种方法类似,就是把父盒子的移动换成了指定的子盒子移动
但是这回出现一个问题就是最下的一层盒子个数不确定所以margin-bottom,就没办法正确的设置
所以就会用到css的级联使用,方法看如下的代码:
...  // 代码跟上面的一致,去除UI部分 .box li:nth-child(3n) {     margin-right: 0 } .box li:nth-child(3n+1):nth-last-child(-n+3), .box li:nth-child(3n+1):nth-last-child(-n+3) ~ li {     margin-bottom: 0; } // li:nth-last-child(-n+3)
   | 
 
grid布局
 .grid {     display: grid;     grid-template-rows: 100px 100px 100px;     grid-template-columns: 100px 100px 100px; }
  .grid > li {     margin-top: 4px;     margin-left: 4px;     box-sizing: border-box;     list-style: none;     line-height: 100px;     text-align: center;     border: 4px solid #ccc;     background: #6a8bad; } .grid > li:hover{     border-color: red;     position: relative;     transition: all 500ms;      }
  | 
 
这里有一个地方需要注意,就是不要再给li子项设置宽度和高度。
该grid布局中,也可以在hover时添加z-index:2;来提高叠加等级,不然没办法展示全部
flex布局
.flex {     display: flex;     width: 312px;     flex-wrap: wrap;     margin: -4px 0 0 -4px; }
  .flex > li {     box-sizing: border-box;     height: 100px;     width: 100px;     margin-left: 4px;     margin-top: 4px;     line-height: 100px;     text-align: center;     list-style: none;     background: rgba(146, 203, 230, 0.65); }
  .flex > li:hover {     background: red;     position: relative;      }
  |