2、定位概念
上一节熟悉了盒模型, 现在来看一下可视化格式模型和定位模型。 理解这两个模型的细微差异是非常重要的, 因为它们一起控制着如何在页面上布置每个元素
2.1 可视化格式模型
CSS有三种基本的定位机制:普通流、 浮动、绝对定位。 除非专门指定, 否则所有框都在普通流中定位。
在普通流中元素框的位置由元素在HTML中的位置决定。
p、h1或div等元素常被称为块级元素, 这意味着这些元素显示为一块内容, 即“块框”。 与之相反, a和span等元素被称为行内元素, 因为他们的内容显示在行中, 即“行内框”。
可以使用display属性改变生成的框的类型。 通过将display设置为block,可以让行内元素表现得像块级元素一样。将display属性设置为none, 让生成的元素根本没有框。 这样,这个框及所有内容就不再显示, 不占用文档的空间。
visibility:hidden 只是隐藏了元素的可见性,所占用的文档空间并未消失, 这就是它与display:hidden的区别。
- 块级框从上至下一个接一个地垂直排列, 框之间的垂直距离由框的垂直外边距计算出来。
-
行内框在一行中水平排列。 可以使用水平内边距、边框和外边距调整它们的水平间距。 但是垂直内边距、边框和外边距不影响行内框的高度(行内框在文档中的位置)。 同样, 在行内框上设置显式的宽高也没有影响。
由一行形成的水平框称为行框, 行框的高度总是足以容纳它包含的所有行内框。 但是,设置行高可以增加这个框的高度。 因此, 修改行内框尺寸唯一方法是修改行高或者水平边框,水平内边距或水平外边距。
我们来看下面几个例子:
例1:
html
<div></div><a href=""></a><a href=""></a><div></div>
css
body{ padding:0; margin:0; font-size:0; } a { background:#000; padding:5px 20px; border:3px solid #FF0; margin:10px; font-size:0; height:10px; width:500px; } div { background:#ccc; height:20px; font-size:12px; margin:0; border:1px solid #ff0000; }
效果:
在上面这个例子中, 给行内元素a, 设置了宽高、内边距、边框、外边距。 在这其中宽高并未起作用, 垂直方向上的内边距、边框、外边距也并未改变元素的尺寸, 也就是说并未改变元素在文档中的位置, 高度仍然是0, 所以我们看到a元素上下的两个div元素相邻,并未被a元素隔开。
把上边的例子稍微改一下, 给a设置设置行高, 看一下效果:
例2:
CSS
body{ padding:0; margin:0; font-size:0; } a { background:#000; padding:5px 20px; border:3px solid #FF0; margin:10px; font-size:0; height:10px; width:500px; line-height:16px; } div { background:#ccc; height:20px; font-size:12px; margin:0; border:1px solid #ff0000; }