当前位置: 首页 > Web前端 > CSS

PC端CSS布局总结

时间:2023-03-31 13:33:22 CSS

前言本文是剖析CSS布局原理的续作。上一篇文章都是关于理论的。这篇文章讲的是具体的例子。根据自己对布局的理解和开发经验,分为以下几类。因为PC端和移动端的布局差别比较大,所以分别说一下两端的布局。本文将讲解PC端的布局。下面的代码只写关键代码。如果发现自己写了关键代码还是达不到效果,请检查自己是不是写了不该写的样式。为了提高网页性能,考虑repaint/reflow,尽量少用table元素,如果有其他选择尽量使用其他布局。居中布局1.单个元素水平居中

1.宽度固定方式一:.box{width:300px;margin:0auto;}常用方法方法二:#container{position:relative;}.box{width:100px;位置:绝对;左:0;右:0;margin:0auto;}该方法适用于方法二定位时居中,宽度不固定。方法一:.box{display:table;margin:0auto;}缺点:如果设置为表格元素,可能会影响内部元素的布局。方法二:#container{position:relative;}。框{位置:绝对;左:50%;transform:translateX(-50%);}缺点:需要使用transform,兼容性差方法三:#container{display:table-cell;//这个属性在这里可以加不加text-align:center;}.box{display:inline-block;}缺点:需要涉及到父类的样式2.单个元素垂直居中
高度固定方法一:#container{position:relative;}.box{height:50px;位置:绝对;顶部:0;底部:0;margin:auto0;}缺点:要使用定位,去掉文档流方法二:#container{height:400px;line-height:400px;}.box{display:inline-block;高度:50px;vertical-align:middle;}注意,父内容行高由容器设置,子类要记得重新设置行高。高度不固定。方法一:#container{position:relative;}.box{position:absolute;顶部:50%;transform:translateY(-50%);}缺点:需要使用transform,兼容性差方法二:#container{display:table-cell;verticle-align:middle;}缺点:是否居中由父类控制3.多个元素水平居中123#container{width:200px;高度:100px;背景:#ccc;文本对齐:中心;}跨度??{显示:内联块;background:#9fc;}四、多个元素垂直居中

1

2

3

#容器{高度:200px;显示:表格单元格;vertical-align:middle;}单行多栏布局1.等宽排列#container{显示:表格;table-layout:fixed;}.box{display:table-cell;}二、双列布局1、一栏定宽,一栏自适应,高度自适应。左列固定宽度:.left{float:left;width:100px;}.right{margin-left:100px;}右列固定宽度:#container{padding-right:100px;overflow:hidden;}.left{float:left;width:100%;}.right{position:relative;float:left;width:100px;right:-100px;container{display:table;table-layout:fixed;}.left,.right{display:table-cell;}.right{width:100px;}设置需要固定的列宽为3。适配右列:.left{float:left;}.right{overflow:auto;}左列自适应:.left{overflow:auto;}.right{float:right;}三列或三列布局1.两侧固定宽度,中间自适应,多种自适应高度1的方法:固定宽度自适应固定宽度.left,.right{position:absolute;顶部:0;}.left{左:0;width:150px;}.center{margin:080px0150px;}.right{right:0;width:80px;}方法二:圣杯布局固定宽度自适应固定宽度#container{padding:08px0150;}.left,.center,.right{position:relative;浮动:左;}。左{宽度:150px;左:-150px;右边距:-100%;}.center{宽度:100%;高度:200px;}.right{宽度:80px;右:-80px;margin-left:-80px;}方法三:双飞翼布局自适应固定宽度固定宽度div>.left,.wrap,.right{float:left;}.left{width:150px;margin-left:-100%;}.wrap{width:100%;}.center{margin:080px0150px;}.right{width:80px;margin-left:-80px;}2.固定宽度的两列,中间自适应,高度与两个固定宽度自适应固定宽度#container{width:100%;display:table;}.left,.right,.center{display:table-cell;}.left{width:150px;}.right{width:80px;}多行多列布局1.图文随着HTML的发展,为了满足页面设计者的要求,HTML增加了很多显示功能,但是随着这些功能的增加,HTML变得越来越乱,HTML页面也越来越臃肿。于是CSS诞生了。img{float:left;}2.均衡分布1.间距相同
  • 方法一:使用float.list{width:500px;height:260px;}.listli{float:left;宽度:100px;高度:100px;左边距:20px;顶部边距:20px;background:#c9f;}使用margin实现等距效果,根据父容器的宽高和子类的宽高数,计算margin-left和margin-top的值方法二:使用内联block.list{宽度:500px;高度:260px;font-size:0;}.listli{display:inline-block;宽度:100px;高度:100px;左边距:20px;顶部边距:20px;background:#c9f;}如果使用inlineblock,如果子类有text,记得设置font-size2。移除上例中的边距间距Removemarginspacing.list{width:460px;height:220px;}.listli{float:left;宽度:100px;高度:100px;左边距:20px;顶部边距:20px;背景:#c9f;}.listli:nth-of-type(4n+1){margin-left:0}.listli:nth-of-type(-n+4){margin-top:0}To兼容IE8,在对应标签中添加类名,单独处理3.瀑布式布局如上图所示,所谓瀑布式布局就是一系列等宽不同高度的框或图片。真正的瀑布布局是这样的:给每张图片设置相同的宽度,先把所有的行放在最上面,从第二行开始依次排列,找到高度最低的列作为下一张图片的排列位置。这时候很明显第二列的高度是最低的,所以把第四张图放在第二列下面。第一列和第三列的高度相同,我们优先考虑左边的列,将第五张图片放在第一列下面,那么第三列的高度最低,第六张图片放在第三张下面列等等。网上有人说用多栏浮动布局、CSS3布局、flexbox实际上实现了假瀑布流,可能会出现三栏高度相差较大的情况。真正的瀑布流是三个柱子的高度不一样。大的。下面瀑布流的具体实现htmlcss.list{位置:相对;width:600px;}.listimg{position:absolute;}jsdocument.addEventListener('DOMContentLoaded',function(){varlistDOM=document.querySelector('.list');varimgsDOM=listDOM.querySelectorAll('img');waterfallFlowLayout(listDOM,imgsDOM,3);})/***瀑布流布局**@param{DOMobject}listDOM存放图片列表的容器DOM*@param{DOMobject}imgsDOMImageDOM*@param{number}colsCount列号*/functionwaterfallFlowLayout(listDOM,imgsDOM,colsCount){colsCount=colsCount||3个;//默认3列varcurrHeightArr=[];//存储当前每一列的总高度varimgWidth=listDOM.offsetWidth/colsCount//遍历所有图像DOM元素for(vari=0;ihead侧边导航MainContent<divclass="foot">底部.head,.foot,.sidebar,.main{position:absolute;}.head{top:0;左:0;右:0;高度:80px;}.foot{底部:0;左:0;右:0;高度:60px;}.sidebar{顶部:80px;底部:60px;左:0;宽度:100px;}.main{顶部:80px;底部:60px;左:100px;右:0;}