温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
  • 忘记密码?
登录注册×
获取短信验证码
其他方式登录
点击 登录注册 即表示同意 《亿速云用户服务条款》
  • 服务器
  • 数据库
  • 开发技术
  • 网络安全
  • 互联网科技
登 录 注册有礼
最新更新 网站标签 地图导航
产品
  • 首页 > 
  • 教程 > 
  • 开发技术 > 
  • web开发 > 
  • 如何使用CSS实现九宫格布局

如何使用CSS实现九宫格布局

发布时间:2021-01-08 13:49:26 来源:亿速云 阅读:306 作者:小新 栏目: web开发

这篇文章主要介绍如何使用CSS实现九宫格布局,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

如何使用CSS实现九宫格布局

教程推荐:css视频教程

目录:

  • margin负值实现

  • 祖父和亲爹的里应外合

  • 换个思路 - li生了儿子帮大忙。

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

  • cloumn多栏布局

  • grid

  • display: table;

  • css3选择器nth-child()

前提说明

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

<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代码如下:

/* 基础 */
    .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负值实现

原理

margin负边距

关键点

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设置负值的外边距方向一致。

关键代码

    .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;
    }

如何使用CSS实现九宫格布局

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

原理

外层box盒子overflowul元素宽度死值相结合

其实换一种角度和思路,又是一个解决方法,不用margin负值,我们想要li要对其ul两端效果,之所以纠结是因为li又需要margin-right,而右边最后一个li的margin又会撑开和父亲ul的距离,让我们头疼。

那既然是节外生枝,我们直接让祖父砍掉多出来的那一节不就行了?父亲ul设置宽度,坚持让儿子占他的位置,而box祖父就做一个坏人,使用overflow砍掉多余出来的一个margin-right的距离。

关键点

1. box使用overflow:hidden;无情的砍掉li的右margin

2. ul唱白脸,设置宽度坚持让三个li并排站,而不让最后一个li因为没地方挤到下一排。

3. li 做最真诚的自己

关键代码

因为做demo都在一个html里,防止类名覆盖,这里原来叫box的盒子改叫sec了

    .sec{
      width: 640px;
      overflow: hidden;
    }
    ul{
      width: 660px;
      overflow: hidden;
      margin-bottom: -20px;
      margin-top: 0;
    }
    .sec li{
      float: left;
      width: 200px;
      height: 200px;
      margin-right: 20px;
      margin-bottom: 20px;
    }

如何使用CSS实现九宫格布局

如何使用CSS实现九宫格布局

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

如何使用CSS实现九宫格布局

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

原理

图片中的红色边框,是li元素,红色边框总的深红区域是li元素内部的子元素。红边框和子元素之间的白色距离是子元素的margin生成。

关键点

1. 父元素box以前20的内边距,这次改成10,因为外孙li>div会帮忙的。

2. li不再设置margin-right来撑开多个li之间的距离

3. li内部的div设置左右margin来撑开li和li以及li和父元素之间的距离。

关键代码

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

  <div class="sec02">
    <h4>
      里应外合-li的边距交给孩子们来做,自己只负责一排站三个人的排列工作    </h4>
    <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>
   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后的效果

如何使用CSS实现九宫格布局

li与嫡长子的左边距作用于浅红和深红之间的左边距,

li嫡长子的右边距和下一个li嫡长子的左边距综合 构成了两个li之间的间距。

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

自适应?先来一波效果图:

如何使用CSS实现九宫格布局

原理

absolute+四个方位值撑开局面、float+宽度百分比实现横向排列。高度百分比实现自适应。

关键点

1. page最外层的父元素使用absolute负责占位,给子元素们把空间拉开。或者用宽高也行

如何使用CSS实现九宫格布局

2. 每一个块的父元素list利用浮动和33.33%的宽度百分比实现横向自适应排列

3. 本案例中,list元素内部用了伪元素+absolute的方式做了效果展示,实际项目中,list元素里边就可以填充自己个各式各样的业务代码了。

关键代码

