css定位和浮动

本篇文章主要写的是css中的浮动和定位布局,让刚入前端不明白布局的刻印轻松掌握这两个方面的布局,并且还有简单的万花筒代码和淘宝商品展示布局代码演示


定位:

css中常见的定位有相对和绝对定位。说到定位,就从它的属性position说起。在css中属性position的值有6个,学好这6个值,对定位就会有基本的掌握。重点通过它的属性值来介绍定位的了解。

position属性值:

  • relative:1.  相对定位,元素框相对于正常文档流发生偏移,本元素的原来的位置就会被占掉。

                     2.  在布局中的最常使用,使一个元素变成父元素,然后给自己的子元素一个absolute绝对定位,就可以让子元素相 对于父元素任意排版

  • absolute:1.  绝对定位。设置这个属性值的元素其元素框不在占有文档流。但是原来的位置不能被其他元素占有。

                       2.  常见引用,和relative结合使用,使一个元素相变成一个元素的子元素,这让他进行定位,设置排版  

  realtive和absolute两个属性值结合使用是最常用的,让子元素相对于父元素进行布局。在立体旋转,万花筒就有这种使用 

这是一个简单的万花筒效果图的代码,直接复制就可以看到效果

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
		<style type="text/css">
			*{
				margin: 0 auto;
				padding: 0;
			}
			body{
				background-color: grey;
			}
			#wai{
				width: 200px;
				height: 600px;
        		margin: 100px auto 0;
				position: relative;//让父元素相对定位
				transform-style: preserve-3d;
				transform: rotateX(-10deg);
				perspective: 2000px;
			}
			#top{
				width: 100px;
				height: 100px;
				position: absolute;//让元素定位后变成子元素,进行布局
				transform-style: preserve-3d;
				top: 50px;
				animation: xuanzhuan 6s linear infinite;
			}
			#mon{
				width: 100px;
				height: 100px;
				position: absolute;
				transform-style: preserve-3d;
				animation: xuanzhuan 6s linear infinite;
				top: 200px;
			}
			#bottom{
				width: 100px;
				height: 100px;
				position: absolute;
				transform-style: preserve-3d;	
				animation: xuanzhuan 6s linear infinite;
				top: 350px;
			}
			
			@keyframes xuanzhuan{
				from{
					transform: rotateY(0deg);
				}
				to{
					transform: rotateY(360deg);
				}
			}
			
			#top div{
				width: 100px;
				height: 100px;
				position: absolute;
				background-size: 100% 100%;
				transform-style: preserve-3d;
				border-radius: 10px;
				
			}
			
		
			#a1{
				background-image: url(img/1.jpg);
				transform: rotateY(0deg) translateZ(300px);
			}
			#a2{
				background-image: url(img/2.jpg);
				transform: rotateY(45deg) translateZ(300px);
			}
			#a3{
				background-image: url(img/3.jpg);
				transform: rotateY(90deg) translateZ(300px);
			}
			#a4{
				background-image: url(img/4.jpg);
				transform: rotateY(135deg) translateZ(300px);
			}
			#a5{
				background-image: url(img/5.jpg);
				transform: rotateY(180deg) translateZ(300px);
			}
			#a6{
				background-image: url(img/6.jpg);
				transform: rotateY(225deg) translateZ(300px);
			}
			
			#a7{
				background-image: url(img/7.jpg);
				transform: rotateY(270deg) translateZ(300px);
			}
			#a8{
				background-image: url(img/8.jpg);
				transform: rotateY(315deg) translateZ(300px);
			}
			
			/*#wai:hover #top #a8{
				
				transform: rotateY(315deg) translateZ(400px);
			}*/
			}
		</style>
	</head>
	<body>
		<div id="wai">
			<div id="top">
				<div id="a1"></div>
				<div id="a2"></div>
				<div id="a3"></div>
				<div id="a4"></div>
				<div id="a5"></div>
				<div id="a6"></div>
				<div id="a7"></div>
				<div id="a8"></div>
			</div>
			
		</div>
	</body>
</html>

  • fixed:元素框不再占有文档流位置,并且相对于视窗进行定位

  • sticky:(这是css3新增的属性值)粘性定位。最初会被当作是relative,相对于原来的位置进行偏移;一旦超过一定阈值之后,会被当成fixed定位,相对于视口进行定位。

浮动

    1. 浮动:使当前元素脱离普通流,相当于浮动起来一样,浮动的框可以左右移动,直至它的外边缘遇到包含框或者另一个浮动框的边缘。浮动属性:用float属性,它的属性值有两个,为right和left两个属性值。

  • left:左浮动
  • right:右浮动

    2.使用浮动常出现的问题:

           1) 对附近的元素布局造成改变,使得布局混乱

           2)因为元素脱离了文档流,会造成一种坍塌的现象。简单的说就是原来的父元容器是被元素撑开的,当浮动之后,父容器的高度就会坍塌。

   3.消除浮动

         使用浮动,常常就会用到消除浮动。消除浮动可以解决坍塌现象,使元素充满块

  •  消除浮动常用的三种方法:

        1.在浮动的元素后面加一个空元素,设置属性为clear:both。

           缺点:成本太高,添加了一个元素,难维护

        2.通过设置css的样式: overflow:hidden

        3. after伪类:对子元素的after伪类进行设置。

   代码示例:通过浮动布局设计淘宝商品展示:

    

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<style>
			.nav{
				width:1200px;
				height: 200px;
				background-color: navajowhite;
				margin: 0 auto;
				margin-bottom: 20px;
			}
			.info{
				 width: 280px;
				 height: 400px;
				 float: left;//左浮动
				 background-color: red;
				 margin-right: 20px;
				 margin-top :20px
			}
			.info_img{
				width: 280px;
				height: 280px;
				background-color: ;
				overflow: hidden;/*超出部分隐藏*/
				
			}
			.info_pri{
				width: 280px;
				height: 50px;
				background-color: greenyellow;
			}
			.info_mes{
				width: 280px;
				height: 50px;
				background-color: goldenrod;
			}
			.info_img img{
				width: 100%;
				transition: all 1s; 
			}
			.info_img img:hover{
				transform: scale(1.1);
			}
			.info_pri .span1{
				font-size: 24px;
				line-height:50px ;
				color: red;
				font-weight: bold;
			}
			.info_pri .span2{
				font-size: 14px;
				line-height:50px ;
				color: white;
				background-color: red;
			}
		</style>
	</head>
	<body>
		<div class="nav">
			
			<div class="info">
				<div class="info_img">
				<img src="img/5.jpg">
			 	</div>
				
				   <div class="info_pri">
					<span class="span1">¥46.00</span>
					<span class="span2">包邮</span>
				  </div>
				
				<div class="info_mes"></div>
			</div>
			
			<div class="info">
				<div class="info_img">
				<img src="img/5.jpg">
			 	</div>
				
				   <div class="info_pri">
					<span class="span1">¥46.00</span>
					<span class="span2">包邮</span>
				  </div>
			</div>
			
			<div class="info">
				<div class="info_img">
				<img src="img/5.jpg">
			 	</div>
				
				   <div class="info_pri">
					<span class="span1">¥46.00</span>
					<span class="span2">包邮</span>
				  </div>
			</div>
			
			<div class="info">
				<div class="info_img">
				<img src="img/5.jpg">
			 	</div>
				
				   <div class="info_pri">
					<span class="span1">¥46.00</span>
					<span class="span2">包邮</span>
				  </div>
			</div>
			<div class="info">
				<div class="info_img">
				<img src="img/5.jpg">
			 	</div>
				
				   <div class="info_pri">
					<span class="span1">¥46.00</span>
					<span class="span2">包邮</span>
				  </div>
			</div>
			<div class="info">
				<div class="info_img">
				<img src="img/5.jpg">
			 	</div>
				
				   <div class="info_pri">
					<span class="span1">¥46.00</span>
					<span class="span2">包邮</span>
				  </div>
			</div>
			
			</div>
		</div>
	</body>
</html>

部分效果图:



           

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值