前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >css布局 - 九宫格布局的方法汇总(更新中...)

css布局 - 九宫格布局的方法汇总(更新中...)

作者头像
xing.org1^
发布2018-09-20 10:30:44
2.2K0
发布2018-09-20 10:30:44
举报
文章被收录于专栏:前端说吧前端说吧

目录:

  1. margin负值实现
  2. 祖父和亲爹的里应外合
  3. 换个思路 - li生了儿子帮大忙。
  4. 借助absolute方位值,实现自适应的网格布局
  5. cloumn多栏布局
  6. grid
  7. display: table;
  8. 。。。

除非特别说明,以下几种方式的通用html结构如下:

代码语言:javascript
复制
<div class="box">
    <ul>
      <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>

除特别说明,布局中用到的css reset代码如下:

代码语言:javascript
复制
/* 基础 */
    .box{
      background: #e4f7fd61;
      border: 2px solid #0786ada1;
      border-radius: 8px;
    }
    ul{
      padding: 0;
    }
    .box li{
      list-style: none;
      text-align: center;
      line-height: 200px;
      background: rgba(146, 203, 230, 0.65);
      border-radius: 8px;
    }

方法一、margin负值实现

原理

代码语言:javascript
复制
原理:margin负边距

关键点

代码语言:javascript
复制
1. 最外层的包裹元素等于:li宽度*3+li右间距*2
2. 如果li是右间距,则ul的margin-right为负的li间距值。
3. 父元素ul使用overflow:hidden;形成bfc,以清除浮动带来的影响(父元素塌陷)。 
4. margin-bottom和margin-top的配合,是同right的理的,消除最后一排li撑开的底边距。
5. li要浮动。外边距方向和ul设置负值的外边距方向一致。

关键代码

代码语言:javascript
复制
    .box{
      width: 940px;
    }
    ul{
      overflow: hidden;
      margin-right: -20px;

      margin-bottom: -20px;
      margin-top: 0;
    }
    .box li{
      float: left;
      width: 300px;
      height: 200px;
      margin-right: 20px;
      margin-bottom: 20px;
    }

方法二、祖父和亲爹的里应外合

原理

代码语言:javascript
复制
原理:外层box盒子overflow和ul元素宽度死值相结合

其实换一种角度和思路,又是一个解决方法,不用margin负值,我们想要li要对其ul两端效果,之所以纠结是因为li又需要margin-right,而右边最后一个li的margin又会撑开和父亲ul的距离,让我们头疼。 那既然是节外生枝,我们直接让祖父砍掉多出来的那一节不就行了?父亲ul设置宽度,坚持让儿子占他的位置,而box祖父就做一个坏人,使用overflow砍掉多余出来的一个margin-right的距离。

关键点

代码语言:javascript
复制
1. box使用overflow:hidden;无情的砍掉li的右margin
2. ul唱白脸,设置宽度坚持让三个li并排站,而不让最后一个li因为没地方挤到下一排。
3. li 做最真诚的自己

关键代码

代码语言:javascript
复制
    .box{
      width: 940px;
      overflow: hidden;
    }
    ul{
      width: 660px;
      overflow: hidden;

      margin-bottom: -20px;
      margin-top: 0;
    }
    .box li{
      float: left;
      width: 200px;
      height: 200px;
      margin-right: 20px;
      margin-bottom: 20px;
    }   

方法三、换个思路 - li生了儿子帮大忙。

间距不一定要加在父元素li身上的,父元素li可以只负责流体布局,内部用padding或第一层子元素来控制和相邻元素的间距

原理

代码语言:javascript
复制
原理:图片中的红色边框,是li元素,红色边框总的深红区域是li元素内部的子元素。红边框和子元素之间的白色距离是子元素的margin生成。

关键点

代码语言:javascript
复制
1. 父元素box以前20的内边距,这次改成10,因为外孙li>div会帮忙的。
2. li不再设置margin-right来撑开多个li之间的距离
3. li内部的div设置左右margin来撑开li和li以及li和父元素之间的距离。

