web前端技术笔记(四)块元素、浮动、定位、background属性

块元素、内联元素、内联块元素

元素就是标签,布局中常用的有三种标签,块元素、内联元素、内联块元素,了解这三种元素的特性,才能熟练的进行页面布局。

块元素
块元素,也可以称为行元素,布局中常用的标签如:div、p、ul、li、h1~h6、dl、dt、dd等等都是块元素,它在布局中的行为:

  • 支持全部的样式
  • 如果没有设置宽度,默认的宽度为父级宽度100%
  • 盒子占据一行、即使设置了宽度

内联元素
内联元素,也可以称为行内元素,布局中常用的标签如:a、span、em、b、strong、i等等都是内联元素,它们在布局中的行为:

  • 支持部分样式(不支持宽、高、margin上下、padding上下)
  • 宽高由内容决定
  • 盒子并在一行
  • 代码换行,盒子之间会产生间距
  • 子元素是内联元素,父元素可以用text-align属性设置子元素水平对齐方式

解决内联元素间隙的方法
1、去掉内联元素之间的换行
2、将内联元素的父级设置font-size为0,内联元素自身再设置font-size

内联块元素
内联块元素,也叫行内块元素,是新增的元素类型,现有元素没有归于此类别的,img和input元素的行为类似这种元素,但是也归类于内联元素,我们可以用display属性将块元素或者内联元素转化成这种元素。它们在布局中表现的行为:

  • 支持全部样式
  • 如果没有设置宽高,宽高由内容决定
  • 盒子并在一行
  • 代码换行,盒子会产生间距
  • 子元素是内联块元素,父元素可以用text-align属性设置子元素水平对齐方式。

这三种元素,可以通过display属性来相互转化,不过实际开发中,块元素用得比较多,所以我们经常把内联元素转化为块元素,少量转化为内联块,而要使用内联元素时,直接使用内联元素,而不用块元素转化了。

display属性
display属性是用来设置元素的类型及隐藏的,常用的属性有:
1、none 元素隐藏且不占位置
2、block 元素以块元素显示
3、inline 元素以内联元素显示
4、inline-block 元素以内联块元素显示

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<style type="text/css">
		body{
			font-size:0
		}

		.box{
			width:200px;
			height:200px;
			background-color:gold;
			display:inline-block;
			font-size:16px;
			margin:20px;
		}

		
		.con{
			width:200px;
		}
		.con h3{
			font-size:30px;
		}
		.box2{
			width:200px;
			height:200px;
			background-color:gold;
			font-size:16px;
			display:none;
		}
		/*悬浮标题显示*/
		.con:hover .box2{
			display:block;
		}
	</style>
</head>
<body>
	<div class="box">div元素</div>
	<div class="box">div元素</div>
	<br>
	<br>

	<div class="con">
		<h3>文字标题</h3>
		<div class="box2">文字标题的说明</div>
	</div>

</body>
</html>

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<style type="text/css">
		.menu{
			width:694px;
			height:50px;
			/* background-color:cyan; */
			margin:50px auto 0;
			font-size:0;
		}

		.menu a{
			width:98px;
			height:48px;
			background-color:#fff;
			display:inline-block;
			border:1px solid gold;
			font-size:16px;
			margin-left:-1px;
			text-align:center;
			line-height:48px;
			text-decoration:none;
			color:pink;
			font-family:'Microsoft Yahei'
		}

		.menu a:hover{
			background-color:gold;
			color:#fff;
		}



	</style>
</head>
<body>
	<div class="menu">
		<a href="#">首页</a>
		<a href="#">公司简介</a>
		<a href="#">公司简介</a>
		<a href="#">公司简介</a>
		<a href="#">公司简介</a>
		<a href="#">公司简介</a>
		<a href="#">公司简介</a>
	</div>
</body>
</html>

浮动

浮动特性

1、浮动元素有左浮动(float:left)和右浮动(float:right)两种

2、浮动的元素会向左或向右浮动,碰到父元素边界、其他元素才停下来

3、相邻浮动的块元素可以并在一行,超出父级宽度就换行

4、浮动让行内元素或块元素自动转化为行内块元素(此时不会有行内块元素间隙问题)

5、浮动元素后面没有浮动的元素会占据浮动元素的位置,没有浮动的元素内的文字会避开浮动的元素,形成文字饶图的效果

