css九宫格布局的五种方法

  要实现的九宫格效果图如下:

  公共样式:

  div{

  width: 300px;

  height: 300px;

  }

  ul{

  padding: 0;

  width: 100%;

  height: 100%;

  }

  li{

  list-style: none;

  text-align: center;

  line-height: 100px;

  margin: 3px;

  background-color: #243F49;

  color: white;

  border: 1px solid white;

  font-weight: bolder;

  }

  

  

      

  • 1
  •   

  • 2
  •   

  • 3
  •   

  • 4
  •   

  • 5
  •   

  • 6
  •   

  • 7
  •   

  • 8
  •   

  • 9
  •   

  

  1.grid网格布局

  grid-template-columns 用于定义每一列的宽度; grid-template-rows 用于定义每一行的高度;grid-gap设置网格的行间距、列间距

  ul{

  padding: 0;

  width: 100%;

  height: 100%;

  /*设置为grid网格布局*/

  display: grid;

  /*设置三行高度都为100px;*/

  grid-template-rows:100px 100px 100px ;

  /*设置三行宽度都为100px;*/

  grid-template-columns: 100px 100px 100px;

  置网格的行间距、列间距都为3px

  /*grid-gap: 3px;*/

  }

  2.flex布局

  计算好每个li的宽度和高度,总的宽、高度为300px,那么每个li的宽高就为300px/3=100px 但是由于每个li设置了margin为3px那么:

  每个li的宽度= 100px - (margin-left + marginr-right)=100-(3+3) = 94px 我们将每个li的宽度设置为94px即可。

  每个li的高度=100px - (margin-top + margin-bottom) = 100-6 = 94px 我们将每个li的高度设置为94px即可。

  确定了总的div宽高度和每个li的宽高度后用flex布局进行换行。

  当然了,先确定三个盒子的高、宽度 *3+ 间距 *2 *3个= 总宽/高度这样的计算顺序更快。

  ul{

  padding: 0;

  width: 100%;

  height: 100%;

  /*设置布局方式为flex布局*/

  display: flex;

  /*换行*/

  flex-wrap: wrap;

  }

  li{

  /*固定设置每个li的宽度和高度*/

  width: 94px;

  height: 94px;

  margin: 3px;

  list-style: none;

  text-align: center;

  line-height: 100px;

  background-color: #243F49;

  color: white;

  border: 1px solid white;

  font-weight: bolder;

  }

  3.float浮动定位

  给总的div设置一个固定的宽高,计算总的高、宽度 = 三个盒子3 + 间距2 *3个再设置每个li固定的宽高,利用float来换行,再给父元素overflow:hidden进项清除浮动定位。

  每个li的宽高度为94px,margin为3px ,div的总高度、宽度=943+32*3=300px。

  ul{

  padding: 0;

  width: 100%;

  height: 100%;

  /*清除浮动*/

  overflow: hidden;

  }

  li{

  /*固定设置每个li的宽度和高度*/

  width: 94px;

  height: 94px;

  /*第三种方法:浮动定位进行换行*/

  float: left;

  margin: 3px;

  list-style: none;

  text-align: center;

  line-height: 100px;

  background-color: #243F49;

  color: white;

  font-weight: bolder;

  }

  4.inline-block+letter-spacing属性/font-size:0

  和前面两种一致,先计算宽高度、设置每个li的宽高度,再将li使用dispaly:inline-block换行,再用letter-spacing属性的负值进行减少字符之间的空白

  letter-spacing属性是增加(值为正)或减少(值为负)字符间距(字符间的空白);

  ul{

  padding: 0;

  width: 100%;

  height: 100%;

  /*减少字符间的空白*/

  letter-spacing: -5px;/*这里使用font-size:0;也可*/

  }

  li{

  /*设置每个li的固定宽度和高度*/

  width: 94px;

  height: 94px;

  display: inline-block;

  margin: 3px;

  list-style: none;

  text-align: center;

  line-height: 100px;

  background-color: #243F49;

  color: white;

  font-weight: bolder;

  }

  5.table布局

  将父元素设置为dispaly:table布局形式,使得元素以表格形式来显示,再设置单元格的边框间距。再设置相应的表格行形式display: table-row;和单元格形式display: table-cell