<div class="page">
	<div class="list" data-index="1">
	</div>
	<div class="list" data-index="2">
	</div>
	<div class="list" data-index="3">
	</div>
	<div class="list" data-index="4">
	</div>
	<div class="list" data-index="5">
	</div>
	<div class="list" data-index="6">
	</div>
	<div class="list" data-index="7">
	</div>
	<div class="list" data-index="8">
	</div>
	<div class="list" data-index="9">
	</div>
</div>
html,body{
    height:100%;
    margin:0;
}
 .page{
    position:absolute;
    left:0;
    top:180px;
    right:0;
    bottom:0;
}
 .list{
    float:left;
    height:33.3%;
    width:33.3%;
    position:relative;
}
 .list:before{
    content:'';
    position:absolute;
    left:10px;
    right:10px;
    top:10px;
    bottom:10px;
    border-radius:10px;
    background-color:#cad5eb;
}
 .list:after{
    content:attr(data-index);
    position:absolute;
    height:30px;
    left:0;
    right:0;
    top:0;
    bottom:0;
    margin:auto;
    text-align:center;
    font:24px/30px bold 'microsoft yahei';
}

方法五、cloumn多栏布局

原理

cloumn设置三栏布局,这种还是自适应效果的

关键点

1. box依旧做了最严格的祖父,又是宽度限制,又是overflow决绝设卡。

2. ul这次挑了大梁,针对内部的li使用column多栏布局,设置为三栏显示,且每一栏之间

3. 而有了ul的操心,li则美滋滋的做起了公子哥,只管自己的宽高和下边距就好,右边距他爹都给他处理好了。

关键代码

.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;
}

如何使用CSS实现九宫格布局

方法六、grid

原理

用CSS Grid 创建网格布局,是最简单也是最强大的方法。

关键点

1. 九个单元的父元素wrapper设置display为grid类型(注意兼容写法)

默认九个元素就会堆叠排序。

如何使用CSS实现九宫格布局

2. 设置每一行中单个元素的宽度: grid-template-columns,每个宽度值100px根据业务需要设置。

给三个设置了宽度就长这样了。

如何使用CSS实现九宫格布局

3. 设置每一列中单个元素的高度: grid-template-rows,每个高度值100px根据业务需要设置。

最后出现我们想要的效果:

如何使用CSS实现九宫格布局

关键代码

<div class="wrapper">
	<div class="list list1">
		1
	</div>
	<div class="list list2">
		2
	</div>
	<div class="list list3">
		3
	</div>
	<div class="list list4">
		4
	</div>
	<div class="list list5">
		5
	</div>
	<div class="list list6">
		6
	</div>
	<div class="list list7">
		7
	</div>
	<div class="list list8">
		8
	</div>
	<div class="list list9">
		9
	</div>
</div>
.wrapper{
     display: grid;
     grid-template-columns: 100px 100px 100px;
     grid-template-rows: 100px 100px 100px;
}
 .list{
     background: #eee;
}
 .list:nth-child(odd){
     background: #999;
}

方法七、display:table;

如何使用CSS实现九宫格布局

原理

其实他是table的css版本处理方式。原谅我只能想到加结构、模拟tr+td的方式实现了。

好处:也是唯一能用来安慰自己的地方就是,不用table标签少了很多reset样式~

关键点

1. 三行li,每个li里三列div(模拟表格的结构)

2. 父元素ul使用display: table(此元素会作为块级表格来显示(类似 <table>),表格前后带有换行符。)

3. li元素使用display: table-row(此元素会作为一个表格行显示(类似 <tr>)。)

4. li元素内部三个子元素使用display: table-cell(此元素会作为一个表格单元格显示(类似 <td> 和 <th>))

关键代码

    <ul class="table">
      <li>
        <div>1</div>
        <div>2</div>
        <div>3</div>
      </li>
      <li>
        <div>4</div>
        <div>5</div>
        <div>6</div>
      </li>
      <li>
        <div>7</div>
        <div>8</div>
        <div>9</div>
      </li>
    </ul>
    .table {
      display: table;
    }
    .table li {
      display: table-row;
      background: #beffee;
    }
    .disTable li:nth-child(odd) {
      background: #bec3ff;
    }
    .table li div {
      width: 200px;
      line-height: 200px;
      display: table-cell;
      
      text-align: center;
    }
    .table li:nth-child(odd) div:nth-child(even) {
      background: #beffee;
    }
    .table li:nth-child(even) div:nth-child(even) {
      background: #bec3ff;
    }

