1、概述

1、盒子模型:元素什么样
    页面元素的大小
    边框
    与其他元素的距离
2、定位机制:元素放哪儿
    文档流
    浮动定位
    层定位

CSS布局与定位-LMLPHP

2、盒子模型、overflow属性、border属性

1、盒子模型
页面上的区域、图片、导航、列表、段落,都可以是盒子
盒子模型的组成:height,width,border,padding,margin content
除了content都是盒子的属性

#box{
    width:100px;
    height:100px;
    border: 1px solid;
    padding:20px;
    margin:10px;
}

盒子的border,padding,margin的四周可以单独设置

CSS布局与定位-LMLPHP 

2、overflow属性:当内容溢出盒子框时,overflow属性取值
hidden:超出部分不可见
scroll:显示滚动条
auto:如果有超出部分,再显示滚动条,没有就不显示

3、border属性
border:width style color  按这个顺序直接列出border的所有属性
border-width:px,thin,medium,thick
border-style:dashed,dotted,solid,double
border-color:

可以分别设置四个方向上的border属性:top,right,bottom,left
div{
    border-bottom:1px,solid,red;
}

水平分割线可以通过设置高度为1的border来实现:
.line{
    width:500px;
    height:1px;
    border-top:1px solid #e5e5e5
}

 3、padding和margin属性

1、对浏览器的默认padding和margin属性清零
*{
    margin:0;
    padding:0;
}

2、padding和margin可以取值px,%
padding: 1px 2px 3px 4px  按照上右下左的顺序
padding:1px 2px          上下是1px,左右是2px

3、margin的合并:垂直方向上合并,水平方向不合并
合并的时候两个盒子取大的那个margin

4、将盒子中的content水平居中
图片,文字水平居中 text-align:center;
div水平居中  margin:0 auto;     浏览器自动计算
如果盒子position:absolute 则失效

5,、消除盒子间空隙的方法:
font-size:0;

 4、CSS定位机制——文档流定位

1、元素的分类
    1)block:独占一行,元素的height,width,margin,padding都可以设置
        常见的block元素:<div> <p> <h1>~<h6> <ol> <ul> <table> <form>
        display:block;
    2)inline:
        不单独占一行
        width,height不可设置
        width就是它包含的文字或者图片的宽度,不可改变
        常见的inline元素:<span> <a>
        display:inline;
        inline元素之间有一个间距问题
    3)inline-block:同时具有inline元素,block元素的特点
        不单独占一行
        元素的height,width,padding,margin都可以设置
        常见元素:<img>
        display:inline-block;

2、元素的互相转换
display:none;  元素不会被显示
display:block;
display:inline;
display:inline-block;

总结:文档流就是,从上到下,从左到右,输出文档内容
block:从上到下,独占一行
inline:从左到右,占据一行

例子: 

<!doctype html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<style>
	*{
		padding: 0;
		margin:0;
	}
	#nav{
		margin: 0 auto;
		width: 300px;
		font-size: 0;
	}
	a{  /*否则无法设置高度宽度等*/
		display: inline-block;
		/*盒子的样式*/
		width: 80px;
		height: 30px;
		border-bottom: 1px solid #ccc;
		/*超链接文本*/
		font-size: 14px;
		text-align: center;
		line-height: 30px;
		text-decoration: none;
	}
	a:hover{
		color: white;
		background-color: #ccc;
		border: 1px solid;
		border-left-color: orange;
		border-top-color: orange;
		border-right-color: orange;
	}
	/*父元素定义font-size:0 去掉行内块元素水平方向空白;子元素定义vertical-align 属性去掉行内块元素垂直方向空白*/
	</style>
</head>
<body>
<div id="nav">
	<a href="#">链接1</a>
	<a href="#">链接2</a>
	<a href="#">链接3</a>
</div>
</body>
</html>

CSS布局与定位-LMLPHP

5、CSS定位机制——浮动定位 

1、float属性:left,right,none
none不浮动
实现两个盒子的并列显示
2、clear属性:left,right,both
用于将div安置到期望的位置,不受浮动元素的影响

example:实现整个页面的四行三列

6、CSS定位机制——层定位

1、position属性:对每个图层进行精准定位操作
position:static;     没有定位,元素出现在正常的流中,所有定位属性无效
position:fixed;      固定定位,相对于浏览器窗口的定位,不会随着滚动条滚动,广告
position:relative;   相对定位,相对于其直接父元素定位,其文档流中的原位置仍存在
position: absilute;   绝对定位,相对于定义为absolute或者relative的第一个父元素定位,
如果没有,则相对于body定位,文档流原位置不存在

2、通过这些属性定位:
top,bottom,left,right,z-index

一般做法就是,父元素为realative,子元素为absolute,这样子元素可以随着父元素移动,而相对位置不变

 

12-03 12:12