写在前面:

页面布局整体上可以分为两类:固定宽度(一般固定960px);流式布局;将流式布局转换为固定布局很容易,只需要外围再包括一个div,为其设置宽度即可。

html默认的布局方式是将每个块状标签,一个一个地往上叠加,为static类型的布局。

关于BFC的参考链接:

http://www.iyunlu.com/view/css-xhtml/55.html

http://www.cnblogs.com/pigtail/archive/2013/01/23/2871627.html

布局的一些技巧:

1)pading和margin只是一些空格而已,利用这两个属性就可以将元素移动到网页的任何位置。margin的负值能够实现很多意想不到的效果,可以详见这篇博客:http://www.cnblogs.com/2050/archive/2012/08/13/2636467.html#2457812

3)对于position:absolute元素,完全脱离原来层,其在原来层实际占据高度和宽度都是0;对于position:relative元素,依旧占据原来的高度和宽度,如果设置top,left不为0就会形成窟窿。

4)对float元素设置负边距,可能导致元素上移,这是圣杯布局和双飞翼布局的根据。

4)对于浮动元素。浮动的框可以左右移动,直至它的外边缘遇到包含框或者另一个浮动框的边缘。当一个元素浮动之后,不会影响到块级框的布局而只会影响内联框(通常是文本)的排列,文档中的普通流就会表现得和浮动框不存在一样,当浮动框高度超出包含框的时候,也就会出现包含框不会自动伸高来闭合浮动元素(“高度塌陷”现象)。 解决方法时为包含框创建BFC环节。

其实,很多问题的本质都是对BFC(块级上下文)的理解问题

通俗地来说:创建了 BFC的元素就是一个独立的盒子,里面的子元素不会在布局上影响外面的元素,反之亦然,同时BFC任然属于文档中的普通流。

4)BFC(块级上下文)环境特性

  • 解决上下元素margin重叠的问题,块级上下文会阻止上下外边距重叠,总边距就是上下边距之和
  • 不和浮动元素重叠,创建了 Block Formatting Context 的元素不能与浮动元素重叠
  • 闭合浮动,并且防止高度塌陷;块级上下文会width和height会包含其中的所有元素,包括浮动元素,这是利用BFC解决高度塌陷的原因

5)让浮动元素的父元素拥有BFC执行换件:

  • float的值不为none。
  • overflow的值不为visible,可以是hidden或者auto
  • display的值为table-cell, table-caption, inline-block中的任何一个。
  • position的值不为relative和static。

浮动布局策略

1)除非像图片这样本身已经设置了宽度的元素,否则需要给任何浮动元素设置width(px,em或者百分比),只有这样,才能让浏览器给其他内容腾出环绕的空间。

2)要创建多列并排的效果(如两列并排),通常需要给正文添加一个大于或者等于侧边栏宽度的margin,这是因为:

a.因为两个列在同一个BFC中,因此都是从包围元素的左侧开始布局,所以要求margin大于等于侧边栏的宽度;

b.注意步骤a中设置的是margin不是padding,否则如果主列设置有背景色,依旧达不到想要的效果

c.如果想要实现多列等高,通常需要为其中各列设置较大的padding-bottom值,再设置与padding-bottom一直的负margin-bottom值来达到这一效果;这是因为文档流放置的元素是考虑margin在哪里而非实际内容。同时还需要为外围元素添加overflow: hidden

下面是几个实际的案例

A.创建两列布局(要求,侧边栏左浮动,主列宽度自适应,要求不管内容高度是多少,都能实现两列等高)

分析:因为要求主列自适应,主列就不能也浮动,因为元素一旦浮动都要求为其设置width(百分比或者精确值)

  1. <div class="task1">
  2. <div class="sidebar"></div>
  3. <div class="main"></div>
  4. </div>

对应的布局代码如下:

  1. .task1{
  2. overflow: hidden;
  3. }
  4. .task1 .sidebar{
  5. width:200px;
  6. height:300px;
  7. float:left;
  8. background: red;
  9. padding-bottom:400px;
  10. margin-bottom:-400px;
  11. }
  12. .task1 .main{
  13. height:500px;
  14. background:pink;
  15. /* padding-left:210px;*/
  16. margin-left:210px;
  17. padding-bottom:400px;
  18. margin-bottom:-400px;
  19. }

B.创建三列布局

