CSS基础之几种常见的页面布局

本人前端菜鸟一枚,在学习 CSS 过程中发现网上流传的教程参差不齐,要么内容不够详细,要么方法就是错的,按照它给出的方法不能实现我想要的目的。于是自己决定写一篇经验。如有错误的地方,希望各位大神能够指出。话不多说,以下开始正文。

第一部分  两列式页面布局

两列式的页面布局结构是页面中最常用的也是最简单的结构,尤其是在产品展示及新闻内容页面最为常见。如下图所示,51cto的新闻内的页面就是一个典型的两列式布局。

该布局方式在内容上分为主要内容区域和侧边栏。一般情况下该布局的两列宽度具有一定的固定值,不同的是主要内容区域及侧边栏的位置。为更好的理解两列的页面布局结构,将其简化为下图(上图中的尾部区域没有截图)。

由上面的示意图可知,一个页面主要分为上、中、下三个部分。根据示意图可以将页面结构以如下形式编写代码:html>

两列式页面布局

头部信息
主要内容区域
侧边栏

底部信息

有了以上HTML骨架,接下来就用CSS来实现我们想要的样式。

一、两列定宽布局

两列定宽布局主要是指将mainBox及sideBox这两个div标签的宽度值固定,再将其控制在页面内容区域中的左右两侧。

例如,将mainBox的宽度设为750px,高度设为900px;sideBox的宽度设为200px,高度设为600px;将其父元素id名为container的容器样式设为高度900px,宽度960px,上下外边距为10px。

*{

margin: 0;

padding: 0;

}

#header,#footer{

width: 100%;

height: 100px;

background: #ccc;

}

#container{

width: 960px;

height: 900px;

margin: 10px auto;/**左右设为auto,是为了让container在页面内居中**/

}

.mainBox{

float: left;

width: 750px;

height: 900px;

color: #000;

background: #faf;

}

.sideBox{

float: right;

width: 200px;

height: 600px;

color: #000;

background: #3f0;

}

#container:after{        /**清除浮动**/

display: block;

visibility: hidden;

content: "";

clear: both;

}

效果图如下

注意事项:

1、关于清除浮动的方法,请看这里。

2、为了能够实现自适应高度的效果,需将样式中内容区域的高度删除,这样随意在HTML代码的mainBox容器中或者sideBox容器中添加内容,都不会有文字溢出容器的现象。

3、两列定宽的布局方式要求两列的盒模型宽度相加不能大于父级元素的宽度,否则将会导致页面内的错位现象。例如:如果上边代码中.mainBox 和 .sideBox 的宽度之和大于 #container 的宽度,.mainBox 和 .sideBox 将不会并列显示。

二、两列自适应布局

两列自适应布局方式其实就是将宽度属性以百分比的形式计算,但该宽度并不是盒模型的总宽度,而是盒模型的内容区域的宽度。

*{

margin: 0;

padding: 0;

}

#header,#footer{

width: 100%;

height: 100px;

background: #ccc;

}

#container{

margin: 10px auto;/**左右设为auto,是为了让container在页面内居中**/

}

.mainBox{

float: left;

width: 70%;

height: 900px;

color: #000;

background: #faf;

}

.sideBox{

float: right;

width: 29%;

height: 600px;

color: #000;

background: #3f0;

}

#container:after{        /**清除浮动**/

display: block;

visibility: hidden;

content: "";

clear: both;

}

这样mainBox和sideBox容器的高度就会随着里面内容的多少而改变。效果图就不贴出来了,有兴趣的同学可以自行拷贝代码运行一下。

三、单列定宽单列自适应布局

根据上面的内容,无论是两列定宽的布局还是两列自适应的布局,两列的盒模型总宽度相加不能大于父级元素的宽度或者大于100%,否则就会出现错位的现象。那么试想一下,定宽的布局采用px为单位,而自适应布局采用的是百分比或者默认的auto,如何将这两种不同的单位结合在一起,最终实现我们想要的单列定宽单列自适应布局呢?

我们将自适应布局中的CSS样式稍微修改一下,保持mainBox的宽度属性值为70%,修改sideBox的宽度属性值为450px。

*{

margin: 0;

padding: 0;

}

#header,#footer{

width: 100%;

height: 50px;

background: #ccc;

}

#container{

background: #ccc;

margin: 10px auto;/**左右设为auto,是为了让container在页面内居中**/

}

