css布局方式
布局方式
1.标准流/静态流
默认布局方式,按照代码书写顺序及标签类型从上到下,从左到右依次显示
2.浮动布局
主要用于设置块元素的水平排列
1)属性:float
2)取值: 可取left或right,设置元素向左浮动或向右浮动. 示例:float:left/right;
3)特点:
- 元素设置浮动会从原始位置脱流,向左或向右依次停靠在其他元素边缘,在文档中不再占位
- 元素设置浮动,就具有块元素的特征,可以手动调整宽高
- "文字环绕":浮动元素遮挡正常元素的位置,无法遮挡正常内容的显示,内容围绕在浮动元素周围显示
4)常见问题: 子元素全部设置浮动,导致父元素高度为0,影响父元素背景色和背景图片展示,影响页面布局
5)解决:
- 对于内容固定的元素,如果子元素都浮动,可以给父元素固定高度(例:导航栏)
- 在父元素的末尾添加空的块元素。设置clear:both;清除浮动
- 为父元素设置overflow:hidden;解决高度为0
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Title</title> 6 <style> 7 #box{ 8 width:500px; 9 height:500px; 10 margin:0 auto; 11 background:orange; 12 13 14 } 15 #d1,#d2,#d3{ 16 width:200px; 17 height:200px; 18 } 19 #d1{ 20 21 background:red; 22 float:right; 23 24 } 25 #d2{ 26 height:300px; 27 background:green; 28 float:right; 29 } 30 #d3{ 31 background:blue; 32 float:right; 33 } 34 span{ 35 float:right; 36 width:200px; 37 height:200px; 38 background:pink; 39 <!--clear:both;--> 40 41 } 42 </style> 43 </head> 44 <body> 45 <div id="box">box 46 <div id="d1">d1</div> 47 <div id="d2">d2</div> 48 <div id="d3">d3</div> 49 <span>span1</span> 50 51 </div> 52 <!--脱离文档流的元素在文档中不在站位,可以手动调宽高--> 53 <span>span2</span> 54 </body> 55 </html>
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Title</title> 6 <style> 7 div{ 8 width:200px; 9 height:200px; 10 background:red; 11 float:left; 12 margin-right:30px; 13 } 14 h1{ 15 background:green; 16 17 } 18 input{ 19 /*正常元素在文档流中找位置,浮动元素在上层中找位置*/ 20 float:left; 21 } 22 </style> 23 </head> 24 <body> 25 <div></div> 26 <span>行内元素</span> 27 <input type="text"> 28 <h1>浮动元素只能遮挡元素的位置,但是不影响内容显示</h1> 29 </body> 30 </html>
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Title</title> 6 <style> 7 #nav{ 8 width:900px; 9 height:24px; 10 background:gray; 11 } 12 .left{ 13 width:300px; 14 float:left; 15 background:green; 16 } 17 .right{ 18 float:right; 19 background:red; 20 width:300px; 21 } 22 ul{ 23 margin:0; 24 passing:0; 25 /*去掉列表符号*/ 26 list-style:none; 27 } 28 li{ 29 float:left; 30 margin-right:50px; 31 } 32 #main{ 33 margin-top:50px; 34 width:900px; 35 /*解决子元素全部浮动造成父元素告诉为0的问题*/ 36 /*解决方法1:height:400px;*/ 37 /*解决方法2:overflow:hidden;*/ 38 overflow:hidden; 39 background:pink; 40 } 41 .item1{ 42 width:580px; 43 height:400px; 44 background:gray; 45 float:left; 46 } 47 .item2,.item3{ 48 width:300px; 49 height:190px; 50 background:gray; 51 float:right; 52 } 53 .item2{ 54 margin-bottom:20px; 55 } 56 #i1,#i2{ 57 width:200px; 58 height:200px; 59 background:red; 60 } 61 #i1{ 62 background:green; 63 float:left; 64 } 65 #i2{ 66 /*使文档中正常元素不受前面浮动元素影响*/ 67 /*clear:left/right/both*/ 68 clear:left; 69 } 70 .clear{ 71 clear:both; 72 } 73 </style> 74 </head> 75 <body> 76 <div id="nav"> 77 <div class="left"> 78 <ul> 79 <li id="d1">首页</li> 80 <li id="d2">物流</li> 81 <li id="d3">客户</li> 82 </ul> 83 </div> 84 <div class="right">右侧导航</div> 85 </div> 86 <div id="main"> 87 <div class="item1">1</div> 88 <div class="item2">2</div> 89 <div class="item3">3</div> 90 <div class="clear">1</div> 91 </div> 92 <div> 93 联系我们 94 <div id="i1">1</div> 95 <div id="i2">2</div> 96 </div> 97 </body> 98 </html>
3.定位布局
结合偏移属性调整元素的显示位置
1)属性: position
2)取值: 可取relative(相对定位)/absolute(绝对定位)/fixed(固定定位) 示例:postion:relative/absolute/fixed
3)偏移属性:设置定位的元素可以使用偏移属性调整距离参照物的位置
top 距参照物的顶部
right 距参照物的右侧
bottom 距参照物的底部
left 距参照物的左侧
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Title</title> 6 <style> 7 #banner{ 8 width:300px; 9 height:250px; 10 /*相对定位*/ 11 position:relative; 12 } 13 #d1{ 14 color:#fff; 15 /*绝对定位*/ 16 position:absolute; 17 height:30px; 18 right:0px; 19 /*根据参照物对应方向的值计算偏移量(250*50%)*/ 20 top:50%; 21 margin-top:-15px; 22 } 23 #d2{ 24 color:#fff; 25 /*绝对定位*/ 26 position:absolute; 27 height:30px; 28 /*根据参照物对应方向的值计算偏移量(250*50%)*/ 29 top:50%; 30 margin-top:-15px; 31 } 32 #fixed_{ 33 position:absolute; 34 width:150px; 35 top:230px; 36 color:#fff; 37 } 38 </style> 39 </head> 40 <body> 41 <div id="banner"> 42 <img src="northStar.jpg" class="c1" alt=""> 43 <a href="" id="d1">下一张</a> 44 <img src="timg.gif" class="c2" alt=""> 45 <a href="" id="d2">上一张</a> 46 </div> 47 <div id="fixed_"> 48 固定定位 49 </div> 50 </body> 51 </html>
4)分类
relative 相对定位(原来的位置占位)
元素设置相对定位,可参照元素在文档中的原始位置进行偏移,不会脱离文档流
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Title</title> 6 <style> 7 #d1,#d2{ 8 width:200px; 9 height:200px; 10 background:red; 11 margin:0 auto; 12 } 13 #d1{ 14 background:green; 15 /*相对定位,已定位的元素可以设置偏移属性,调整元素的显示位置*/ 16 position:relative; 17 /* 18 top:100px; 19 left:-100px; 20 */ 21 bottom:-100px; 22 right:100px; 23 } 24 </style> 25 </head> 26 <body> 27 <div id="d1"></div> 28 <div id="d2"></div> 29 </body> 30 </html>
absolute 绝对定位(原来的位置不占位)
1. 绝对定位的元素参照离他最近的已经定位的祖先元素进行偏移,如果没有,则参照窗口进行偏移
2. 绝对定位的元素会脱流,在文档中不占位,可以手动设置宽高 使用绝对定位 :
"父相子绝" : 父元素设置相对定位,子元素绝对定位,参照已定位的父元素偏移.
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Title</title> 6 <style> 7 #box{ 8 width:500px; 9 margin:0 auto; 10 background:orange; 11 position:relative; 12 } 13 #d1,#d2{ 14 width:200px; 15 height:200px; 16 background:red; 17 18 } 19 #d1{ 20 background:green; 21 /*绝对定位*/ 22 position:absolute; 23 top:0; 24 left:0; 25 26 } 27 body{ 28 /*设置为定位元素*/ 29 position:relative; 30 31 } 32 </style> 33 </head> 34 35 <body> 36 <div id="box"> 37 <div id="d1"></div> 38 <div id="d2"></div> 39 </div> 40 </body> 41 </html>
fixed 固定定位(不占位)
1. 参照窗口进行定位,不跟随网页滚动而滚动
2. 脱离文档流
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Title</title> 6 <style> 7 #main{ 8 height:1500px; 9 background:pink; 10 } 11 #chat{ 12 width:300px; 13 height:300px; 14 background:orange; 15 /*固定定位:脱离文档流,参照窗口偏移; 16 不跟随页面滚动而滚动*/ 17 position:fixed; 18 right:0; 19 bottom:0; 20 } 21 </style> 22 </head> 23 <body> 24 <div id="main"></div> 25 <div id="chat">千年传奇,值得你拥有,快注册吧,注册就送屠龙刀。</div> 26 </body> 27 </html>
5)堆叠次序
元素发生堆叠时可以使用 z-index 属性调整已定位元素的显示位置,值越大元素越靠上:
属性 : z-index
取值 : 无单位的数值,数值越大,越靠上
堆叠:
1. 定位元素与文档中正常元素发生堆叠,永远是已定位元素在上
2. 同为已定位元素发生堆叠,按照 HTML 代码的书写顺序,后来者居上
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Title</title> 6 <style> 7 div{ 8 width:200px; 9 height:200px; 10 background:red; 11 } 12 #d1{ 13 background:green; 14 position:relative; 15 /*只有定位元素才能使用偏移属性调位置*/ 16 /* 17 position:relative; 18 top:100px; 19 left:100px; 20 */ 21 z-index:1 22 } 23 #d2{ 24 /*永远定位元素在上*/ 25 position:relative; 26 left:100px; 27 bottom:-100px; 28 29 } 30 #d2:hover{ 31 /*调整堆叠次序,属性:z-index 32 取值为无单位的整数,值越大越靠上 33 只有定位元素能够使用z-index属性调整次序*/ 34 z-index:2; 35 } 36 37 </style> 38 </head> 39 <body> 40 <!--正常元素与定位元素发生堆叠,永远定位元素在上方显示--> 41 <!--同为定位元素发生堆叠,根据标签的书写顺序,后来者居上--> 42 <div id="d2"></div> 43 <div id="d1"></div> 44 <h1> 45 实现网页: 46 上方为导航栏(包含若干导航项,包含下拉菜单) 47 下方为轮播图区域(包含图片,图片索引,左右按钮) 48 </h1> 49 </body> 50 </html>