写在前面:

页面布局整体上可以分为两类:固定宽度(一般固定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(百分比或者精确值)

    <div class="task1">
        <div class="sidebar"></div>
        <div class="main"></div>
    </div>

对应的布局代码如下:

.task1{
    overflow: hidden;
}
.task1 .sidebar{
    width:200px;
    height:300px;
    float:left;
    background: red;
    padding-bottom:400px;
    margin-bottom:-400px;
}
.task1  .main{
    height:500px;
    background:pink;
  /*  padding-left:210px;*/
    margin-left:210px;
    padding-bottom:400px;
    margin-bottom:-400px;
}

B.创建三列布局

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

<div class="task2">
        <div class="sidebar"></div>
        <div class="extra"></div>
        <div class="main"></div>
    </div>

对应的布局代码:

.task2{
    overflow: hidden;
}
.task2 .sidebar{
    width:160px;
    height:300px;
    background:red;
    padding-bottom:400px;
    margin-bottom: -400px;
    float:left;
}
.task2 .main{
    height:200px;
    background: pink;
    padding-bottom:400px;
    margin-bottom:-400px;
    margin-left:170px;
    margin-right:210px;
}
.task2 .extra{
    height:400px;
    width:200px;
    float:right;
    background: blue;
    padding-bottom: 400px;
    margin-bottom: -400px;
}

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

由此引发了第三个问题:

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

.clearfix:after{
   content:"";
  display:table;
  clear:both;
}

.clearfix{
   zoom:;
}

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

 

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

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

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

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

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

*{
-moz-box-sizing:border-box;
box-sizing:border-box;
}

还有其他属性,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. centos6.5 64位 yum install nginx的默认安装路径

    yum install nginx网站文件存放默认目录 /usr/share/nginx/html 网站默认站点配置 /etc/nginx/conf.d/default.conf 自定义Nginx站点 ...

  2. C3P0连接池问题,APPARENT DEADLOCK!!! Creating emergency..... [问题点数:20分,结帖人lovekong]

    采用c3p0连接池,每次调试程序,第一次访问时(Tomcat服务器重启后再访问)都会出现以下错误,然后连接库需要很长时间,最终是可以连上的,之后再访问就没问题了,请高手们会诊一下,希望能帮小弟解决此问 ...

  3. [办公自动化]PDF大小不一如何调整

    最近使用acrobat制作PDF,结果里面的内容因为来自不同文件.有的大,有的小. 选择打印pdf,即可调整正常. 附: PDF页码也可以调整为与目录实际页码一致. 思考: 利用pdf进行问卷调研:或 ...

  4. sql like模糊查询

    1.SQL LIKE 子句中使用百分号(%)字符来表示任意字符,类似于UNIX或正则表达式中的星号 (*). 2.LIKE 通常与 % 一同使用,类似于一个元字符的搜索. 3. > SELECT ...

  5. json解析json字符串时候,数组必须对应jsonObjectArray,不能对应JsonObject。否则会解析错误。

    json第三方解析json字符串时候,json数组必须对应jsonObjectArray,不能对应JsonObject.->只要是[]开头的都是json数组字符串,就要用jsonArray解析 ...

  6. 验证码 mewebstudio/captcha

    composer require mews/captcha https://github.com/mewebstudio/captcha

  7. nrf51822-广播模式

    解决以下几个问题: 1 SDK9 中的几种广播模型 2 广播超时如何进入睡眠 3 如何取消广播超时睡眠使其可以无限广播. 1 SDK9 中的几种广播模型 Nordci SDK对于广播方面有一个模块.这 ...

  8. nodejs net模块实现socket

    var net = require('net'); var client = net.connect({port: 8080}, function() { console.log('连接到服务器!') ...

  9. PE文件格式图示

  10. json-lib 之jsonConfig具体应用

    一,setCycleDetectionStrategy 防止自包含 public static void testCycleObject() {         CycleObject object ...