.mainBox{

float: left;

width: 70%;

color: #000;

background: #faf;

}

.sideBox{

float: right;

width: 450px;

color: #000;

background: #3f0;

}

#container:after{        /**清除浮动**/

display: block;

visibility: hidden;

content: "";

clear: both;

}

修改后的效果如下(为方便截图我将各个div的高度都设置了一定的高度)

我们可以发现 sideBox 掉了下来,不再与 mainBox 并列显示了。原因是 container 宽度的30%小于450px(我的屏幕分辨率为1366*768),所以导致sideBox 被挤下来了。

解决这个问题比较好用的方法是利用“负边距”来处理。对 mainBox 添加“负边距” margin-right: 450px;,对 sideBox 添加“负边距”margin-left: -450px;。

更改之后,我们发现上面出现的问题好像完美的解决了(此处就不再截图了,有兴趣的同学可以自己操作一下),但美中不足的是,当视口的宽度小于 sideBox 的宽度时,即此处小于450px时,sideBox 同样会掉下来,更小时sideBox 的前面部分还会被遮挡。这个问题在实际操作中根据情况来操作,例如设置页面大小不小于 sideBox 的宽度, 或者使用媒体查询的方式,实时地更改 sideBox 的宽度等等。

四、两列等高布局

两列等高布局的方法有很多种,每一种都有自己的优点和缺点,不论哪一种方法,最终实现的效果都是相同的。

① 利用负边距实现

在原来HTML结构的基础上,改变CSS样式。代码如下所示:

*{

margin: 0;

padding: 0;

}

#header,#footer{

width: 100%;

height: 50px;

background: #ccc;

}

#container{

overflow: hidden;

background: #ccc;

margin: 10px auto;/**左右设为auto,是为了让container在页面内居中**/

}

.mainBox{

float: left;

margin-right: 450px;

width: auto;

background: #faf;

}

.sideBox{

float: right;

width: 450px;

background: #3f0;

margin-left: -450px;

}

.mainBox,.sideBox{

color: #000;

margin-bottom: -9999px;

padding-bottom: 9999px;

}

#container:after{        /**清除浮动**/

display: block;

visibility: hidden;

content: "";

clear: both;

}

该方法的重点是设置了 mainBox 和 sideBox 的margin-bottom 和 padding-bottom 属性, 以及父元素container 使用了overflow属性。使用该方法有一个很大的弊端是如果mainBox 或者 sideBox 设置背景图片的background-position 的值为bottom时,那么背景图片很有可能会“消失”。除此之外还有很多其他的不足,因此不建议使用该方法。

②使用display:table-cell;

大家都知道在table中同一行列表中的元素高度都相同,因此我们可以借助display:table-cell;来实现等高布局。

*{

margin: 0;

padding: 0;

}

#header,#footer{

width: 100%;

height: 50px;

background: #ccc;

}

#container{

display: table-row;

background: #ccc;

margin: 10px auto;

}

.mainBox{

display: table-cell;

width: 70%;

background: #faf;

color: #000;

}

.sideBox{

display: table-cell;

width: 30%;

background: #3f0;

color: #000;

}

这种方法我认为是最简单也是最有效的。

③通过javascript

CSS代码如下:

*{

margin: 0;

padding: 0;

}

#header,#footer{

width: 100%;

height: 50px;

background: #ccc;

}

#container{

background: #ccc;

margin: 10px auto;/**左右设为auto,是为了让container在页面内居中**/

}

.mainBox{

float: left;

width: 70%;

color: #000;

background: #faf;

}

.sideBox{

float: right;

width: 30%;

color: #000;

background: #3f0;

}

#container:after{        /**清除浮动**/

display: block;

visibility: hidden;

content: "";

clear: both;

}

以下才是控制两列等高的关键所在,

var mainBox = document.getElementsByClassName("mainBox")[0];

var sideBox = document.getElementsByClassName("sideBox")[0];

if(mainBox.clientHeight

alert(mainBox.clientHeight);

mainBox.style.height = sideBox.clientHeight + "px";

}else {

sideBox.style.height = mainBox.clientHeight + "px";

}

在HTML中嵌入以上代码,即可实现我们想要的等高效果。运行结果如下:

使用该方法有一个不足是当浏览器窗口发生变化时,高度不能立即发生变化,这可以通过js来解决。