要求:两个侧边栏一左一右浮动,主列宽度自适应,各列等高

  1. <div class="task2">
  2. <div class="sidebar"></div>
  3. <div class="extra"></div>
  4. <div class="main"></div>
  5. </div>

对应的布局代码:

  1. .task2{
  2. overflow: hidden;
  3. }
  4. .task2 .sidebar{
  5. width:160px;
  6. height:300px;
  7. background:red;
  8. padding-bottom:400px;
  9. margin-bottom: -400px;
  10. float:left;
  11. }
  12. .task2 .main{
  13. height:200px;
  14. background: pink;
  15. padding-bottom:400px;
  16. margin-bottom:-400px;
  17. margin-left:170px;
  18. margin-right:210px;
  19. }
  20. .task2 .extra{
  21. height:400px;
  22. width:200px;
  23. float:right;
  24. background: blue;
  25. padding-bottom: 400px;
  26. margin-bottom: -400px;
  27. }

根据浮动元素的排列方式,它们必须出现在环绕它们四周的所有内容之前,因此在上面的案例中,正文区域只能在左右两个侧边栏之后。

由此引发了第三个问题:

C:创建三列布局

要求(为了对搜索引擎友好,main区域要求在左右侧边栏的前面,同时main区域的宽度自适应,各列等高)

对此可以采用双飞翼布局或者圣杯布局,参见博客:

http://www.cnblogs.com/bobodeboke/p/4738768.html

3)清除浮动,clear。如果要让元素下落到左浮动对象的下方clear:left;或者右浮动对象的下方:right;对于页脚或其他需要显示在页面底部的元素,可以使用clear:both.本质上解决方法有两种:

  • a:让浮动元素所在的父元素拥有BFC环境
  • b:让浮动元素后面的元素清除浮动。

4)闭合浮动的方法(闭合比清除浮动更贴切)

当浮动元素高于外围元素(如div)里面其他内容时,就会从外围元素的底部凸出来,如果外围元素带有背景或者边框,这种高度塌陷情况就更加明显。解决的本质是

a)让包括浮动元素的外围元素拥有BFC环境,方法同上。

b)在外围元素的底部添加一个清除元素,此时可以:

a:在外围元素div的底部加一个清楚元素,如<br class=".clear">

d:在外围<div>中添加一些样式和类名。如.clearfix,其本质也是通过在浮动元素后面,通过:after伪类添加一个清除元素,针对ie,通过zoom触发器hasLayout

  1. .clearfix:after{
  2. content:"";
  3. display:table;
  4. clear:both;
  5. }
  6.  
  7. .clearfix{
  8. zoom:;
  9. }

这些都可以强制外围块扩大到包含浮动元素。

 

5)防止浮动下落(float drop)

浏览器窗口显示的元素宽度并不等于它的width值,而是left/right border,left/right margin,left/right padding三者值的总和。float drop总是由于没有足够空间容纳所有列,导致有的浮动元素落到下一列造成。此时的解决方法:

(1)严格计算,所有列的总和<=100%

(2)使用box-sizing属性,如将下列代码放在css reset中

注意:clearfix解决的是浮动问题中的图片凸出,对于绝对定位中的图片凸出是没有办法的,此时只能够定义外围元素的高度

  1. *{
  2. -moz-box-sizing:border-box;
  3. box-sizing:border-box;
  4. }

还有其他属性,background-clip,background-origin的取值和box-sizing一样,有 content-box,padding-box,border-box

css响应式布局

响应式布局(RWD)结合了三大理念:

基于布局的弹性网格:响应式布局中不在使用固定布局,而使得宽度随着屏幕大小而改变。

用于图片和视频的弹性媒体:使得图片和媒体能够进行缩放,以适应不同的屏幕大小。

为不同屏幕宽度创建不同样式的css媒体查询:根据当前条件为浏览器发送不同的样式。

  • 通过在<head>中添加response.js,可以让旧版IE支持媒体查询;
  • 媒体查询通过引入不同的样式文件来实现,如<link href="css/small.css" rel="stylesheet" media="(max-width:580px)">
  • 不过当前最通用的,还是在样式文件中嵌入媒体查询

css页面布局的更多相关文章

  1. CSS 页面布局、后台管理示例

    CSS 页面布局.后台管理示例 页面布局 1.头部菜单 2.中间内容/中间左侧菜单 3.底部内容 <div class='pg-header'> <div style='width: ...

  2. CSS页面布局常见问题总结

    在前端开发中经常会碰到各种类型布局的网页,这要求我们对css网页布局非常熟悉.其中水平垂直居中布局,多列布局等经常会被使用到,今天就来解决一下css布局方面的问题. 水平垂直居中的几种方法 说到水平垂 ...

  3. css页面布局总结

    W3C标准:是万维网制定的一系列标准,包括结构化标准语言(html.xml),表现 标准语言(css),行为标准语言(DOM,ECMAScript<javascript>)组成.这个标准倡 ...

  4. CSS页面布局与网格(上)

    1.布局规划 1.1 网格 网格系统是设计师在切分布局时作为参照的一组行和列. 1.2 布局辅助类 类名用于为布局添加样式.为了让样式可以重用,让类名表达其意图. .column { /* 一般列的样 ...

  5. 第6天:DIV+CSS页面布局实战

    今天我从早上9:00写代码一直写到下午18:00,写的我差点抑郁了,还好最后终于写出了一个完整页面,没有做动画效果,就是练习了一下DIV+CSS布局,做的是福务达(www.zzfwd.cn)的主页,真 ...

  6. 一、CSS概述 二、CSS的选择器(认识) 三、CSS样式和属性(练习) 四、重构商城首页DIV+CSS(页面布局)(重点) 浮动/更改显示方式

    一.CSS概述###<1>概念 DIV,就是一个HTML元素,块级元素,通常结合CSS进行页面的布局. CSS,层叠样式表,给HTML元素增强显示. ###<2>作用 样式定义 ...

  7. 3种常见的CSS页面布局--双飞翼布局、粘连布局、左右两列布局

    一.左右两列布局 1.代码如下,可先粘贴复制,自行运行 <!DOCTYPE html><html> <head> <meta charset="UT ...

  8. dic+css页面布局分享

    HTML部分代码<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <t ...

  9. 第五章 CSS页面布局基础

    1.标准文档流 在正常流中,在没有使用浮动或者定位的情况下,文本元素按照从上到下.从左到右的格式布局.这是浏览器的默认行为.在正常流中,块级元素从上到下依次排列,而行级元素从左到右依次排列.正常流中的 ...

随机推荐

  1. 39. 求分数序列前N项和

    求分数序列前N项和 #include <stdio.h> int main() { int i, n; double numerator, denominator, item, sum, ...

  2. Javascript 笔记与总结(2-9)获取运行时的 style 对象

    获取内存中(正在渲染)的 style 的值(非内联 style,obj.style 只能获得内联 style 的值),可以用 obj.currentStyle(低版本 IE 和 Opera 支持)和 ...

  3. WCF Basic Concept

    http://msdn.microsoft.com/library/ee354180.aspx Steps: Designing a Service Contract Implementing a W ...

  4. DropzoneJS 使用指南

    原文链接http://segmentfault.com/a/1190000004045240 官方文档: http://www.dropzonejs.com/ Github: https://gith ...

  5. Kafka 0.10.0

    2.1 Producer API We encourage all new development to use the new Java producer. This client is produ ...

  6. 【运维工具】logrotate 日志管理神器

    服务器经常会产生各种各样的日志文件,我们需要定期清理 日志的分类 系统日志 应用日志 系统日志 例如系统的history 历史信息   crontab的运行日志  一般系统日志系统都帮我们运维好了,不 ...

  7. MetaWeblog 同时管理51cto,csdn,sina,163,oschina,cnblogs等博客

    我们技术人一般都会有自己的一个博客,用于记录一些技术笔记,也期望自己的笔记文章可以让更多人知道. 如何让更多人知道自己的博客? 搜索引擎收录,用户通过关键词搜索可能会进入 内容运营,但是一般技术人为了 ...

  8. python 之 utf-8编码的秘密

    python3的默认编码方案是utf-8编码,看了些资料,来做总结. 要说utf-8,就要说说unicode,要说unicode,就要说ASCII,我们还是慢慢来. 1.ASCII ASCII编码最初 ...

  9. CSS控制"标题前增加小图标或编号"

    ---题目前加图片--- p:before { content:url(xxx/xx.png); }//所有p的最前都有一个图标 p.a:after { content:url(xxx/xx.png) ...

  10. 设计模式:组合模式(Composite)

    定   义:将对象组合树形结构以表示“部分-整体”的层次结构.组合模式使得用户对单个对象和组合对象使用具有一致性. 结构图: Component类: abstract class Component ...