写在前面:

页面布局整体上可以分为两类:固定宽度(一般固定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. ZOJ 2975 思维

    题意 给出一个矩形 问在其中存在多少子矩形 其四个角上的字母是一样的 一开始暴力写了一发 先枚举行数 再枚举两个列数 再向下枚举行数 判断能否 没有意外的超时了 后来想了想 当我们已经确定两个列数的时 ...

  2. Radeon HD 7850 vs Radeon R9 270X

    Radeon HD 7850 vs Radeon R9 270X  HW compare   Intro The Radeon HD 7850 comes with a GPU core speed ...

  3. PHP 错误与异常 笔记与总结(15 )使用观察者模式处理异常信息

    使异常处理变得更灵活.可观察,可以使用设计模式中的观察者模式. 文件 ① 定义观察者的接口 ExceptionObserver.php: <?php /* 给观察者定义的规范 */ interf ...

  4. UITableview 多行删除

    //  RootViewController.m #import "RootViewController.h"#import "NextViewController.h& ...

  5. UIButton的遍历

    for (id obj in self.view.subviews) {                if ([obj isKindOfClass:[UIButton class]]) {      ...

  6. PHP函数补完 - var_export

    var_export() 函数返回关于传递给该函数的变量的结构信息,它和 var_dump() 类似,不同的是其返回的表示是合法的 PHP 代码.var_export必须返回合法的php代码, 也就是 ...

  7. java--接口和抽象类

    接口将抽象类的概念更延伸了一步,完全禁止了所有的函数定义.且可以将多个接口合并到一起,但是不能继承多个类.

  8. [转]漫谈数据中心CLOS网络架构

    http://djt.qq.com/article/view/238 1.数据中心网络架构挑战 随着技术的发展,数据中心的规模越来越大,一个数据中心的服务器容量从几年前的几千台服务器发展到今天的几万甚 ...

  9. razor 添加html5属性

    在 HTML5 中, 可以使用 data- 属性来表示用户数据,这些数据甚至可以是 JSON 格式的数据,对 Web 前端开发带来很大的方便. 在 MVC 的 Razor 中,可以使用匿名对象来生成定 ...

  10. w-WAITING---

    <p id="w_last" style="color: red; font-size: 6em;">w-WAITING---</p>& ...