除此之外,还有其他一些方法,不过我觉得它们使用起来太过麻烦或者弊端太多,因此我就不再写出来了。

第二部分  三列或多列布局

多列的情况一般比较少见,其中常见的也就三列比较多,门户类型的网站中使用比较多。如腾讯网页面就是一个典型的三列式布局。(尾部未截图)

换个思维来看,我们会发现三列式布局可以看成是两个两列式布局组合而成的。因此我们只需以两列式布局结构的方式来对待三列式布局。

我们可以针对上图所示的结构以HTML代码表示为:html>

三列式布局

头部信息
主要内容区域
次要内容区域

侧边栏

底部信息

一、两列定宽中间自适应布局

①按照第一部分单列定宽单列自适应的方式

*{

margin: 0;

padding: 0;

}

#header,#footer{

width: 100%;

height: 100px;

background: #ccc;

}

.wrap{

float: left;

width: auto;

margin-right: 200px;/**margin-right 的值要等于 sideBox 的宽度**/

}

.sideBox{

float: right;

width: 200px;

background: #3af;

margin-left: -200px;/**margin-left 的值要等于 sideBox 的宽度的负值**/

}

.subMainBox{

float: left;

width: 200px;

background: #33ff00;

margin-right: -200px;/**margin-right 的值要等于 subMainBox的宽度的负值**/

}

.mainBox{

float: right;

width: auto;

margin-left: 200px;/**margin-right 的值要等于 subMainBox 的宽度**/

background: #faf;

}

.wrap:after,#container:after{

display: block;

visibility: hidden;

content: "";

clear: both;

}

运行效果如下

有一个小问题是在chrome和IE下,当窗口宽度过小时,会发生错位的现象,因此我们需要设置页面的最小距离。

②我认为是比较简单的方法

HTML结构跟上面的不一样,完整代码如下:html>

三列式布局

*{

margin: 0;

padding: 0;

}

#container{

margin: 5px 0;

}

#header,#footer{

width: 100%;

height: 100px;

background: #ccc;

}

.subMainBox{

float: left;

width: 200px;

background: #af3;

margin-right: -200px;

}

.mainBox{

float: left;

background: #3af;

width: auto;

margin-left: 200px;

margin-right: 200px;

}

.sideBox{

float: right;

width: 200px;

background: #ff3;

margin-left: -200px;

}

#container:after{

display: block;

visibility: hidden;

content: "";

clear: both;

}

头部信息
次要内容区域次要内容区域次要内容区域次要内容区域次要内容区

域次要内容区域次要内容区域次要内容区域次要内容区域次要内容区域次要内容区域

主要内容区域主要内容区域主要内容区域主要内容区域主要内容区域

主要内容区域主要内容区域主要内容区域主要内容区域主要内容区域主要内容区域主

要内容区域

主要内容区域主要内容区域主要内容区域

主要内容区域主要内容区域主要内容区域

主要内容区域主要内容区域主要内容区域

主要内容区域主要内容区域主要内容区域

主要内容区域主要内容区域主要内容区域

主要内容区域主要内容区域主要内容区域

主要内容区域主要内容区域主要内容区域

主要内容区域主要内容区域主要内容区域

侧边栏侧边栏侧边栏侧边栏侧边栏侧边栏侧边栏侧边栏侧边栏侧边栏侧边栏侧边栏

侧边栏侧边栏侧边栏侧边栏侧边栏侧边栏侧边栏侧边栏侧边栏

底部信息

这种方法出现的问题跟上面的一样,解决方法也同上。

二、三列自适应布局和三列等高布局

实现方法跟两列自适应布局及一样,这里就不写出代码了。

总结

至此,常见的几种页面布局已经介绍完毕,工作中想要实现的其他布局基本都可以以此为基础实现。俗话说:条条大路通罗马。实现你想要效果的方法有很多,关键是要找到适合自己的方法,才能在工作中更加游刃有余。