方法八、css3选择器nth-child();

原理

利用css的选择器,选择对应个数的li,设置特殊样式。

不足(缺点)

li必须要设置固定的宽高,且ul也要设置固定宽高,以强制似的li“归位”。

关键点

li.nth-child(3n):控制第3以及3的倍数的li的右边距不存在。

关键代码

<ul class="lists">
    <li class="list list1">1</li>
    <li class="list list2">2</li>
    <li class="list list3">3</li>
    <li class="list list4">4</li>
    <li class="list list5">5</li>
    <li class="list list6">6</li>
    <li class="list list7">7</li>
    <li class="list list8">8</li>
    <li class="list list9">9</li>
  </ul>
  ul,li{
      list-style: none;
      overflow: hidden;
    }
    ul{
      width: 620px;
    }
    li.list{
      float: left;
      width: 200px;
      height: 200px;
      margin-right: 10px;
      margin-bottom: 10px;
      background: #eee;
    }
    li:nth-child(3n){
      margin-right: 0;
    }

以上是“如何使用CSS实现九宫格布局”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注亿速云行业资讯频道!

向AI问一下细节
推荐阅读:
  1. 如何使用css实现浮动布局
  2. CSS怎样实现动态图片的九宫格布局

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

css
  • 上一篇新闻:
    CSS中first-child和nth-child有哪区别
  • 下一篇新闻:
    MySQL 5.7Explain执行计划

猜你喜欢

  • 如何在匿名内部类中实现接口回调
  • 匿名内部类如何访问外部类的局部变量
  • 在匿名内部类中如何处理异常
  • 如何在Java中创建匿名内部类的实例
  • 匿名内部类在Android开发中的应用有哪些
  • 如何在匿名内部类中实现多线程操作
  • 匿名内部类在Java设计模式中的应用有哪些
  • 在匿名内部类中如何实现单例模式
  • 如何优化匿名内部类的性能和内存占用
  • 在Java中匿名内部类与Lambda表达式有何异同
最新资讯
  • DB2在Linux中的自动化运维
  • iterate在数据清洗任务中的实践
  • iterate在分布式数据库中的应用
  • DB2与Linux操作系统的监控整合
  • DB2与Linux系统日志的整合与分析
  • Linux环境下DB2数据库的备份恢复性能优化
  • Linux环境下DB2数据库的备份验证策略
  • Linux下DB2配置技巧揭秘
  • Linux环境中DB2数据库的备份加密实践
  • MyBatis iterate与动态表结构的适应性
相关推荐
  • 如何使用css实现绝对定位布局
  • css如何实现浮动布局
  • 如何使用css实现Flex布局
  • 如何使用CSS实现三栏布局
  • css如何实现栅格布局
  • 怎么使用CSS实现多列布局
  • css怎么实现多列布局
  • css如何实现多格布局
  • css如何实现间距布局
  • 如何利用CSS实现九宫格布局

相关标签

css modules postcss css属性获取 css+html html5+css css定位 csss3 ​css3 css sprite html5 css3 css语法 animate.css css文件 css样式表 css盒子模型 css文本 css权重 CSS盒模型 css hack oocss
AI

天下网标王济南建材行业网站优化推广有用吗深圳seo网站关键词优化教程浙江网站优化推荐厂家网站关键词优化如何做乌兰察布网站优化哪家专业什么网站可以优化客户滨州加盟网站优化公司运城网站长尾关键词优化昆明网站排名优化价格网站关键词优化都选c火11星如何优化网站排名戚墅堰网站优化方式唐山网站推广优化临沂济南网站优化公司价格多少广州网站优化朔州软件优化网站辽源网站优化贵州网站关键词排名优化是什么沁阳网站自然优化收费情况魏公村网站优化驻马店网站优化公司网站优化与网站竞价的区别盘龙区网站seo优化开户网站访问性能优化的研究与实现靠谱网站优化系统加盟平台建信优化 网站徐汇区专业网站优化哪家好上海网站优化学习长安优化排名网站推广公司门户网站优化规则香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤

天下网标王 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化