奇妙的CSS之布局与定位
前言
关于布局与定位是Web前端开发里非常基础而又重要的部分。介绍相关知识的文章,很容易就可以找到。虽然,这方面的知识点不是很多,但我们如果不弄清楚,在运用时候往往会出现预料之外的布局,这些“意外”有时候很令人苦恼。下面根据我的学习和编程经验来谈一下这方面的要点。
要想完美的实现自己的布局,那首先一定要把盒模型搞清楚。盒模型由内容区、内边距(padding)、边框(border)和外边距(margin)构成。这些属性值都是可选的,相互之间没有依赖关系,但在具体的布局时会需要设置某些属性。我们平时设置的宽度和高度其实都是内容区的大小,而不是整个元素的大小。详细情况如下:

那么既然了解了盒模型,我们怎么让元素按照我们的意愿布局呢?接下来就来探讨一下这个问题。
其实浏览器在页面上摆放HTML元素时,它是采用文档流(flow)来实现的。就像瀑布一样从最上面的元素开始,自上而下进行元素显示,遇到块元素自动换行,默认每个块元素会占浏览器窗口的整个宽度。而内联元素会在水平方向上自左向右显示,总体上从左上方流向右下方,在垂直方向上扩展外围元素。
边距折叠
关于流和盒模型我们还需要了解,浏览器在并排显示两个内联元素时,这两个原时间的外边距是不会重合的,二者边框之间的距离是两者外边距之和;当两个块元素上下放置时,它们挨着的外边距会折叠起来,显示出来的外边距就是二者外边距里的最大值。当元素嵌套时,也会发生外边距折叠问题,其只会合并上边距和下边距,左右外边距并不合并。需要注意的是,如果外面的元素有一个边框,那么这两个元素的外边距就不会碰到一起,也就不可能发生折叠。我们只需要记住:只要两个垂直边距碰到一起,它们就会折叠,即使是嵌套起来的也不例外。浮动元素由于已经不在文档流之中,它们的外边距是不会折叠的。
关于浮动我们需要了解,浮动的框可以向左或向右移动,直到它的外边缘碰到包含框或另一个浮动框的边框为止。要想使元素浮动,必须为元素设置一个宽度(width)。虽然浮动元素不是文档流之中,但是它浮动后所处的位置依然是在浮动之前的水平方向上。由于浮动框不在文档的普通流中,所以文档的普通流中的块框表现得就像浮动框不存在一样,下面的元素填补原来的位置。有些元素会在浮动元素的下方,但是这些元素的内容并不一定会被浮动的元素所遮盖,对内联元素进行定位时,这些元素会考虑浮动元素的边界,会围绕着浮动元素放置。也可以把浮动元素想象成是被块元素忽略的元素,而内联元素会关注浮动元素的。
CSS 有三种基本的定位机制:普通流、浮动和绝对定位。除非专门指定,否则所有框都在普通流中定位。也就是说,普通流中的元素的位置由元素在 (X)HTML 中的位置决定。
position 属性
- static:元素框正常生成。块级元素生成一个矩形框,作为文档流的一部分,行内元素则会创建一个或多个行框,置于其父元素中。如果不为元素指定定位方式,会采用默认的静态定位方式。如果是静态定位,那么元素就放在正常的文档流中,由浏览器完全决定元素的摆放。虽然你可以用float来浮动元素,但最终还是由浏览器决定元素的最终放置。
- relative:元素框偏移某个距离。相对定位的元素会正常的流入页面,不过在页面上要进行偏移。
- absolute:元素框从文档流完全删除,并相对于其包含块定位。包含块可能是文档中的另一个元素或者是初始包含块。元素原先在正常文档流中所占的空间会关闭,就好像元素原来不存在一样。元素定位后生成一个块级框,而不论原来它在正常流中生成何种类型的框。
绝对定位(absolute),虽然也是从文档流中删除,但它与浮动是不同的,它不会再和原来位置保持水平,而是由top,right,bottom,left等属性值确定,这些值都是相对于其父元素的。而且流中的元素无论是块元素还是内联元素都不再关注绝对定位的元素,它们完全不知道页面上有绝对定位元素的存在。所以在布局时为了不被绝对定位元素遮盖文档流中的元素,最好给下面的元素设置恰当的外边距(margin)。绝对定位元素还有一个很意思的特性,那就是可以分层放置,可以用z-index属性来分层放置元素,这会指定它在一个虚拟z轴(垂直于页面)上的位置,而且越靠近你的元素z-index值越大。当然z-index属性并不是绝对定位所专属的,相对定位和固定定位的元素也有这个属性。绝对定位时并不需要对元素设置宽度(width),如果不指定宽度,则块元素会默认的占浏览器的整个宽度(包含margin-left和margin-right,并不仅仅是内容宽度width)。
- fixed:元素框的表现类似于将 position 设置为 absolute,不过其包含块是视窗本身。也就是说,固定定位会把元素放在相对于浏览器窗口的一个位置上(不是相对于页面,html),固定定位的元素是不会随页面滚动而移动的。
上面已经介绍了布局定位需要用到的知识,那么我们就可以按照自己的需要实现布局啦!使用HTML和CSS建立布局有很多种可以使用的方法,比如浮动布局、凝胶布局、绝对布局和表格显示布局等。要想掌握布局与定位还需要自己多多实践,只有在编程中才能获得提高。先写这么多吧,以后有时间的话再把实例补充进来……
奇妙的CSS之布局与定位的更多相关文章
- 《CSS网站布局实录》学习笔记(三)
第三章 CSS网页布局与定位 3.1 div 几乎XHTML中的任何标签都可以用于浮动与定位,而div首当其冲.对于其他标签而言,往往有它自身存在的目的,而div元素存在的目的就是为了浮动与定位. 3 ...
- 《CSS网站布局实录》读书笔记
从Web标准.HTML标记.CSS语法基础介绍到实用技巧,事无巨细.实体书已不印刷,只能下载电子版 书的背景: 国内第一本web标准的CSS布局书,2006年9月第一版,作者李超. 环境背景: 当时主 ...
- 《css网站布局实录》(李超)——读书札记
1.web表现层技术 2.HTML链接设计思想 3.对信息进行合理的分析.分类与处理来创造商业价值. 4.头部描述浏览器所需信息,主体包含所需要展现的具体内容. 5.HTML(XHTML)XML 6. ...
- css+div网页设计(二)--布局与定位
在网页设计中,能否控制好各个模块中在页面中的位置是非常关键的,与传统的表格定位不同,css+div定位方式更加的灵活,本篇博客将为大家介绍css+div的布局与定位. 一.盒子模型 由图可以看出 盒子 ...
- CSS布局与定位——height百分比设置无效/背景色不显示
CSS布局与定位——height百分比设置无效/背景色不显示 html元素属性width和height的值有两种表达方式,一是固定像素如“100px”,一是百分比如“80%”, 使用百分比的好处是元素 ...
- 认识CSS中布局之文档流、浮动、定位以及叠放次序
前端之HTML,CSS(七) CSS CSS布局的核心就是盒子的摆放,即CSS定位.而CSS中定位机制分为:普通流(nomal flow).浮动(float).定位(position). 普通流 普通 ...
- (5)《Head First HTML与CSS》学习笔记---布局与定位
层叠与CSS的权重判断 1.要理解层叠,除了前面的内容外还差最后一个知识点.你已经知道如何使用多个样式表来更好地组织你的样式,或者支持不同类型的设备.不过实际上用户访问你的页面时还有另外一些样式表. ...
- 这可能是史上最全的CSS自适应布局总结教程
标题严格遵守了新广告法,你再不爽,我也没犯法呀!话不多说,直入正题. 所谓布局,其实包含两个含义:尺寸与定位.也就是说,所有与尺寸和定位相关的属性,都可以用来布局. 大体上,布局中会用到的有:尺寸相关 ...
- css双飞翼布局
双飞翼布局是一种比较灵活的布局,始于淘宝UED,玉伯提出的,他着重介绍的是双飞翼栅格布局. 三列布局为"双飞燕"布局,可以把三栏比作一只鸟,main部分相当是于鸟的身体,而lef ...
随机推荐
- DAC Usage3:Monitor Data-tier Applications
If you deploy a DAC to a managed instance of the Database Engine, information about the deployed DAC ...
- 【转】WPF防止界面卡死并显示加载中效果
原文地址:http://www.cnblogs.com/linyijia/archive/2013/02/06/2900609.html <Window x:Class="Loadin ...
- 应用程序框架实战三十:表现层及ASP.NET MVC介绍(一)
本文将介绍表现层及ASP.NET MVC的一些要点,特别是ASP.NET MVC的一些抽象和封装技巧,如果你对MVC还不了解,可以参考<ASP.NET MVC4 高级编程>,作者Jon G ...
- Windows Server 2008 R2 WEB服务器配置系列文章索引
最近这段时间趁天翼云1元主机活动,购买了一个1元主机,主要是为了写一些服务器配置的教程. 已经完成如下几篇文章,送给大家. 国内云主机比较 天翼云/阿里云/腾讯云 Windows Server 200 ...
- 窥探Swift之别具一格的Struct和Class
说到结构体和类,还是那句话,只要是接触过编程的小伙伴们对这两者并不陌生.但在Swift中的Struct和Class也有着令人眼前一亮的特性.Struct的功能变得更为强大,Class变的更为灵活.St ...
- Openfire/XMPP学习之——一个简单的Smack样例
昨天讲了Openfire的搭建和配置,今天来讲一下Smack.如果对如何搭建和配置Openfire的,可以参考Openfire/XMPP学习之——Openfire的安装.配置. Smack是一个开源, ...
- 关于java连接mysql数据库的几个问题的解决方法。
今天就为了连接下数据库获取信息来提供给ListView使用,搞了足足5小时. 出现的问题有: 第一个是,DriverManager.getConnection(url, user, pwd),这个函数 ...
- VNC的安装和配置
服务端环境:CentOS 6.7 客户端环境:Windows 7 1.服务器安装VNC服务端 2.编辑vnc配置文件 3.设定VNC的密码 4.查看vnc的会话信息 5.客户端测试vnc连接 Refe ...
- java多线程--信号量Semaphore的使用
Semaphore可以控制某个共享资源可被同时访问的次数,即可以维护当前访问某一共享资源的线程个数,并提供了同步机制.例如控制某一个文件允许的并发访问的数量. 例如网吧里有100台机器,那么最多只能提 ...
- PHP连接SQL Server相关配置及说明
关于php怎么连接数据库,大家肯定有不同的看法,有的用wamp,有的用xamp,他们都是集成环境,方便操作.但有时,数据库的类型不同,要连接不同的数据库.今天和大家分享一下如何连接sql2000,服 ...