6、父元素如果没有设置尺寸(一般是高度不设置),父元素内整体浮动的元素无法撑开父元素,父元素需要清除浮动

7、浮动元素之间没有垂直margin的合并

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>浮动</title>
	<style type="text/css">		
		.con{
			width:400px;
			height:80px;
			border:1px solid gold;
			margin:50px auto 0
		}
		.con div{
			width:60px;
			height:60px;
			margin:10px;

		}
		.box01{
			background-color:green;
			float:left;
		}
		.box02{
			background-color:pink;
			float:right
		}

		.con2{
			width:400px;
			height:400px;
			border:1px solid #000;
			margin:50px auto 0;
		}

		.con2 div{
			width:100px;
			height:100px;
			background-color:gold;
			margin:15px;
			float:left;
		}



	</style>
</head>
<body>
	<div class="con">		
		<div class="box01"></div>
		<div class="box02"></div>
	</div>

	<!-- .con2>div{$}*9 -->

	<div class="con2">
		<div>1</div>
		<div>2</div>
		<div>3</div>
		<div>4</div>
		<div>5</div>
		<div>6</div>
		<div>7</div>
		<div>8</div>
		<div>9</div>
	</div>


</body>
</html>

浮动文字饶图 

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>文字饶图</title>
	<style type="text/css">
		.con{
			width:450px;
			height:210px;
			border:1px solid #000;
			margin:50px auto 0;
		}

		.pic{
			width:80px;
			height:80px;
			background-color:gold;
			float:left;
			margin:10px;
		}

		.text{
			/* background-color:green; */
			height:130px;
			color:#666;
		}





	</style>
</head>
<body>
	<div class="con">
		<div class="pic"></div>		
		<div class="text">1、浮动元素有左浮动(float:left)和右浮动(float:right)两种

2、浮动的元素会向左或向右浮动,碰到父元素边界、其他元素才停下来

3、相邻浮动的块元素可以并在一行,超出父级宽度就换行1、浮动元素有左浮动(float:left)和右浮动(float:right)两种

2、浮动的元素会向左或向右浮动,碰到父元素边界、其他元素才停下来

3、相邻浮动的块元素可以并在一行,超出父级宽度就换行</div>

	</div>
</body>
</html>

 

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<style type="text/css">
		.box{
			width:450px;
			height:210px;
			border:1px solid #000;
			margin:50px auto 0;

		}

		.box img{
			float:left;
			margin:10px;
			margin-bottom:0; 
		}

		.box div{
			margin:10px;
			font-size:14px;
			line-height:22px;
		}



	</style>
</head>
<body>
	<div class="box">
		<img src="images/bg.jpg" alt="h5的标志">
		<div>
			1、浮动元素有左浮动(float:left)和右浮动(float:right)两种

2、浮动的元素会向左或向右浮动,碰到父元素边界、其他元素才停下来

3、相邻浮动的块元素可以并在一行,超出父级宽度就换行

4、浮动让行内元素或块元素自动转化为行内块元素(此时不会有行内块元素间隙问题)

5、浮动元素后面没有浮动的元素会占据浮动元素的位置,没有浮动的元素内的文字会避开浮动的元素,形成文字饶图的效果

6、父元素如果没有设置尺寸(一般是高度不设置),父元素内整体浮动的元素无法撑开父元素,父元素需要清除浮动
		</div>

	</div>
</body>
</html>

使用浮动完成菜单制作

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>菜单</title>
	<style type="text/css">
		.menu{
			width:694px;
			height:50px;
			/* background-color:cyan; */

			/* 去掉小圆点   */
			list-style:none;
			margin:50px auto 0;
			padding:0;
		}
		.menu li{
			width:98px;
			height:48px;
			border:1px solid gold;
			background-color:#fff;
			/* display:inline-block; */
			float:left;
			margin-left:-1px;
		}
		.menu li a{
			/* background-color:gold; */
			display:block;
			width:98px;
			height:48px;
			text-align:center;
			line-height:48px;
			text-decoration:none;
			font-size:16px;
			font-family:'Microsoft Yahei';
			color:pink;
		}
		.menu li a:hover{
			background-color:gold;
			color:#fff;
		}




	</style>
