1. 程式人生 > >css定位和浮動

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>

部分效果圖: