css页面布局
写在前面:
页面布局整体上可以分为两类:固定宽度(一般固定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页面布局的更多相关文章
- CSS 页面布局、后台管理示例
CSS 页面布局.后台管理示例 页面布局 1.头部菜单 2.中间内容/中间左侧菜单 3.底部内容 <div class='pg-header'> <div style='width: ...
- CSS页面布局常见问题总结
在前端开发中经常会碰到各种类型布局的网页,这要求我们对css网页布局非常熟悉.其中水平垂直居中布局,多列布局等经常会被使用到,今天就来解决一下css布局方面的问题. 水平垂直居中的几种方法 说到水平垂 ...
- css页面布局总结
W3C标准:是万维网制定的一系列标准,包括结构化标准语言(html.xml),表现 标准语言(css),行为标准语言(DOM,ECMAScript<javascript>)组成.这个标准倡 ...
- CSS页面布局与网格(上)
1.布局规划 1.1 网格 网格系统是设计师在切分布局时作为参照的一组行和列. 1.2 布局辅助类 类名用于为布局添加样式.为了让样式可以重用,让类名表达其意图. .column { /* 一般列的样 ...
- 第6天:DIV+CSS页面布局实战
今天我从早上9:00写代码一直写到下午18:00,写的我差点抑郁了,还好最后终于写出了一个完整页面,没有做动画效果,就是练习了一下DIV+CSS布局,做的是福务达(www.zzfwd.cn)的主页,真 ...
- 一、CSS概述 二、CSS的选择器(认识) 三、CSS样式和属性(练习) 四、重构商城首页DIV+CSS(页面布局)(重点) 浮动/更改显示方式
一.CSS概述###<1>概念 DIV,就是一个HTML元素,块级元素,通常结合CSS进行页面的布局. CSS,层叠样式表,给HTML元素增强显示. ###<2>作用 样式定义 ...
- 3种常见的CSS页面布局--双飞翼布局、粘连布局、左右两列布局
一.左右两列布局 1.代码如下,可先粘贴复制,自行运行 <!DOCTYPE html><html> <head> <meta charset="UT ...
- dic+css页面布局分享
HTML部分代码<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <t ...
- 第五章 CSS页面布局基础
1.标准文档流 在正常流中,在没有使用浮动或者定位的情况下,文本元素按照从上到下.从左到右的格式布局.这是浏览器的默认行为.在正常流中,块级元素从上到下依次排列,而行级元素从左到右依次排列.正常流中的 ...
随机推荐
- 39. 求分数序列前N项和
求分数序列前N项和 #include <stdio.h> int main() { int i, n; double numerator, denominator, item, sum, ...
- Javascript 笔记与总结(2-9)获取运行时的 style 对象
获取内存中(正在渲染)的 style 的值(非内联 style,obj.style 只能获得内联 style 的值),可以用 obj.currentStyle(低版本 IE 和 Opera 支持)和 ...
- WCF Basic Concept
http://msdn.microsoft.com/library/ee354180.aspx Steps: Designing a Service Contract Implementing a W ...
- DropzoneJS 使用指南
原文链接http://segmentfault.com/a/1190000004045240 官方文档: http://www.dropzonejs.com/ Github: https://gith ...
- Kafka 0.10.0
2.1 Producer API We encourage all new development to use the new Java producer. This client is produ ...
- 【运维工具】logrotate 日志管理神器
服务器经常会产生各种各样的日志文件,我们需要定期清理 日志的分类 系统日志 应用日志 系统日志 例如系统的history 历史信息 crontab的运行日志 一般系统日志系统都帮我们运维好了,不 ...
- MetaWeblog 同时管理51cto,csdn,sina,163,oschina,cnblogs等博客
我们技术人一般都会有自己的一个博客,用于记录一些技术笔记,也期望自己的笔记文章可以让更多人知道. 如何让更多人知道自己的博客? 搜索引擎收录,用户通过关键词搜索可能会进入 内容运营,但是一般技术人为了 ...
- python 之 utf-8编码的秘密
python3的默认编码方案是utf-8编码,看了些资料,来做总结. 要说utf-8,就要说说unicode,要说unicode,就要说ASCII,我们还是慢慢来. 1.ASCII ASCII编码最初 ...
- CSS控制"标题前增加小图标或编号"
---题目前加图片--- p:before { content:url(xxx/xx.png); }//所有p的最前都有一个图标 p.a:after { content:url(xxx/xx.png) ...
- 设计模式:组合模式(Composite)
定 义:将对象组合树形结构以表示“部分-整体”的层次结构.组合模式使得用户对单个对象和组合对象使用具有一致性. 结构图: Component类: abstract class Component ...