页面(文档树)可以想象成是由一个个的Box组合而成的,而视觉格式化模型(Visual formatting model)是一套规则,将这些框布局成访问者看到的样子。
哪些因素控制了这些布局
1. 盒的尺寸和类型
2. 定位体系 Positioning Scheme (常规流,浮动和绝对定位)
3. 文档树中元素之间的关系
4. 外部信息(如:视口大小,图片的固有尺寸等)
下文讲针对性的解释这些影响布局的因素,先来解释些概念~
css假设每个元素都会生成一个或者多个Box,称为元素框,元素框中心有内容区,内容区外周围包括了padding,border,margin,盒模型就是用来处理这些内容的一个模型
每个元素都是相对于包含块摆放,包含块就是一个元素的“布局上下文”,
<body>
<div><p>p的包含块是divp><div>
//div的包含块是body
body>
替换元素就是浏览器根据元素的标签和属性,来决定元素的具体显示内容。
通过 CSS content 属性来插入的对象 被称作 匿名可替换元素
如果元素的内容包含在文档之中,则为非替换元素
非替换元素的所有规则同样适用于替换元素,只有一个例外,width如果是auto,元素的高宽就是内容的固有高宽,比如img就是图片的原始大。例如浏览器会根据标签的src属性的值来读取图片信息并显示出来,查看HTML代码,则看不到图片的实际内容;标签的type属性来决定是显示输入框,还是单选按钮等。HTML中的
、、
这些元素往往没有实际的内容,即是一个空元素,例如:
<img src=”cat.jpg” />
<input type="submit" name="Submit" value="提交" />
浏览器会根据元素的标签类型和属性来显示这些元素。可替换元素也在其显示中生成了框。
CSS 框模型 (Box Model) 规定了元素框处理元素内容、内边距、边框 和 外边距 的方式,我们常见的盒模型大致有两种,一种是块级的盒子(Block Box),一种是行级的盒子(Line Box)
详细盒子的规则见下篇想要清晰的明白(二)CSS 盒模型Block box与Line box,但是我们至少可以知道盒子模型,在整个视觉模型中做到的是一个什么角色,盒子模型是处理盒子本身内部属性,像比如边距,边框的,而视觉格式化模型是来处理这些盒子摆放的
display : block 、 list-item 以及 table 会让一个元素成为块级元素。
display:inline会让一个元素称为行内元素
<style>
html{background-color: #009a61}
.a{
width: 100%;
height: 80px;
background-color: #f3f3f3;
margin-bottom: 30px;
}
.b{
width: 100%;
background-color: #f3f3f3;
height:40px;
margin-bottom: 80px;
}
.c{
float: left;
width: 80%;
height: 80px;
background-color: #333333;
}
.d{
margin-top: 80px;
width: 100%;
background-color: #f3f3f3;
overflow: hidden;
}
style>
<body >
<div class="a">div>
<div class="b">
<div class="c"> div>
div>
<div class="d">
<div class="c">div>
div>
body>
参考资料
14. [caopen.net]
15. CSS三种基本定位机制
16. css之BFC详解
17. inline-boxd的前世今生
18. 《CSS.The.Definitive.Guide》
19. CSS float浮动的深入研究、详解及拓展