目录
CSS定位
介绍
流定位
元素的默认显示规则,块元素上下排列 行内元素水平排列 通过margin跳转元素之间的位置
浮动定位
浮动过程
-
元素浮动后脱离普通流定位,自身会释放位置,底下的元素会占用该元素的位置
-
当两个浮动元素进行左浮或右浮时,会按照先来后到,水平排列
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <style> #div1{ width: 100px; height: 100px; background-color: red; float: left; } #div2{ width: 130px; height: 130px; background-color: cadetblue; float: left; } #div3{ width: 150px; height: 150px; background-color: deeppink; clear: both; } </style> </head> <body> <div id="div1">div1</div> <div id="div2">div2</div> <div id="div3">div3</div> </body> </html>
导航栏
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <style> ol{ list-style-type: none; } ol li{ width: 80px; height: 50px; line-height: 50px; float: left; background-color: cadetblue; color: #fff; text-align: center; } ol li:hover{ background-color: darkcyan; color: cornflowerblue; cursor: pointer; } </style> </head> <body> <ol> <li>首页</li> <li>电视剧</li> <li>电影</li> <li>动漫</li> <li>综艺</li> <li>纪录片</li> </ol> </body> </html>
相对定位
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <style> #div1{ width: 100px; height: 100px; background-color: red; position: relative; left: 150px; top:30px; z-index: 10; } #div2{ width: 130px; height: 130px; background-color: cadetblue; position: relative; left: 40px; top:30px; z-index: 15; } #div3{ width: 150px; height: 150px; background-color: deeppink; position: relative; z-index: 20; } </style> </head> <body> <div id="div1">div1</div> <div id="div2">div2</div> <div id="div3">div3</div> </body> </html>
绝对定位
定位属性![](https://img-blog.csdnimg.cn/direct/e4a7817341be4748bb2d4a44e88d9fdd.png)
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <style> #div1{ width: 100px; height: 100px; background-color: red; } #div2{ width: 130px; height: 130px; background-color: cadetblue; } #div3{ width: 200px; height: 200px; background-color: deeppink; position: relative; left: 50px; } #div3 div{ width: 100px; height: 100px; border: 2px solid black; position: absolute; left: 20px; } </style> </head> <body> <div id="div1">div1</div> <div id="div2">div2</div> <div id="div3"> <div></div> </div> </body> </html>
z-index
元素都必须定位才能使用z-index
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <style type="text/css"> /* 绝对定位:释放原来的位置 */ img{ width: 150px; height: 150px; } #img1{ position: absolute; left: 50px; top:80px; z-index: 20; } #img2{ position: absolute; z-index: 30; } #img3{ position: absolute; left:90px; top:30px; z-index: 40; } </style> </head> <body> <img src="../../img/1.jpg" id="img1"> <img src="../../img/2.jpg" id="img2"> <img src="../../img/3.jpg" id="img3"> </body> </html>
父相子绝
使用绝对定位时,一般要给父级进行相对定位,子级使用绝对定位,子级位置相对于最近的已经定位的父级元素偏移
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <style type="text/css"> /* 绝对定位:释放原来的位置 */ #div1{ width: 120px; height: 120px; border: 2px solid cadetblue; position: relative; left: 180px; } #div2{ width: 120px; height: 120px; border: 2px solid red; } /*相对于div1的位置偏移 */ #div1 div{ width: 60px; height: 60px; border: 2px solid red; position: absolute; left: 20px; } </style> </head> <body> <div id="div1"> <div> </div> </div> <div id="div2"></div> </body> </html>
固定定位
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <style> div{ width: 40%; height: 600px; padding-bottom: 500px; background-color: cadetblue; } button{ position: fixed; left: 1500px; top:400px; } </style> </head> <body> <div></div> <button>回到顶部</button> </body> </html>
flex布局
2009年,W3C 提出了一种新的方案 Flex 布局,可以简便、完整、响应式地实现各种页面布局。目前,它已经得到了所有浏览器的支持,这意味着,现在就能很安全地使用这项功能。
弹性框布局模块,可以更轻松地设计灵活的响应式布局结构,而无需使用浮动或定位。
布局的传统解决方案,基于盒状模型,依赖 display属性 + position属性 + float属性。它对于那些特殊布局非常不方便,比如,垂直居中就不容易实现。
Flex是Flexible Box的缩写,意为”弹性布局”,用来为盒状模型提供最大的灵活性。
任何一个容器都可以指定为Flex布局。
基本概念
采用Flex布局的元素,称为Flex容器(flex container),简称”容器”。它的所有子元素自动成为容器成员,称为Flex项(flex item)
使用flex,必须要定义容器
定义容器![](https://img-blog.csdnimg.cn/direct/baf7b45bdfed42d78876d7cfc0a6a7c3.png)
![](https://img-blog.csdnimg.cn/direct/9bd754e103524441a1a706936d2c5bb8.png)
flex属性
以下5个属性设置在容器上。
-
flex-direction
-
justify-content
-
flex-wrap
-
flex-flow
-
align-items
flex-direction
flex-direction属性决定flex项在主轴的排列方向
.box { flex-direction: row | row-reverse | column | column-reverse; }
.container{ width: 480px; height: 480px; border: 2px solid red; display: flex;/*定义容器 子元素会按照一定规则排列,子元素默认水平排列*/ flex-direction: row; }
<div class="container"> <div id="div1"></div> <div id="div2"></div> <div></div> </div>
justify-content
justify-content属性定义了项目在主轴上的对齐方式。
.box { justify-content: flex-start | flex-end | center | space-between | space-around; }
.container{ width: 480px; height: 480px; border: 2px solid red; display: flex;/*定义容器 子元素会按照一定规则排列,子元素默认水平排列*/ flex-direction: row; justify-content: space-evenly;/*子元素均等分布*/ } <div class="container"> <div id="div1"></div> <div id="div2"></div> <div></div> </div>
align-items
align-items属性定义项目在交叉轴上如何对齐
.box { align-items: flex-start | flex-end | center | baseline | stretch; }
.container{ width: 480px; height: 480px; border: 2px solid red; display: flex;/*定义容器 子元素会按照一定规则排列,子元素默认水平排列*/ flex-direction: row; justify-content: space-evenly;/*子元素均等分布*/ align-items: center;/*子元素垂直居中*/ } <div class="container"> <div id="div1"></div> <div id="div2"></div> <div></div> </div>
flex-wrap
默认情况下,项目都排在一条线(又称”轴线”)上。
flex-wrap属性定义,如果一条轴线排不下,如何换行。
0
.box{ flex-wrap: nowrap | wrap | wrap-reverse; }
-
nowrap(默认):不换行
-
wrap:换行,第一行在上方。
-
wrap-reverse:换行,第一行在下方。
.container{ width: 480px; height: 480px; border: 2px solid red; display: flex;/*定义容器 子元素会按照一定规则排列,子元素默认水平排列*/ flex-direction: row; justify-content: space-evenly;/*子元素均等分布*/ align-items: center;/*子元素垂直居中*/ flex-wrap: wrap;/*宽度不够时自动换行*/ } <div class="container"> <div id="div1"></div> <div id="div2"></div> <div></div> </div>
间隙
通过gap属性,可以调整项目之间的距离,但是使用时需要注意,当项目有最小距离,而gap值小于最小距离时不生效
column-gap:调整列之间的距离 单位px
row-gap:调整行之间的距离 单位px
gap:10px 20px 等价于 row-gap:10px;column-gap:20px;
项目属性![](https://img-blog.csdnimg.cn/direct/ffe755b7af994fd79547ea32e9383523.png)
order
order属性定义项目的排列顺序。数值越小,排列越靠前,默认为0,可以为负数。
flex-grow
如果所有项目的flex-grow属性都为1,则它们将等分剩余空间(如果有的话)。
如果一个项目的flex-grow属性为2,其他项目都为1,则前者占据的剩余空间将比其他项多一倍。
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <style> .container{ width: 480px; height: 480px; border: 2px solid red; display: flex; } .container>div{ width: 150px; height: 150px; border: 2px solid cadetblue; box-sizing: border-box; } #div1{ flex-grow: 2; } #div2{ flex-grow: 1; } #div3{ flex-grow: 1; } </style> </head> <body> <div class="container"> <div id="div1">div1</div> <div id="div2">div2</div> <div id="div3">div3</div> </div> </body> </html>
flex-shrink
flex-shrink属性定义了项目的缩小比例,默认为1,即如果空间不足,该项目将缩小。
如果所有项目的flex-shrink属性都为1,当空间不足时,都将等比例缩小。如果一个项目的flex-shrink属性为0,其他项目都为1,则空间不足时,前者不缩小。
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <style> .container{ width: 450px; height: 450px; border: 2px solid red; display: flex; } .container>div{ width: 150px; height: 150px; border: 2px solid cadetblue; box-sizing: border-box; } #div1{ flex-shrink: 0;/*div1不缩小 其他元素等比例缩小*/ } </style> </head> <body> <div class="container"> <div id="div1">div1</div> <div id="div2">div2</div> <div id="div3">div3</div> <div id="div4">div4</div> </div> </body> </html>
align-self
align-self属性允许单个项目有与其他项目不一样的对齐方式,可覆盖align-items属性。
默认值为auto,表示继承父元素的align-items属性,如果没有父元素,则等同于stretch。
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <style> .container{ width: 450px; height: 450px; border: 2px solid red; display: flex; align-items: center; } .container>div{ width: 150px; height: 150px; border: 2px solid cadetblue; box-sizing: border-box; } #div1{ flex-shrink: 0;/*div1不缩小 其他元素等比例缩小*/ align-self: flex-start; margin-top: 30px; } #div4{ align-self: flex-start; } </style> </head> <body> <div class="container"> <div id="div1">div1</div> <div id="div2">div2</div> <div id="div3">div3</div> <div id="div4">div4</div> </div> </body> </html>
图标
使用Alibaba矢量图标库
https://www.iconfont.cn/
使用方式
点击图标添加购物车 将购物车中的图标添加至项目
引入初始的css
.icon { width: 1em; height: 1em; vertical-align: -0.15em; fill: currentColor; overflow: hidden; color:red; }
使用svg引入图标
<svg class="icon" aria-hidden="true"> <use xlink:href="#icon-iconfontapple"></use> </svg>
图标调整
使用font-size调整图标大小
.icon { width: 1em; height: 1em; vertical-align: -0.15em; fill: currentColor; overflow: hidden; color:red; font-size: 26px; }
具体使用
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <script src="//at.alicdn.com/t/c/font_4165294_mpg01q44rmg.js"></script> <style> .icon { width: 1em; height: 1em; vertical-align: -0.15em; fill: currentColor; overflow: hidden; font-size: 30px; color: red; } .one{ width: 100px; height: 50px; display: flex; align-items: center; } </style> </head> <body> <div class="one"> <svg class="icon" aria-hidden="true"> <use xlink:href="#icon-pingguo"></use> </svg> <div>苹果</div> </div> <svg class="icon" aria-hidden="true"> <use xlink:href="#icon-search-1-copy"></use> </svg> <svg class="icon" aria-hidden="true"> <use xlink:href="#icon-gouwudai"></use> </svg> </body> </html>