</head>
<body>
	<!-- ul.menu>(li>a{公司简介})*7 -->

	<ul class="menu">
		<li><a href="#">公司简介</a></li>
		<li><a href="#">公司简介</a></li>
		<li><a href="#">公司简介</a></li>
		<li><a href="#">公司简介</a></li>
		<li><a href="#">公司简介</a></li>
		<li><a href="#">公司简介</a></li>
		<li><a href="#">公司简介</a></li>
	</ul>


</body>
</html>

清除浮动(父元素不给高度,为了撑开父级的高度)

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<style type="text/css">
		.list{
			width:210px;
			/* height:400px; */
			border:1px solid #000;
			margin:50px auto 0;
			list-style:none;
			padding:0;
			/* 
			第一种清除浮动的方法:
			overflow: hidden; 
			*/

		}

		.list li{
			width:50px;
			height:50px;
			background-color:gold;
			margin:10px;
			float:left;
		}

		/* .clearfix:before{
			content:"";
			display:table;
		}
		
		
		.clearfix:after{
			content:"";
			display:table;
			clear:both;
		} */

		/* 把上面代码合并 同时解决margin top塌陷和清除浮动*/
		.clearfix:before,.clearfix:after{
			content:"";
			display:table;
		}
		.clearfix:after{
			clear:both;
		}
        /* 防止IE非标浏览器不认(兼容性) */
		.clearfix{
			zoom:1;
		}



	</style>
</head>
<body>
	<!-- ul.list>li{$}*8 -->

	<ul class="list clearfix">
		<li>1</li>
		<li>2</li>
		<li>3</li>
		<li>4</li>
		<li>5</li>
		<li>6</li>
		<li>7</li>
		<li>8</li>
		<li>5</li>
		<li>6</li>
		<li>7</li>
		<li>8</li>
		<!-- 
		
		第二种清除浮动的方法:
		<div style="clear:both"></div>

		 -->
	</ul>

</body>
</html>

 

定位

文档流
文档流,是指盒子按照html标签编写的顺序依次从上到下,从左到右排列,块元素占一行,行内元素在一行之内从左到右排列,先写的先排列,后写的排在后面,每个盒子都占据自己的位置。

关于定位

定位是为了突破文档流


我们可以使用css的position属性来设置元素的定位类型,postion的设置项如下:

  • relative 生成相对定位元素,元素所占据的文档流的位置保留,元素本身相对自身原位置进行偏移

  • absolute 生成绝对定位元素,元素脱离文档流,不占据文档流的位置,可以理解为漂浮在文档流的上方,相对于上一个设置了定位的父级元素来进行定位,如果找不到,则相对于body元素进行定位。

  • fixed 生成固定定位元素,元素脱离文档流,不占据文档流的位置,可以理解为漂浮在文档流的上方,相对于浏览器窗口进行定位。

  • static 默认值,没有定位,元素出现在正常的文档流中,相当于取消定位属性或者不设置定位属性。

  • inherit 从父元素继承 position 属性的值。

定位元素的偏移
定位的元素还需要用left、right、top或者bottom来设置相对于参照元素的偏移值。

定位元素层级
定位元素是浮动的正常的文档流之上的,可以用z-index属性来设置元素的层级

伪代码如下:

.box01{
    ......
    position:absolute;  /* 设置了绝对定位 */
    left:200px;            /* 相对于参照元素左边向右偏移200px */
    top:100px;          /* 相对于参照元素顶部向下偏移100px */
    z-index:10          /* 将元素层级设置为10 */
}

定位元素特性
绝对定位和固定定位的块元素和行内元素会自动转化为行内块元素 

 相对定位

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>定位</title>
	<style type="text/css">
		
		.con{
			width:400px;
			height:400px;
			border:1px solid #000;
			margin:50px auto 0;
		}

		.box01,.box02{
			width:300px;
			height:100px;
			margin:10px;
		}

		.box01{
			background-color:green;
			position:relative;
            /*相对左边,向右偏移50px*/
			left:50px;
			top:50px;
		}


		.box02{
			background-color:gold;
		}



	</style>
</head>
<body>
	<div class="con">
		<div class="box01"></div>
		<div class="box02"></div>
	</div>
</body>
</html>

绝对定位

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>定位</title>
	<style type="text/css">
		
		.con{
			width:400px;
			height:400px;
			border:1px solid #000;
			margin:50px auto 0;
			position:relative;
		}

		.box01,.box02{
			width:300px;
			height:100px;
			margin:10px;
		}

		.box01{
			background-color:green;
			position:absolute;
			left:50px;
			top:50px;
		}


		.box02{
			background-color:gold;
		}



	</style>
