浮动
-
概述
float属性用于创建浮动框,将其移动到一边,知道左边缘或右边缘触及包含块或另一个浮动框的边缘。css提供了3种传统布局方式:- 普通流:网页元素按默认方式排列。
- 浮动
- 定位
<head> <style type="text/css"> .nav1 { width: 100px; height: 100px; background-color: #b18aff; float: left;/* 左浮动 */ } .nav2 { width: 100px; height: 100px; background-color: #ffbcfa; float: right;/* 右浮动 */ } </style> </head> <body> <div class="nav1">123</div> <div class="nav2">456</div> </body>
- 浮动的特性:- 浮动的盒子浮起来了所以不保留原先的位置。
- 多个盒子浮动会相互紧贴在一行并且顶端对齐,父盒子放不下会另起一行对齐。
- 任何元素浮动后都具有行内块元素特性(如果行内元素浮动了,就不需要再转为行内块/块级元素就可以设置宽高了),块级盒子原本宽度和父级相同,但浮动后宽高根据内容决定(也可以设置宽高)。
- 一般父盒子中的子盒子是一浮全浮的。浮动的盒子不会影响前面的标准流,只影响后面的标准流。
-
浮动约束
为了约束浮动的位置,网页布局一般使用标准流的父盒子进行上下位置布置,内部子元素采用浮动进行约束布局。<head> <style> .box { height: 300px; width: 650px; background-color: #ffbcfa; margin: 50px auto; } .nav { height: 80px; width: 80px; background-color: #74beff; float: left; margin-left: 10px; } </style> </head> <body> <div class="box"> <div class="nav">1</div> <div class="nav">2</div> </div> </body>
清除浮动
-
为什么需要清除浮动
由于父盒子很多情况不方便给高度,浮动的盒子不保留原来的位置,父盒子的高度就为0。会影响下面的标准流盒子。如果父盒子有高度就不需要清除浮动。- 父级没有高度
- 子盒子浮动了
- 影响了后面的标准流布局
-
概述
解决浮动后不保留原来位置带来的影响。清除浮动之后,父级会根据浮动的子盒子检测高度。父盒子有了高度就不影响下面的标准流了。清除浮动的方式 有点 缺点 额外标签法(隔墙法) 通俗易懂书、写方方便 添加无意义的标签,结构较差 父级overflow:hidden; 书写简单 溢出隐藏 父级after伪元素 结构语义正确 IE7-7不支持:after,兼容性问题 父级双为元素 结构语义正确 IE7-7不支持:after,兼容性问题 -
清除浮动 - 额外标签法
在浮动子盒子最后添加一个块级盒子给其添加一个 clear:both; 属性<head> <style type="text/css"> * { padding: 0; margin: 0; } .box { width: 900px; background-color: #b2afff; border: 1px solid #FF0000; } .nav1 { width: 300px; height: 120px; background-color: #395d93; float: left; } .nav2 { width: 300px; height: 120px; background-color: #395d93; float:right; } .clear { clear: both;/* 清除浮动 */ } p { height: 100px; background-color: #4e7e68; } </style> </head> <body> <div class="box"> <div class="nav1">1</div> <div class="nav2">2</div> <div class="clear"></div> /*添加一个堵门的盒子在最后*/ </div> <p></p> </body>
-
清除浮动 - 父级添加overflow
overflow: hidden/auto/scroll;三个值都可以<head> <meta charset="utf-8"> <title></title> <style type="text/css"> * { padding: 0; margin: 0; } .box { overflow: hidden; /*清除浮动*/ width: 900px; background-color: #b2afff; border: 1px solid #FF0000; } .nav1 { width: 300px; height: 120px; background-color: #395d93; float: left; } .nav2 { width: 300px; height: 120px; background-color: #395d93; float:right; } p { height: 100px; background-color: #4e7e68; } </style> </head> <body> <div class="box"> <div class="nav1">1</div> <div class="nav2">2</div> </div> <p></p> </body>
-
清除浮动 - .类名:after 伪元素法
<head> <style type="text/css"> * { padding: 0; margin: 0; } .clearfix:after { content: ""; display: block; height: 0; clear: both; visibility: hidden; } .clearfix { *zoom: 1; } .box { width: 900px; background-color: #b2afff; border: 1px solid #FF0000; } .nav1 { width: 300px; height: 120px; background-color: #395d93; float: left; } .nav2 { width: 300px; height: 120px; background-color: #395d93; float:right; } p { height: 100px; background-color: #4e7e68; } </style> </head> <body> <div class="box clearfix"> <div class="nav1">1</div> <div class="nav2">2</div> </div> <p></p> </body>
css的书写顺序
- 布局定位属性:display / position / float / clear / visibility / voerflow
- 自身属性:width / height / margin / padding / border / background
- 文本属性:color / font- / text- /
- 其他属性(css3):content / cursor / border-radius / box-shadow / text-shadow / background:linear-gradient…
定位
-
概述
定位将盒子定在某一个位置,由定位模式+边偏移组成。 -
定位模式
定位模式决定元素的定位方式,通过css的position属性来设置,总共有四个值:值 语义 static 静态定位 relative 相对定位 absolute 绝对定位 fixed 固定定位 -
边偏移
边偏移用于定位盒子的具体位置,有top、bottom、left、right四个属性边偏移属性 范例 描述 top top: 50px; 顶端偏移量,定义元素相对于其父元素上边线的距离 bottom bottom: 50px; 底部偏移量,定义元素相对于其父元素下边线的距离 left left: 50px; 左侧偏移量,定义元素相对于其父元素左边线的距离 right right: 50px 右侧偏移量,定义元素相对于其父元素右边线的距离 -
静态定位 - position: static
静态定位就是标准流,很少使用仅了解 -
相对定位 - position: relative
相对于该盒子原来的位置移动偏移,并且保留原来的位置。(常给绝对定位当父亲)<head> <style type="text/css"> .nav1 { position: relative; top: 80px; left: 1000px; width: 150px; height: 150px; background-color: #9f92ff; } .nav2 { width: 200px; height: 200px; background-color: #ffb2b3; } </style> </head> <body> <div class="nav1"></div> <div class="nav2"></div> </body>
-
绝对定位 - position: absolute
绝对定位根据有定位的父/祖元素进行定位。如果父/祖元素没有定位则以浏览器为准定位,而且绝对定位不再占有原先的位置。/*父级无定位*/ <head> <style type="text/css"> * { padding: 0; margin: 0; } .nav1 { margin: 50px auto; width: 100px; height: 100px; background-color: #af81ff; } .nav2 { position: absolute; top: 0px; width: 50px; height: 50px; background-color: #fff9d4; } </style> </head> <body> <div class="nav1"> <div class="nav2"></div> </div> </body>
/*父级有定位*/ <head> <style type="text/css"> * { padding: 0; margin: 0; } .nav1 { margin: 50px auto; position: relative;/*给父级加定位*/ width: 100px; height: 100px; background-color: #af81ff; } .nav2 { position: absolute; top: 0px; width: 50px; height: 50px; background-color: #fff9d4; } </style> </head> <body> <div class="nav1"> <div class="nav2"></div> </div> </body>
-
子绝父相
- 子级绝对定位,不占位置,可以放到父盒子任意位置,不影响其他兄弟盒子。
- 父盒子需要添加定位来约束绝对定位的子盒子。
- 父盒子布局需要占位置,因此父级只能是相对定位
注意:因为父级需要占有位置,所以使用相对定位,子盒子不需要占有位置,所以使用绝对定位。(并非绝对)
-
固定定位 - position: fixed
- 固定定位是元素固定于浏览器可视区域,滚动条滚动时元素位置也不会改变。
- 固定定位不占有原来的位置。
- 和父元素没有任何关系
<head> <style type="text/css"> div { position: fixed;/* 固定定位 */ top: 50px; left: 50px; width: 200px; height: 200px; background-color: #77d7ff; } </style> </head> <body> <div></div> <p>585*/你1</p> <p>585*/你2</p> <p>585*/你3</p> ...... </body>
-
粘性定位 - position: sticky
粘性定位会固定于浏览器可视窗口,但元素保留标准流中位置。当标准流位置与粘性定位不冲突时会保持标准流位置,冲突则执行粘性定位。- 元素原始位置会保留
- 以浏览器可视窗口为参照固定
- top、bottom、left、right设置至少一个才有效
<head> <style type="text/css"> .head { position: sticky;/* 设置粘性定位 */ top: 0px; width: 800px; height: 40px; background-color: #87fff5; margin: 20px auto; } </style> </head> <body> <div class="head"></div> <p>你好1</p> <p>你好2</p> <p>你好3</p> ...... </body>
-
定位叠放顺序
定位的叠放顺序可以通过 z-index: 整数; 属性来设置。数值相同根据书写顺序后来者居上。<head> <style type="text/css"> .nav1 { position: absolute; z-index: 1; /*设置叠放顺序,默认auto=0*/ width: 100px; height: 100px; background-color: #72c2ff; } .nav2 { position: absolute; top: 20px; left: 20px; width: 100px; height: 100px; background-color: #99ff59; } </style> </head> <body> <div class="nav1">1</div> <div class="nav2">2</div> </body>
注意:只有定位的盒子才有 z-index 属性。
定位拓展
-
绝对定位的盒子水平垂直居中
<head> <style type="text/css"> .nav1 { position: absolute; left: 50%; margin-left: -50px; top: 50%; margin-top: -50px; width: 100px; height: 100px; background-color: #72c2ff; } </style> </head> <body> <div class="nav1">1</div> </body>
-
定位特殊特性
元素绝对定位和固定定位后具有行内块特性:- 行内元素添加绝对定位或者固定定位,可以直接设置宽高。
- 块级元素添加绝对定位或者固定定位,不给定宽高,默认是内容大小。
-
浮动与定位
1.脱标的盒子(浮动元素、绝对/固定定位)不会触发外边距合并问题。
2.绝对/固定定位会完全压住盒子所有内容,但浮动只会压住下面标准流的盒子并不会压住盒子中的文字(图片)。
显示与隐藏
-
display属性设置元素如何显示
- display: none; 隐藏对象
- display: block; 设为快元素,显示元素
- display隐藏元素后不占有原来的位置
<head> <style type="text/css"> div { display: none;/* 隐藏 */ width: 100px; height: 100px; background-color: #69ffa5; } </style> </head> <body> <div></div> </body>
-
visibility 可见性
- visibility: hidden; 元素隐藏
- visibility: visible; 元素可见
- visibility隐藏后保留原来的位置,display隐藏后不保留原来位置
<head> <style type="text/css"> div { visibility: hidden;/* 隐藏 */ visibility: visible;/* 可见 */ width: 100px; height: 100px; background-color: #7d79ff; } p { background-color: #69FFA5; } </style> </head> <body> <div></div> <p>123</p> </body>
-
overflow 溢出
- overflow: visible; 溢出部分显示
- overflow: hidden; 溢出部分隐藏
- overflow: scroll; 溢出不溢出均有滚动条
- overflow: auto; 滚动条视内容是否溢出而出现
<head> <style type="text/css"> p { /* overflow: visible; 显示溢出部分 */ /* overflow: hidden; 隐藏溢出部分*/ /* overflow: scroll; 隐藏溢出部分并显示滚动条 */ /* overflow: auto; 隐藏溢出部分,根据内容多少显示滚动条 */ width: 50px; height: 50px; background-color: #b0c9ff; } </style> </head> <body> <p>你好程序员你好程序员你好程序员你好程序员你好程序员你好程序员 你好程序员你好程序员你好程序员你好程序员你好程序员你好程序员你好程序员 你好程序员你好程序员你好程序员你好程序员你好程序员你好程序员你好程序员</p> </body>