CSS布局模型
- 三种布局模型
- 流动型(flow)
- 浮动型(float)
- 层模型(layer)
- 流动模型的特征
- 块状元素都会在所处的包含元素内自上而下按顺序垂直延伸分布,因为在默认状态下,块状元素的宽度都为100%。实际上,块状元素都会以行的形式占据位置。
- 在流动模型下,内联元素都会在所处的包含元素内从左到右水平分布显示。
- 块状元素都会在所处的包含元素内自上而下按顺序垂直延伸分布,因为在默认状态下,块状元素的宽度都为100%。实际上,块状元素都会以行的形式占据位置。
- 浮动模型
- 块状元素这么霸道都是独占一行,如果现在我们想让两个块状元素并排显示,怎么办呢?不要着急,设置元素浮动就可以实现这一愿望。
- 任何元素在默认情况下是不能浮动的,但可以用 CSS 定义为浮动,如 div、p、table、img 等元素都可以被定义为浮动。如下代码可以实现两个 div 元素一行显示。
- div{
width:200px;
height:200px;
border:2px red solid;
float:left;
}
<div id="div1"></div>
<div id="div2"></div> - 效果图
- 当然你也可以同时设置两个元素右浮动也可以实现一行显示。
- div{
width:200px;
height:200px;
border:2px red solid;
float:right;
} - 效果图
- 又有小伙伴问了,设置两个元素一左一右可以实现一行显示吗?当然可以:
- div{
width:200px;
height:200px;
border:2px red solid;
}
#div1{float:left;}
#div2{float:right;} - 效果图
- 层模型
- 如何让html元素在网页中精确定位,就像图像软件PhotoShop中的图层一样可以对每个图层能够精确定位操作。CSS定义了一组定位(positioning)属性来支持层布局模型。
- 层模型有三种形式:
1、绝对定位(position: absolute)
2、相对定位(position: relative)
3、固定定位(position: fixed) - 绝对定位
- 如果想为元素设置层模型中的绝对定位,需要设置position:absolute(表示绝对定位),这条语句的作用将元素从文档流中拖出来,
- 然后使用left、right、top、bottom属性相对于其最接近的一个具有定位属性的父包含块进行绝对定位。
- 如果不存在这样的包含块,则相对于body元素,即相对于浏览器窗口。
- 如下面代码可以实现div元素相对于浏览器窗口向右移动100px,向下移动50px。
- div{
width:200px;
height:200px;
border:2px red solid;
position:absolute;
left:100px;
top:50px;
}
<div id="div1"></div>
- 效果如下:
- 相对定位
- 如果想为元素设置层模型中的相对定位,需要设置position:relative(表示相对定位),
- 它通过left、right、top、bottom属性确定元素在正常文档流中的偏移位置。
- 相对定位完成的过程是首先按static(float)方式生成一个元素(并且元素像层一样浮动了起来),
- 然后相对于以前的位置移动,移动的方向和幅度由left、right、top、bottom属性确定,偏移前的位置保留不动。
- 如下代码实现相对于以前位置向下移动50px,向右移动100px;
#div1{
width:200px;
height:200px;
border:2px red solid;
position:relative;
left:100px;
top:50px;
}
<div id="div1"></div> - 效果图:
- 什么叫做“偏移前的位置保留不动”呢?
- 大家可以做一个实验,如下代码:
<body>
<div id="div1"></div><span>偏移前的位置还保留不动,覆盖不了前面的div没有偏移前的位置</span>
</body> - 效果图:
- 从效果图中可以明显的看出,虽然div元素相对于以前的位置产生了偏移,但是div元素以前的位置还是保留着,
- 所以后面的span元素是显示在了div元素以前位置的后面。
- 固定定位
- fixed:表示固定定位,与absolute定位类型类似,但它的相对移动的坐标是视图(屏幕内的网页窗口)本身。
- 由于视图本身是固定的,它不会随浏览器窗口的滚动条滚动而变化,
- 除非你在屏幕中移动浏览器窗口的屏幕位置,或改变浏览器窗口的显示大小,
- 因此固定定位的元素会始终位于浏览器窗口内视图的某个位置,不会受文档流动影响,
- 这与background-attachment:fixed;属性功能相同。
- 以下代码可以实现相对于浏览器视图向右移动100px,向下移动50px。并且拖动滚动条时位置固定不变。
#div1{
width:200px;
height:200px;
border:2px red solid;
position:fixed;
left:100px;
top:50px;
}
<p>文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本。</p>
....