HTML怎么建立两行四列的li,关于CSS如何实现多行多列布局的方法

news/2024/7/3 17:09:45

5268f80b9b1e01f982625ef6fac83ca1.png

这篇文章主要介绍了CSS实现多行多列的布局的实例代码,需要的朋友可以参考下

1.两列多行:

bf4596c6b43e0e7e9837faf86eb4d910.png

HTML:

box1:实现两列多行布局

  • 111
  • 222
  • 333

CSS:

.box1 {

width: 500px;

background: #EEEEEE;

}

.box1 ul {

clear: both;

overflow: hidden;

}

.box1 ul li {

width: 48%;

height: 100px;

margin-bottom: 10px;

background: skyblue;

float: left;

}

.box1 ul li:nth-child(even) {

margin-left: 4%;

}

这用到了nth-child(),兼容ie9及以上的浏览器,中间的空隙就是两个并排p宽度之和,100%减去后剩下的宽度;

既然提到了nth-child(),那么就要说一下nth-of-type(),也是只兼容ie9及以上的浏览器。它与nth-child的区别是:

如果要让第二个p标签背景为红色,那么,p:nth-child(4)这个能实现效果;而p:nth-of-type(2),就能实现。所以nth-of-type不管p标签前面有多少内容,都只认p的第二个元素。而nth-child却是找它父级的第几个元素。在这种情况下nth-of-type的优点就体现出来了。

2.多行多列

ae8987d2c43f4e7460ac25bc0aeec146.png

HTML:

box2:多行多列

  • 111

  • 222

  • 333

  • 444

CSS:

.box2 {

background: #EEEEEE;

margin-top: 20px;

width: 500px;

}

.box2 ul {

overflow: hidden;

margin-left: -10px;

background: #EEEEEE;

}

.box2 ul li {

width: 33.3333%;

height: 50px;

float: left;

padding-left: 10px;

box-sizing: border-box;

margin-bottom: 10px;

}

.box2 ul li .com {

height: inherit;

background: skyblue;

}

这里实现的原理是:子级使用padding-left(元素间的间隙)和box-sizing:border-box,父级使用margin-left负值,这个值和子级padding-left是一样的。li里面加p只是为了让效果明显,不然给li加上背景,由于box-sizing:border-box的存在,li看起来就是没效果全部连在一起的。

如果要实现2列,4列,5列等多列,只需修改li的宽度(平均分配)就行了。

这种做法兼容ie8及以上的浏览器,在ie7下,每个li的宽度大概比正常的少2%左右,比如3列,正常显示的话,每个li宽度是33.333%,但是ie7下需设置31.333%,才能基本正常显示。。。这具体的原因没深究,后面有时间再来补这个坑 ×××

3.圣杯布局:

2a00a61fd0f1f7eb67a90646ed78f9ec.png

HTML:

圣杯布局(使用浮动)顶部

中间自适应宽度,注意这个center是在left的p前面

左部固定宽度

右部固定宽度

CSS:

.box3 {

background: #EEEEEE;

color: white;

margin-top: 20px;

}

.box3 .header {

width: 100%;

background: #008000;

height: 50px;

}

.box3 .container {

clear: both;

overflow: hidden;

padding: 0 130px 0 100px;

}

.box3 .container .left {

width: 100px;

float: left;

background: #008B8B;

height: 100px;

margin-left: -100%;

position: relative;

left: -100px;

}

.box3 .container .center {

background: #00BFFF;

height: 100px;

float: left;

width: 100%;

}

.box3 .container .right {

width: 130px;

float: left;

background: #FA8072;

height: 100px;

margin-left: -130px;

position: relative;

right: -130px;

}

.box3 .footer {

width: 100%;

background: #222222;

height: 30px;

}

圣杯布局最主要的是中间那并列的3个p,上下两个p,我只是拿来充数的。。。

实现过程大致如下:1.这三个p的HTML摆放的先后顺序是有讲究的,center这个显示在中间的p,在html里是排在最前面的,然后是left,最后是right。

2.在container没有设置padding,left这个p和right这个p都没设置margin与相对定位relative之前,三个p都float:left。这时候页面上显示的是center独占一行,然后是left这个p,然后是right这个p

3.然后left这个p设置margin-left:-100%。这样left就能从第二排蹦到第一排最左边并覆盖center这个p。

4.right这个p设置margin-left: -130px;这个值是它自己宽度的大小。然后right这个p也蹦到第一排最右边并覆盖center这个p。

5.这个时候container设置padding,这个padding的大小是left与right这两个p分别的宽度,然后left与right这两个p分别再设置相对定位,移动自己宽度的距离,就正常显示了。

这种布局方式ie7都兼容,ie6没有测试过。。。

4.仿圣杯布局

c8d8178ce34d03474d16e02ce0df115c.png

HTML:

圣杯布局2(使用定位)顶部

左部固定宽度

中间自适应宽度,无需考虑顺序

右部固定宽度

CSS:

.box4 {

background: #EEEEEE;

color: white;

margin-top: 20px;

}

.box4 .header {

width: 100%;

background: #008000;

height: 50px;

}

