文档流:
普通流(normal flow):
字面意思是普通流或者标准流,也就是常说的文档流,指网页内标签正常是从上到下,从左到右排列的意思,css的定位机制有3种:普通流(标准流)、浮动、定位。
浮动:
是指使元素飘起来不完全脱离标准流的控制,绝对定位才是完全脱离标准流的,飘起来后不会再占原来的位置,浮动可以使块级元素在一行排列显示,float的值有:none默认值,元素不浮动、right元素向右浮动、left元素向左浮动。
.box ul li {
float:left;
}
浮动特性:
1、浮动只存在于水平方向,浮动不能上对齐和下对齐,浮动属于内容content,所以是无法跨越padding和border的,要想跨越就会使用定位;
2、浮动找离自己最近的父级盒子对齐,浮动影响的是他的下面的盒子,自己浮动后会脱离文档流不占位,从而下面的盒子会到它原来的位置排列;
3、浮动可以让元素默认转换为类似行内块元素(float使元素显示模式隐藏转换,但是并非真实行内块,因为行内块元素中间默认有间隙,而float转换后的元素中间没有间隙)。
清除浮动:
主要是为了解决父级元素没有给高度,子级盒子浮动不占位引起的父级盒子高度为0的问题,清除浮动后,父级盒子自动检测高度,从而不会影响下面标准流盒子的布局。
清除浮动的方法有四种:
1、额外标签法(标签给clear属性):
在最后一个浮动元素末尾添加一个空标签,并给这个标签添加clear:both;属性,添加属性的三种方式任选其一都可以,这里采用行内样式举例子,clear的属性值有left、right、both(推荐使用),此方法比较快捷,但是给页面增加了无意义标签,结构化较差。
<style>
.father {
background-color: #ffaacf;
}
.son {
width: 100px;
height: 100px;
background-color: #666666;
float: left;
}
.son2 {
width: 200px;
height: 200px;
background-color: #9bdf13;
float:left;
}
.brother {
height: 100px;
background-color: #333333;
}
/*采用内联样式添加clear属性法
.clear {
clear: both;
}
*/
</style>
<body>
<div class="father">
<div class="son"></div>
<div class="son2"></div>
<div style="clear:both" class="clear"></div><!-- 添加空标签实现清除浮动属性法 -->
</div>
<div class="brother"></div>
</body>
2、父级标签添加overflow属性法:
给父级元素添加overflow属性同样可以实现清除浮动的效果,代码简洁,但是当页面的内容增多时,overflow属性不能使内容自动换行而隐藏,不能显示溢出的内容,overflow的值:hidden(溢出隐藏)、scroll(滚动条)页面会出现滚动条,不推荐使用、auto(自动)都可以清除浮动。
<style>
.father {
background-color: #ffaacf;
overflow: hidden;/*给父级标签添加overflow属性实现清除浮动*/
}
.son {
width: 100px;
height: 100px;
background-color: #666666;
float: left;
}
.son2 {
width: 200px;
height: 200px;
background-color: #9bdf13;
float:left;
}
.brother {
height: 100px;
background-color: #333333;
}
</style>
<body>
<div class="father">
<div class="son"></div>
<div class="son2"></div>
</div>
<div class="brother"></div>
</body>
3、after伪元素兼zoom: 1;属性法:
after伪元素可以解决额外标签法中无意义的标签问题,伪元素实际还是本身,只是给了另一个身份,其具体方法是:先声明伪类并配置属性:{content: “”;display: block;height: 0;clear: both;visibility: hidden;},后父级盒子调用;zoom: 1属性是解决兼容IE6~7问题的,属性前面加*的作用是告诉浏览器,只有遇到IE6~7浏览器才会执行此代码,其他浏览器不执行此代码,如
<style>
/* 给父级盒子声明伪类,类名可以直接使用father,如:.father:after {} */
.clearfix:after {
content: "";
display: block;
height: 0;
clear: both;
visibility: hidden;
}
.clearfix { /* 解决IE6~7之间存在的兼容问题,此属性可以直接写在.father {}中,省去一个类名的声明 */
*zoom: 1;/* css hack 解决IE低版本浏览器兼容性*/
}
.father {
background-color: #ffaacf;
}
.son {
width: 100px;
height: 100px;
background-color: #666666;
float: left;
}
.son2 {
width: 200px;
height: 200px;
background-color: #9bdf13;
float:left;
}
.brother {
height: 100px;
background-color: #333333;
}
</style>
<body>
<div class="father clearfix"><!-- 父级标签调用伪类 -->
<div class="son"></div>
<div class="son2"></div>
</div>
<div class="brother"></div>
</body>
4、双伪元素法:
此方法和after伪元素法一样,只是采用双伪元素实现清除浮动效果,如:
<style>
/* 声明双伪类: */
.clearfix:before,
.clearfix:after {
content: "";
display: block;
height: 0;
}
.clearfix:after {
clear: both;
}
.clearfix { /* 解决IE6~7之间存在的兼容问题 */
*zoom: 1;
}
.father {
background-color: #ffaacf;
}
.son {
width: 100px;
height: 100px;
background-color: #666666;
float: left;
}
.son2 {
width: 200px;
height: 200px;
background-color: #9bdf13;
float:left;
}
.brother {
height: 100px;
background-color: #333333;
}
</style>
<body>
<div class="father clearfix"><!-- 父级标签调用伪类 -->
<div class="son"></div>
<div class="son2"></div>
</div>
<div class="brother"></div>
</body>
定位(position):
实际开发中,标准流和浮动不能满足我们布局的需求,此时使用定位就可以很好的实现布局效果。定位属性主要包括:定位模式和边偏移。
定位模式:
position的属性值:
绝对定位和固定定位会发生模式转换,最终会默认转换为inline-block行内块模式
边偏移属性:
子绝父相搭配定位方式:
子绝父相是实际开发中一种常见的定位搭配方式,子级用绝对定位,父级用相对定位。父级用相对定位的原因是自己占位,不会影响下面元素的布局,子级用绝对定位的原因是自己不占位,方便其他元素布局,如常见轮播图布局。
/* 子绝父相定位代码展示: */
<style>
/* 实现btnleft 和 btnright位于topbox的两边居间,bottom盒子在top盒子上面: */
* {
margin: 0;
padding: 0;
}
body {
width: 600px;
height: 500px;
margin: 0 auto;
}
div {
border: 1px solid yellowgreen;
}
.topbox,
.bottom {
width: 400px;
height: 200px;
background-color: #443366;
position: relative;
}
.btnright~div {
width: 98px;
height: 160px;
background-color: #666666;
margin-top: 15px;
float:left;
}
.bottom {
background-color: #998866;
}
.btnleft,
.btnleft+div {
width: 50px;
height: 50px;
background-color: turquoise;
position: absolute;
top: 70px;
}
.btnleft+div {
right: 0px;
}
</style>
<body>
<div class="topbox">
<div class="btnleft"></div>
<div class="btnright"></div>
<div>页面一</div>
<div>页面二</div>
<div>页面三</div>
<div>页面四</div>
</div>
<div class="bottom"></div>
</body>
绝对定位的盒子水平、垂直居中算法:
普通盒子左右居中仅需margin:0 auto;即可,但是当给盒子给了定位或者浮动后,此方法失效,这时就只能使用算法两步进行居中定位:1:使用绝对定位给自己盒子left值为父级盒子宽度的50%(left:50%)2:使用margin-left值为自己盒子宽度的一半的负值,案例代码如下:
<style>
.box {
border: 1px solid #552;
width: 400px;
height: 300px;
position: relative;
}
.son {
border: 1px solid red;
width: 120px;
height: 100px;
margin: 0 auto;
/* float: left; */
position: absolute;
left: 50%;
margin-left: -60px;
top: 50%;
margin-top: -50px;
}
</style>
<body>
<div class="box">
<div class="son"></div>
</div>
</body>
z-index层级:
浮动会使后面的元素默认排在最下面,而定位会使后面的元素默认排在最上面,有的时候需要改变这个顺序,此时定位的元素可以使用z-index来解决这个问题(定位的元素才有z-index),其默认值为0,其值没有限制。
提示:本文图片等素材来源于网络,若有侵权,请发邮件至邮箱:810665436@qq.com联系笔者 删除。
笔者:苦海