前端基础——浮动(float)与 inline-block 回顾

回顾 inline-block 特性:

1、块在一排显示

2、内联支持宽高

3、默认内容撑开宽度

4、标签之间的换行间隙被解析问题

5、ie6 ie7不支持块属性标签的inline-block问题


 

 float/文档流

float:left | right | none | inherit(继承);

文档流是文档中可显示对象在排列时所占用的位置。

浮动的定义:使元素脱离文档流,按照指定方向发生移动,遇到父级边界或者相邻的浮动元素停了下来

文档流的知识点:浏览器先解析了第一个div块,就会将它浮动,然后再解析,再浮动,所以如果1被右浮动,则会在最右侧

先看实例:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<style type="text/css">
			div{
				width: 100px;
				height: 100px;
				background-color:red;
				float: left;
			}
		</style>
	</head>
	<body>
		<div>1</div>
		<div>2</div>
		<div>3</div>
	</body>
</html>

  实例如图,按1/2/3的顺序向左排列

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<style type="text/css">
			div{
				width: 100px;
				height: 100px;
				background-color:red;
				float: right;  
			}
		</style>
	</head>
	<body>
		<div>1</div>
		<div>2</div>
		<div>3</div>
	</body>
</html>

  若是float: right的时候,则块元素就会按照 3/2/1的顺序向右浮动

clear 清除浮动

clear:left | right | both | none | inherit;

元素的某个方向上不能有浮动元素 clear:both; 在左右两侧均不允许浮动元素。

 

清浮动方法

1.加高 问题:扩展性不好,如果项目的高度不固定,是个瀑布流的话,这种方法就不行了

2.子级浮动将父级也设置浮动 问题:页面中所有元素(的父级)都加浮动最后加到body、html这样不合适,margin左右自动失效(floats bad !)

3.inline-block 清浮动方法: 问题:margin左右auto失效;

4.空标签清浮动 问题:IE6 最小高度 19px;(解决后IE6下还有2px偏差)

5.br清浮动 问题:若是都用br那么页面上将会出现很多br,一要清浮动就要加br。这样不符合工作中:结构、样式、行为,三者分离的要求。

<br clear="all" /> 

6.after伪类 清浮动方法(现在主流方法)

.clear:after{content:'';display:block;clear:both;}

.clear{zoom:1;}

after伪类: 元素内部末尾添加内容; :after{content"添加的内容";} IE6,7下不兼容 zoom 缩放

a、触发 IE下 haslayout,使元素根据自身内容计算宽高。

b、FF 不支持;

伪类就是给某一个元素添加特殊的效果。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style>
			.clearfix{
				*zoom:1; /*为了触发haslayout*/
			}
			.clearfix:after{
				content: ""; /*这里不写内容留空*/
				display: block; /*浮动的元素都是块状显示的,所以这里要将之变成block*/
				clear: both;
			}
			.box{
				border:1px solid red;
			}
			.item{
				width: 200px;
				height: 200px;
				background-color: red;
				float: left;
			}
		</style>
	</head>
	<body>
		<div class="box clearfix">
			<div class="item"></div>
		</div>
	</body>
</html>

  

7.overflow:hidden 清浮动方法; 问题:需要配合 宽度 或者 zoom 兼容IE6 IE7;overflow: scroll | auto | hidden; overflow:hidden;溢出隐藏(裁刀!)

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style>
			.box{
				width: 200px;
				height: 200px;
				background-color: red;
				border: 1px solid black;
				overflow: scroll; /*溢出以滚动条的形式隐藏*/
			}
			.item{
				width: 300px;
				height: 300px;
				background-color: blue;
			}
		</style>
	</head>
	<body>
		<div class="box">
			<div class="item"></div>
		</div>
	</body>
</html>

  

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style>
			.box{
				border: 1px solid red;
				overflow: hidden; /*溢出隐藏 就是超出容器范围以外的,就隐藏*/
			}
			.item{
				width: 200px;
				height: 200px;
				background-color: black;
				float: left;
			}
		</style>
		<!--
			清除浮动的方法
			1、加高度 (扩展性不好)
			2、给父级加浮动 (页面中所有元素都加浮动,margin左右自动失效(floats bad !))
			3、.inline-block 清浮动方法 (margin左右auto失效)
			4、空标签清除浮动 (IE6 最小高度 19px;(解决后IE6下还有2px偏差))
			5、.br清浮动	(不符合工作中:结构、样式、行为,三者分离的要求)

		-->
	</head>
	<body>
		<div class="box">
			<div class="item"></div>
		</div>
	</body>
</html>

  

 

BFC (block formatting context) 块级元素格式化上下文   标准浏览器(出了ie6 7和8 8是半标准浏览器)

a、float的值不为none。

b、overflow(溢出)的值不为visible(可视)。

c、display的值为table-cell, table-caption, inline-block中的任何一个。

d、position的值不为relative(相对定位)和static(继承)。

e、width|height|min-width|min-height:(!aotu)

haslayout 是IE浏览器特有的

a、writing-mode:tb-rl

b、-ms-writing-mode:tb-rl

c、zoom:(!normal)    zoom:1是常用的方法

只要触发了BFC和haslayout  这个地方就是独立的渲染区,不会受外界的影响

Float的特征

1、块在一排显示

2、内联支持宽高

3、默认内容撑开宽度

4、脱离文档流--有可能父级包不住里面的块元素

5、提升层级半层

 

posted @ 2018-03-04 16:18  千行路  阅读(419)  评论(0编辑  收藏  举报