</head>
<body>
	<div class="con">
		<div class="box01"></div>
		<div class="box02"></div>
	</div>
</body>
</html>

固定定位

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>定位</title>
	<style type="text/css">
		
		.con{
			width:400px;
			height:400px;
			border:1px solid #000;
			margin:50px auto 0;
			position:relative;
		}

		.box01,.box02{
			width:300px;
			height:100px;
			margin:10px;
		}

		.box01{
			background-color:green;
			position:fixed;
			right:50px;
			bottom:50px;
		}


		.box02{
			background-color:gold;
		}



	</style>
</head>
<body>
	<div class="con">
		<div class="box01"></div>
		<div class="box02"></div>
	</div>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<style type="text/css">
		.con{
			width:400px;
			height:400px;
			border:1px solid #000;
			margin:50px auto 0;
			position:relative;
			
		}

		.con div{
			width:200px;
			height:200px;
			position:absolute;
		}

		.box01{
			background-color:green;
			left:20px;
			top:20px;
			z-index:10;
		}

		.box02{
			background-color:gold;
			left:40px;
			top:40px;
			z-index:11
		}

		.box03{
			background-color:pink;
			left:60px;
			top:60px;
            /*层级越大越靠上*/
			z-index:12
		}

		.box04{
			background-color:yellowgreen;
			left:80px;
			top:80px;
		}

	</style>
</head>
<body>
	<div class="con">
		<div class="box01"></div>
		<div class="box02"></div>
		<div class="box03"></div>
		<div class="box04"></div>
	</div>
</body>
</html>

定位实例1 

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<style type="text/css">		
		.con{
			width:100px;
			height:100px;
			background-color:gold;
			margin:50px auto 0;
			position:relative;
			border-radius:14px;
		}

		.box{
			width:28px;
			height:28px;
			background-color:red;
			color:#fff;
			text-align:center;
			line-height:28px;
			position:absolute;
			left:86px;
			top:-14px;
			/*圆角*/
			border-radius:14px;
		}


	</style>
</head>
<body>
	<div class="con">
		<div class="box">5</div>
	</div>
</body>
</html>

 定位实例2

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<style type="text/css">
		
		.menu{
			height:80px;
			background-color:gold;
			position:fixed;
			width:960px;
			top:0px;
			/*始终保持居中,无论窗口大小*/
			left:50%;
			margin-left:-480px;
		}

		p{
			text-align:center;
		}

		.popup{
			width:500px;
			height:300px;
			border:1px solid #000;
			background-color:#fff;
			position:fixed;
			left:50%;
			margin-left:-251px;
			top:50%;
			margin-top:-151px;
			z-index:9999;
		}
		
		.popup h2{
			background-color:gold;
			margin:10px;
			height:40px;
		}

		.mask{
			position:fixed;
			width:100%;
			height:100%;
			background-color:#000;
			left:0;
			top:0;
			/*透明度*/
			opacity:0.5;
			z-index:9998;
		}

		.pop_con{
			display:block;
		}



	</style>
</head>
<body>
	<div class="menu">菜单文字</div>
	
	<div class="pop_con">
		<div class="popup">
			<h2>弹框的标题</h2>	
		</div>
		<div class="mask"></div>
	</div>

	<p>网页文字</p>
	<br />
	<br />
	<br />
	<br />
	<br />
	<br />
	<br />
	<p>网页文字</p>
	<br />
	<br />
	<br />
	<br />
	<br />
	<br />
	<br />
	<p>网页文字</p>
	<br />
	<br />
	<br />
	<br />
	<br />
	<br />
	<br />
	<p>网页文字</p>
	<br />
	<br />
	<br />
	<br />
	<br />
	<br />
	<br />
	<p>网页文字</p>
	<br />
	<br />
	<br />
	<br />
	<br />
	<br />
	<br />
	<p>网页文字</p>
	<br />
	<br />
	<br />
	<br />
	<br />
	<br />
	<br />
	<p>网页文字</p>
	<br />
	<br />
	<br />
	<br />
	<br />
	<br />
	<br />
	<p>网页文字</p>
	<br />
	<br />
	<br />
	<br />
	<br />
	<br />
	<br />
	<p>网页文字</p>
	<br />
	<br />
	<br />
	<br />
	<br />
	<br />
	<br />
	<p>网页文字</p>
	<br />
	<br />
	<br />
	<br />
	<br />
	<br />
	<br />
	<p>网页文字</p>
	<br />
	<br />
	<br />
	<br />
	<br />
	<br />
	<br />
	<p>网页文字</p>
	<br />
	<br />
	<br />
	<br />
	<br />
	<br />
	<br />
	<p>网页文字</p>
	<br />
	<br />
	<br />
	<br />
	<br />
	<br />
	<br />
