网页开发中布局是一个永恒的话题。巧妙的布局会让网页具备良好的适应性和扩展性。css的布局主要涉及两个属性——position和float。它们俩看上去很容易被弄混,但是仔细分析一下,它们的区别仍是很明显的。下面和你们分享一下个人学习心得。 css
首先,先介绍一个很重要的概念“文档流”,明白了这个概念以后就很容易理解position和float的定位原理了。 html
在css中有一个z-index属性,由于网页是“立体的”,它有z轴,这个z轴的大小就由z-index控制。默认状况下,全部页面元素均位于z-index:0这一层,而这一层顺序排列的元素就构成了“文档流”。不管是position仍是float,它们都是经过改变文档流来实现定位。 浏览器
css有三种基本的定位机制:文档流、浮动和绝对定位。除非专门指定,不然全部元素都在文档流中定位。也就是说,文档流中的元素的位置由元素在 X(HTML) 中的位置决定。css定位的基本思想很简单,它容许你使得元素相对于其正常应该出现的位置,或者相对于父元素、另外一个元素甚至浏览器窗口自己的位置来进行定位。 布局
下面介绍position和float的定位原理。 学习
(一)float: spa
float属性定位的元素位于z-index:0层。它是经过float:left和float:right来控制元素在0层左浮或右浮。float会改变正常的文档流排列,影响到周围元素。float元素在文档流中一个挨一个排列。但注意,只是float元素之间一个挨一个排列,对于非float的元素,float元素是视而不见的,会越过它们。 .net
以下面的一段代码: htm
01 | <html> |
02 | <head> |
03 | <styletype="text/css"> |
04 | .fl{float:left;background:red;border:solid 1px #00f;} |
05 | .nfl{background:#ff0;border:solid 1px #000;} |
06 | </style> |
07 | </head> |
08 | <body> |
09 | <spanclass="fl">我是float元素1</span> |
10 | <spanclass="nfl">我是非float元素</span> |
11 | <spanclass="fl">我是float元素2</span> |
12 | <spanclass="fl">我是float元素3</span> |
13 | </body> |
14 | </html> |
归纳来讲,float:left时,会把非float元素挤到全部float元素的右边,float:right时是挤到左边。 blog
(二)position: 开发
position属性包括下面四个值:
1. 静态(static):
元素顺序显示,在一个文档流中,一个挨着一个,可是不像relative那样能够设置top之类的。静态定位仅仅意味着内容遵循正常从上到下的HTML流。
2. 相对(relative):
一个相对定位的元素相对它在HTML流中的当前位置而放置。移动一个带有相对定位的元素,在该元素本该放置的地方留下了一个“洞”。相对定位的主要用处不是移动一个元素,而是给行内在它内部的绝对定位的元素设定一个新的参考点。
position: relative的元素相对于本身原本应该在的位置进行偏移,偏移后的位置可能覆盖别人(是漂浮在上方)。它原来的位置也空着,由于它会被加入到文档流中。
3. 绝对(absolute):
绝对定位让你经过以pixel、em、percentage来指定一个左、右、上或者下的位置来肯定一个元素的位置。此外,绝对定位的元素被彻底与页面流分离,换句话说,网页上的其余东西甚至不知道这个绝对定位的元素的存在。
absolute定位的通常用法:
4. 固定(fixed):
一个固定的元素被锁定在屏幕的位置上。fixed是相对浏览器窗口的固定位置定位,如网页中的“回到顶部”按钮。 注意:不要试图给同一个样式既应用float属性又应用任何一种定位,除了静态或者相对定位以外。浮动和绝对或者固定定位不可能同时做用在同一个元素上。