.box4 .container {

clear: both;

overflow: hidden;

padding: 0 130px 0 100px;

position: relative;

}

.box4 .container .left {

width: 100px;

background: #008B8B;

height: 100px;

position: absolute;

top: 0px;

left: 0px;

}

.box4 .container .center {

background: #00BFFF;

height: 100px;

width: 100%;

}

.box4 .container .right {

width: 130px;

background: #FA8072;

height: 100px;

position: absolute;

top: 0px;

right: 0px;

}

.box4 .footer {

width: 100%;

background: #222222;

height: 30px;

}

这种方式实现的思路是:左右两边绝对定位,然后中间的p设置padding,也能达到同样的效果。也不用在意中间的三个p的排版顺序,我一直都在用这种方式。

也兼容ie7,ie6没测试过

5.双飞翼布局

063295f7e563358ec3fa9a2885142be3.png

HTML:

双飞翼布局顶部

中间自适应宽度,注意这个center是在left的p前面

左部固定宽度

右部固定宽度

CSS:

.box5 {

background: #EEEEEE;

color: white;

margin-top: 20px;

}

.box5 .header {

width: 100%;

background: #008000;

height: 50px;

}

.box5 .container {

clear: both;

overflow: hidden;

}

.box5 .container .left {

width: 100px;

float: left;

background: #008B8B;

height: 100px;

margin-left: -100%;

}

.box5 .container .center {

background: #00BFFF;

height: 100px;

float: left;

width: 100%;

}

.box5 .container .center .center-in {

margin: 0 130px 0 100px;

}

.box5 .container .right {

width: 130px;

float: left;

background: #FA8072;

height: 100px;

margin-left: -130px;

}

.box5 .footer {

width: 100%;

background: #222222;

height: 30px;

}

双飞翼布局和圣杯布局看起来都差不多,但是最大的不同就是:双飞翼布局中center中间的这个p里面还有一个p,主要通过这个p的margin值来达到布局的目的。然后left和right这两个p都不用再设置相对定位relative。其它的都基本一样

兼容ie7,ie6未测试过。

还有许多多行多列的布局方式,比如css3的flex,inline-block等等。。只要有思路,再难的布局都能实现。

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

相关推荐:

关于css3中矩阵的使用方法

如何使用CSS实现鼠标上移图标旋转的效果


http://www.niftyadmin.cn/n/1998596.html

相关文章

嵌入式面试

嵌入式面试 0116、那种排序方法最快? (华为面试题)17、写出两个排序算法,问哪个好?(威盛) 18、编一个简单的求n!的程序 。(Infineon笔试试题) 19、用一种编程语言写n!的算法。(威盛…

云原生应用开发12-Factors

英文地址:https://12factor.net/ 中文地址:https://12factor.net/zh_cn/ 文章内容 简介 如今,软件通常会作为一种服务来交付,它们被称为网络应用程序,或软件即服务(SaaS)。12-Factor 为构建如下…

C/C++程序员应聘常见面试题

C/C程序员应聘常见面试题作者:宋宝华 1.引言 本文的写作目的并不在于提供C/C程序员求职面试指导,而旨在从技术上分析面试题的内涵。文中的大多数面试题来自各大论坛,部分试题解答也参考了网友的意见。 许多面试题看似简单,却需要…

媒体纷纷发问“AI摄影革命”,荣耀总裁赵明终于沉不住气了

4月9日,荣耀手机官方微博正式公布,荣耀将在4月19日在上海召开荣耀10新品发布会。产品名公布的海报中,除了机身采用变色设计之外,还透露即将带来“AI摄影革命”。对于荣耀10的变色机身设计如今已经有很多的爆料内容,不过…

通用计算机教育,计算机教学计划(通用3篇)

计算机教学计划(通用3篇)时间过得太快,让人猝不及防,我们又将在努力中收获成长,是不是需要好好写一份教学计划呢?好的教学计划都具备一些什么特点呢?以下是小编收集整理的计算机教学计划(通用3篇),供大家参…

Vertx session 使用须知

要使用vertx的session,必须把sessionHandler设为router的第一个匹配的route,否则将报错。比如下面的代码将引起报错:public class LeanS1 extends AbstractVerticle {Overridepublic void start() throws Exception {Router router Router.router(vertx);router.ro…

手机的缘分

发信人: huoma (火马), 信区: Heartsong标 题: 手机的缘分发信站: BBS 水木清华站 (Wed May 2 08:57:07 2007), 站内 手机失窃。 2005年5月1日,诺基亚1100取代万事不灵的小灵通泰丰888,500米身价投戎洒家麾下。两年来,如影随形、任劳任怨…

计算机知识书面,中学生计算机知识书面考试模拟试卷.doc

中学生计算机知识书面考试模拟试卷中学生计算机知识书面考试模拟试题(1)试卷说明:本试卷考试时间为90分钟。试卷答案一律写在答卷纸上,按各试题答案编号填写在答卷上相应编号处。答题一律用钢笔或圆珠笔书写,不得用铅笔书写。4.凡…