</body>
</html>

background属性

属性解释
background属性是css中应用比较多,且比较重要的一个属性,它是负责给盒子设置背景图片和背景颜色的,background是一个复合属性,它可以分解成如下几个设置项:

  • background-color 设置背景颜色
  • background-image 设置背景图片地址
  • background-repeat 设置背景图片如何重复平铺
  • background-position 设置背景图片的位置
  • background-attachment 设置背景图片是固定还是随着页面滚动条滚动

实际应用中,我们可以用background属性将上面所有的设置项放在一起,而且也建议这么做,这样做性能更高,而且兼容性更好,比如:“background: #00FF00 url(bgimage.gif) no-repeat left center fixed”,这里面的“#00ff00”是设置background-color;“url(bgimage.gif)”是设置background-image;“no-repeat”是设置background-repeat;“left center”是设置background-position;“fixed”是设置background-attachment,各个设置项用空格隔开,有的设置项不写也是可以的,它会使用默认值。

举例:
下面这些例子使用下面这张图片做为背景图:

相关代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>test background</title>
    <style type="text/css">
        .backshow{
            width:320px;
            height:160px;
            border:3px solid #333;
            float:left;
            margin:10px;            
        }
        .bg1{background:cyan url(bg.jpg);}
        .bg2{background:cyan url(bg.jpg) repeat-x;}
        .bg3{background:cyan url(bg.jpg) repeat-y;}
        .bg4{background:cyan url(bg.jpg) no-repeat;}
        .bg5{background:cyan url(bg.jpg) no-repeat left center;}
        .bg6{background:cyan url(bg.jpg) no-repeat right center;}
    </style>
</head>
<body>
    <div class="backshow bg1"></div>
    <div class="backshow bg2"></div>
    <div class="backshow bg3"></div>
    <div class="backshow bg4"></div>
    <div class="backshow bg5"></div>
    <div class="backshow bg6"></div>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>background属性</title>
	<style type="text/css">
		
		.box{
			width:400px;
			height:200px;
			border:5px solid #000;
			margin:50px auto 0;

			/* background-color:cyan;
			background-image:url(images/bg.jpg); */
			/* 
				repeat-x:只平铺x轴方向;
				repeat-y:只平铺y轴方向;
				no-repeat:只平铺一次;
				repeat:缺省值,平铺所有的;
			 */
			/* background-repeat:no-repeat; */
			/* 
				3*3种位置
			   水平方向:left  center  right
			   垂直方向:top   center  botton
			*/

			/* background-position:-20px 10px; */


			background:url(images/bg.jpg) -20px 10px no-repeat cyan;


		}


	</style>
</head>
<body>
	<div class="box">		
		
	</div>
</body>
</html>

 

例子说明:

background-position的设置,可以在水平方向设置“left”、“center”、“right”,在垂直方向设置“top”、“center”、“bottom”,除了设置这些方位词之外,还可以设置具体的数值。

比如说,我们想把下边的盒子用右边的图片作为背景,并且让背景显示图片中靠近底部的那朵花:

用上面中间那张图片作为左边那个比它尺寸小的盒子的背景,上面右边的实现效果设置为:“background:url(location_bg.jpg) -110px -150px”,第一个数值表示背景图相对于自己的左上角向左偏移110px,负值向左,正值向右,第二个数值表示背景图相对于自己的左上角向上偏移150px,负值向上,正值向下。

实现原理示意图:

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>背景图定位</title>
	<style type="text/css">		
		.box{
			width:100px;
			height:100px;
			border:5px solid #000;
			margin:50px auto 0;
            /*通过浏览器控制台 调试图片位置*/
			background:url(images/location_bg.jpg) -103px -151px no-repeat;
		}
	</style>
</head>
<body>
	<div class="box"></div>
</body>
</html>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值