html中页面布局技术,CSS基础之几种常见的页面布局相关推荐

  1. CSS几种常见的页面布局方式介绍

    问题:CSS几种常见的页面布局方式介绍? CSS常见的有以下7种,必须要掌握的是前3种: flex弹性盒子(弹性布局): rem布局(一般都是flex+rem使用的比较多): 响应式布局(响应式布局的 ...

  2. CSS基础知识---三种选择器

    CSS基础知识---三种选择器 选择器 标签选择器 id选择器 class选择器 全部代码 选择器 标签选择器 id选择器 class选择器 标签选择器 选择器优先级:id>class>标 ...

  3. CSS初始化的两种常见方法

    CSS初始化的两种常见方法 两种CSS初始化的常见方案,都是通用类的 CSS reset Eric Meyer写的 CSS reset,源码不是很长: /* http://meyerweb.com/e ...

  4. html布局语言,HTML基础语言(四)-HTML页面布局

    HTML 布局 今天写一下简单的HTML页面布局 网页布局对改善网站的外观非常重要. 所以请慎重设计您的网页布局. 网站布局大多数网站可以使用 或者 虽然我们可以使用HTML table标签来设计出漂 ...

  5. 安卓前端布局Android,Android开发的几种常见布局

    目前正在从事iOS开发,对于安卓就是大学的时候自学了点,做过几个小的项目,软件外包大赛.计算机设计大赛.移动应用大赛都拿过奖项,呵呵...现在回想起来以前大学做的安卓比赛是多么的幼稚. 从现在开始我要 ...

  6. 页面中color颜色值_HTML+CSS 基础知识-入门概括-颜色与单位

    颜色与单位 一.颜色 1.概述 色调:很接近通俗意义上的颜色. 是指图像的相对明暗程度,在彩色图像上表现为颜色 ​ 饱和度:是指颜色中灰色的含量. 饱和度最大时,颜色中灰色的含量为零:饱和度最小时,颜 ...

  7. SQL Server中的查询优化技术:基础

    描述 (Description) Fixing and preventing performance problems is critical to the success of any applic ...

  8. html布局 跨行,[CSS] 多方案实现跨行或跨列布局

    多方案实现多方案实现跨行或跨列布局 .g-container { margin: 20px auto; width: 400px; } h2 { font-size: 28px; text-align ...

  9. flask中使用FileField上传文件的两种方式+前端页面上传文件(flask三种上传文件方式)

    文章目录 上传文件方式一: 1.index.html文件: 2.主文件main.py: 上传文件方式二: 1.index2.html文件: 2.main.py文件: 上传文件方式三: 1.index3 ...

最新文章

  1. 根据Explain结果中的key_len判断MySQL联合索引中实际用到的索引字段
  2. 复旦提出GaitSet算法,步态识别的重大突破!
  3. 使用POI转换word doc文件
  4. 使用 IntraWeb (10) - CSS
  5. smbus使用 树莓派_Linux控制I2C/SMBus设备
  6. 3月7日 当前动力电池竞争格局
  7. Matlab计算空间权重矩阵(地理距离和经济地理距离)
  8. html网页表单设计实验报告,网页设计实验报告(学生).doc
  9. 理科生考计算机音乐制作专业,理科生学电子音乐-怎么学习电音制作?
  10. MeshLab合并CC生产的分块OBJ模型
  11. js 获取浏览器经纬度精确到100米(chrome,firefox等大浏览器,ios,安卓亲测可用)
  12. 敏捷经验教训, 开发总结!
  13. 1003: 两个整数的四则运算 Python
  14. Axure获取焦点动画
  15. 云脉文档管理系统高效管理海量纸质文档
  16. 天猫精灵智能设备对接(3)
  17. AGA 2019电竞狂欢盛宴开启:为全国校园电竞玩家“圆梦”
  18. php app用户验证失败,Apple App Store无法成功添加沙箱技术测试员账号
  19. HP1020打印机加入域后,域用户无法使用HP1020域打印功能
  20. 实验十三:PCF8591模数传感器-数模转换实验

热门文章

  1. 智慧树python程序设计基础课后答案_智慧树Python程序设计基础答案完整
  2. [架构之路-96]:《软件架构设计:程序员向架构师转型必备》-6-需求与用户用例User Case/Senario建模
  3. 最全的android各国语言对照表
  4. 【Java基础】妙用Optional解决判断Null为空问题
  5. 锐龙R3-3200g和i3-9100f哪个好
  6. 自动内存管理(gc),新的思路
  7. 解决Pycharm专业版卡顿、运行内存不足,修改配置最大内存常见问题。
  8. css3鼠标悬停图片边框线条动画特效
  9. vue项目下常用的npm命令
  10. linux信息安全_SSL,PKI,CA篇