关键代码

这里html结构就要变化一下,除了之前的结构,li内部要多加一个div结构了,作用就是撑开间距。

代码语言:javascript
复制
  <div class="sec02">
    <h3>
      里应外合-li的边距交给孩子们来做,自己只负责一排站三个人的排列工作
    </h3>
    <div class="box">
      <ul>
        <li><div>1</div></li>
        <li><div>2</div></li>
        <li><div>3</div></li>
        <li><div>4</div></li>
        <li><div>5</div></li>
        <li><div>6</div></li>
        <li><div>7</div></li>
        <li><div>8</div></li>
        <li><div>9</div></li>
      </ul>
    </div>
  </div>
代码语言:javascript
复制
   box{
      padding: 20px 10px;
      display: inline-block;
      background: #ff000026;
    }
    ul{
      overflow: hidden;
      width: 600px;
      margin-bottom: -10px;
      margin-top: 0;
      background: none;
    }
    li{
      list-style: none;
      float: left;
      width: 198px;/*可以用百分比*/
      height: 198px;/*可以用百分比*/
      margin-bottom: 10px;

      border: 1px solid red;
    }
    li  > div{
      background: rgba(255, 0, 0, 0.24);
      margin: 0 10px;
      border-radius: 8px;
      text-align: center;
      line-height: 198px;
    }

去掉红色border后的效果

li与嫡长子的左边距作用于浅红和深红之间的左边距, li嫡长子的右边距和下一个li嫡长子的左边距综合 构成了两个li之间的间距。


方法四、借助absolute方位值,实现自适应的网格布局

原理

代码语言:javascript
复制
原理:

关键点

代码语言:javascript
复制
1. 
2. 
3. 

关键代码

代码语言:javascript
复制

方法五、cloumn多栏布局

原理

代码语言:javascript
复制
原理:cloumn设置三栏布局,这种还是自适应效果的

关键点

代码语言:javascript
复制
1. box依旧做了最严格的祖父,又是宽度限制,又是overflow决绝设卡。
2. ul这次挑了大梁,针对内部的li使用column多栏布局,设置为三栏显示,且每一栏之间
3. 而有了ul的操心,li则美滋滋的做起了公子哥,只管自己的宽高和下边距就好,右边距他爹都给他处理好了。

关键代码

代码语言:javascript
复制
.box{
    width: 640px;
    overflow: hidden;
}
ul {
    /* display: flex; */
    -webkit-column-count: 3;
    -moz-column-count: 3;
    -webkit-column-gap: 20px;
    -moz-column-gap: 20px;
    margin-bottom: -20px;
    margin-top: 0;
}
li {
    width: 200px;
    height: 200px;
    /*margin-right: 20px;*/
    margin-bottom: 20px;
}

方法六、grid

原理

代码语言:javascript
复制
原理:

关键点

代码语言:javascript
复制
1. 
2. 
3. 

关键代码

代码语言:javascript
复制

方法七、display:table;

原理

代码语言:javascript
复制
原理:

关键点

代码语言:javascript
复制
1. 
2. 
3. 

关键代码

代码语言:javascript
复制
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-08-31 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 方法一、margin负值实现
    • 原理
      • 关键点
        • 关键代码
        • 方法二、祖父和亲爹的里应外合
          • 原理
            • 关键点
              • 关键代码
              • 方法三、换个思路 - li生了儿子帮大忙。
                • 原理
                  • 关键点
                    • 关键代码
                    • 方法四、借助absolute方位值,实现自适应的网格布局
                      • 原理
                        • 关键点
                          • 关键代码
                          • 方法五、cloumn多栏布局
                            • 原理
                              • 关键点
                                • 关键代码
                                • 方法六、grid
                                  • 原理
                                    • 关键点
                                      • 关键代码
                                      • 方法七、display:table;
                                        • 原理
                                          • 关键点
                                            • 关键代码
                                            领券
                                            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档