一、垂直对齐方式vertical-align
适用于图文排列
属性值 | 效果 |
---|---|
baseline | 基线对齐(默认) |
top | 顶部对齐 |
middle | 居中对齐 |
bottom | 底部对齐 |
代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<style>
div{
border: 1px solid #000;
}
img{
vertical-align: middle;
}
</style>
<body>
<div>
<img src="./bg.png" alt=""/>
煮饭锅
</div>
</body>
</html>
效果如下:
因为浏览器把行内块、行内标签当作文字处理,默认按基线对齐
使用后效果:图片img的底下有空白,转块级不按基线对齐,空白就消失了
二、过渡transition
作用:可以为一个元素在不同状态之间切换的时候添加过渡效果
属性名:transition
(复合属性)
属性值:过渡的属性 花费的时间(s)
代码如下:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<style>
img{
width:150px;
height: 200px;
transition: all 1s;
}
img:hover{
width: 200px;
height: 250px;
}
</style>
<body>
<div>
<img src="./bg.jpg" alt=""/>
</div>
</body>
</html>
效果如下:
前:
后:
提示: a.过渡的属性可以是具体的CSS属性 (例如:宽、高)
b.也可以为all (两个状态属性值不同的所有属性,都产生过渡效果)
c.transition
设置给元素本身
三、透明度opacity
作用:设置整个元素的透明度 (包含背景和内容)
属性值:0-1
0:完全透明 (元素不可见)
1:不透明
0-1之间小数:半透明
代码如下:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<style>
div{
background-color: pink;
width: 200px;
height: 300px;
opacity: 0.5;
}
</style>
<body>
<div>
你好前端!
</div>
</body>
</html>
效果如下:
四、光标类型 cursor
作用:鼠标悬停在元素上时指针的显示样式
属性值 | 效果 |
---|---|
default | 默认值,通常是箭头 |
pointer | 小手效果,提示用户可以点击 |
text | 工字型,提示用户可以选择文字 |
move | 十字光标,提示用户可以移动 |
五、平面转换transform
1.平面转换(2D转换)介绍
作用:为元素添加动态效果,一般与过渡配合使用
概念:改变盒子在平面内的形态 (位移、旋转、缩放、倾斜)
坐标轴分布:
magrin-left:100px
盒子向右移动
margin-right:100px
盒子向下移动
2.平面转换——平移
属性: transform:translate(x轴移动距离,y轴移动距离)
取值: a. 像素单位数值
b. 百分比 (参照盒子自身尺寸计算结果)
c. 正负均可
技巧: a. translate( )
只写一个值,表示沿着x轴移动
b. 单独设置x和y轴移动距离: translateX( )
translateY( )
代码如下:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<style>
div{
background-color: pink;
width: 200px;
height: 300px;
}
div:hover{
transform: translate(100px,50px);
}
</style>
<body>
<div>
你好前端!
</div>
</body>
</html>
效果如下:
前:
后:
3.平面转换——旋转
默认沿中心点旋转
属性:transform:rotate(旋转角度)
(角度单位是deg)
技巧:a. 取值正负均可
b. 取值为正,顺时针旋转
c. 取值为负,逆时针旋转
代码如下:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<style>
div{
background-color: pink;
width: 200px;
height: 300px;
}
div:hover{
transform: rotate(180deg);
}
</style>
<body>
<div>
你好前端!
</div>
</body>
</html>
效果如下:
前:
后:
4.平面转换——改变转换原点
默认情况下,转换原点是盒子中心点
属性:transform-origin:水平原点位置 垂直原点位置
取值: a. 方位名词 (left top bottom right center)
b. 像素单位数值
c. 百分比
代码如下:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<style>
div{
background-color: pink;
width: 200px;
height: 300px;
}
div:hover{
transform: rotate(180deg);
transform-origin: 200px 300px;
}
</style>
<body>
<div>
你好前端!
</div>
</body>
</html>
效果如下:
前:
后:
5.平面转换——多重转换
多重转换技巧:先平移再旋转 transform: translate( ) rotate( )
旋转会改变坐标轴向,所以不能先旋转再平移
6.平面转换——缩放
属性: transform:scale(缩放倍数)
transform:scale(x轴缩放倍数 y轴缩放倍数)
技巧: a. 通常,只为scale( )设置一个值,表示x轴和y轴等比例缩放
b. 取值大于1表示放大,取值小于1表示缩小
代码如下:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<style>
div{
background-color: blueviolet;
width: 200px;
height: 300px;
}
div:hover{
transform:scale(1.5);
}
</style>
<body>
<div>
</div>
</body>
</html>
效果如下:
前:
后:
7.平面转换——倾斜
属性: transform:skew( )
取值:角度度数deg (取值为正 向左倾斜;取值为负 向右倾斜)
代码如下:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<style>
div{
margin: 0 auto;
background-color: blueviolet;
width: 200px;
height: 300px;
}
div:hover{
transform:skew(20deg);
}
</style>
<body>
<div>
</div>
</body>
</html>
效果如下:
8.渐变
渐变是多个颜色逐渐变化的效果,一般用于设置盒子背景
分类:线性渐变 径向渐变
8.1线性渐变
属性:
background-image:linear-gradient(
渐变方向,
颜色1 终点位置,
颜色2 终点位置,
.........
);
取值:
a. 渐变方向:可选
- to 方位名词
- 角度度数
b.终点位置:可选
- 百分比
代码如下:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<style>
div{
margin: 0 auto;
background-image: linear-gradient( to right,
red,
green);
width: 200px;
height: 300px;
}
</style>
<body>
<div>
</div>
</body>
</html>
效果如下:
8.2径向渐变
作用:给按钮添加高光效果
属性:
background-image:radial-gradient(
半径 at 圆心位置,
颜色1 终点位置,
颜色2 终点位置
......);
取值:
a. 半径可以是2条,则为椭圆
b. 圆心位置取值:像素单位数值/百分比/方位名词
代码如下:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<style>
div{
margin: 0 auto;
background-image: radial-gradient(
30px at 100px 150px,
red,
pink
);
width: 200px;
height: 300px;
background-color: pink;
border-radius: 50%;
}
</style>
<body>
<div>
</div>
</body>
</html>
效果如下:
六、空间转换(3D转换)
1.空间转换介绍
空间:是从坐标轴角度定义的x,y,z三条坐标轴构成了一个立体空间,z轴位置与视线方向相同
坐标轴分布:
2.平移
属性:
transform:translate3d(x,y,z);
transform:translateX( );
transform:translateY( );
transform:translateZ( );
取值 (正负均可):
a. 像素单位数值
b. 百分比 (参照盒子自身尺寸计算结果)
电脑是平面,默认无法观察Z轴平移效果
3.视距 perspective
作用:指定了观察者与z=0平面的距离,为元素添加透视效果 (近大远小 近实远虚)
视距添加给直接父级 (取值范围800-1200)
代码如下:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<style>
.father{
perspective: 1000px;
}
.son{
margin: 0 auto;
width: 200px;
height: 300px;
background-color: pink;
transition: all 2s;
}
.son:hover{
transform: translateZ(-500px);
}
</style>
<body>
<div class="father">
<div class="son"></div>
</div>
</body>
</html>
效果如下:
前:
后:
4.空间——旋转
属性:
transform:rotateZ( );
(与平面一样)
transform:rotateX( );
(横着转 正后 负前)
transform:rotateY( );
(竖着转 正 右往里 负 左往里)
最好加上perspective
,效果更明显
左手法则:根据旋转方向确定取值正负
左手握住旋转轴,拇指指向正值方向,其他四个手指弯曲方向为旋转正值方向
拓展:rotate3d(x,y,z,角度度数)
:用来设置自定义旋转轴的位置及旋转角度 (x,y,z取值为0-1之间的数字)
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<style>
.father{
perspective: 1000px;
}
.son{
margin: 0 auto;
width: 200px;
height: 300px;
background-color: pink;
transition: all 2s;
}
.son:hover{
transform: rotateX(200deg);
}
</style>
<body>
<div class="father">
<div class="son"></div>
</div>
</body>
</html>
效果如下:
前:
后:
5.立体呈现transform-style
作用:设置元素的子元素是位于3D空间中还是平面中
属性值:
flat
:子级处于平面中
preserve-3d
:子级处于3D空间
立体呈现步骤:
1.父元素添加transform-style:preserve-3d;
2.子级定位
3.调整子盒子的位置 (位移或旋转)
立方体每个面都有独立的坐标轴,互不影响,旋转改变轴向
代码如下:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<style>
.father{
margin: 0 auto;
width: 200px;
height: 200px;
position: relative;
transform-style: preserve-3d;
transition: all 2s;
}
.son1{
position: absolute;
width: 200px;
height: 200px;
background-color: pink;
transform: rotateX(-90deg) translateZ(100px);
}
.son2{
position: absolute;
width: 200px;
height: 200px;
background-color: aqua;
}
.father:hover{
transform: rotateX(32deg);
}
</style>
<body>
<div class="father">
<div class="son1"></div>
<div class="son2"></div>
</div>
</body>
</html>
效果如下:
6.空间转换——缩放
属性:
transform:scale3d(x,y,z);
transform:scaleX( );
(左右缩放)
transform:scaleY( );
(上下缩放)
transform:scaleZ( );
(鼠标悬停缩放)
代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.father{
margin: 0 auto;
width: 200px;
height: 200px;
background-color: pink;
transition: all 2s;
}
.father:hover{
transform: scaleX(1.5);
}
</style>
</head>
<body>
<div class="father">
</div>
</body>
</html>
效果如下:
前:
后:
六、动画 animation
1.动画介绍
实现多个状态间的变化过程,动画过程可控 (重复播放,最终画面,是否暂停)
a. 定义动画
@keyframes 动画名称{
from{ }
to from{ }
}
@keyframes 动画名称{
0%{ }
10%{ }
.....
100%{ }
}
b. 使用动画 (改变哪个,给哪个加animation)
animation: 动画名称 动画花费时长
2.动画animation
animation:动画名称 动画时长 速度曲线 延迟时间 重复次数 动画方向 执行完毕时状态
提示:
a. 动画名称和动画时长必须赋值
b. 取值不分先后顺序
c. 如果有两个时间值 第一个时间值表示动画时长 第二个时间值表示延迟时间
速度曲线:
linear
:匀速
steps
:分步动画 (配合精灵图使用)
动画方向:
alternate
:反向
重复次数:
infinite
:一直播放
执行完毕时的状态:
forwards
:停在结束状态
属性 | 作用 | 取值 |
---|---|---|
animation-name | 动画名称 | |
animation-duration | 动画时长 | |
animation-delay | 延迟时间 | |
animation-fill-mode | 动画执行完毕时状态 | forwards :最后一帧状态 backwards :第一帧状态 |
animation-timing-function | 速度曲线 | steps(数字) :逐帧动画 |
animation-iteration-count | 重复次数 | infinite :无限循环 |
animation-direction | 动画执行方向 | alternate :反向 |
animation-play-state | 暂停动画 | paused :暂停 (通常配合:hover使用) |
无缝动画原理:复制开头图片到结尾位置 (图片累加宽度=区域宽度)
3.逐帧动画
属性: animation-timing-function
取值: steps(数字)
:逐帧动画
精灵动画制作步骤:
1.准备显示区域
盒子尺寸大小与一张精灵小图尺寸相同
2.定义动画
移动背景图 (移动距离=精灵图宽度)
3.使用动画
steps(N) N与精灵小图个数相同
4.多组动画
animation:
动画1,
动画2,
动画N
;
优化:当动画的开始状态样式和盒子默认样式相同,可以省略动画开始状态的代码
七、移动适配
1.屏幕分辨率
屏幕分辨率:纵横向上的像素点数,单位是px
a. 硬件分辨率——>物理分辨率 (出厂设置)
b. 缩放调节的分辨率——>逻辑分辨率 (软件/驱动设置)
2.视口
手机屏幕尺寸不同,网页宽度均为100%
网页的宽度和逻辑分辨率尺寸相同
**视口:**显示html网页的区域,用来约束html尺寸
width=device—width:视口宽度=设备宽度
initial—scale=1.0:缩放1倍 (不缩放)
3.rem
3.1rem适配
a. rem单位,是相对单位
b. rem单位是相对于html标签的字号计算结果
c. 1rem=1html字号大小
代码如下:
html{
font-size:30px;
}
.box{
width:5rem;
height:3rem;
}
3.2媒体查询
媒体查询能够检测视口的宽度,然后编写差异化的css样式
当某个条件成立,执行对应的CSS样式
代码如下:
@media (媒体特性){
选择器{
CSS属性
}
}
样例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
@media (width:375px){
body{
background-color: green;
}
}
</style>
</head>
<body>
</body>
</html>
效果如下:
3.3rem布局
目前rem布局方案中,将网页等分成10份,HTML标签的字号为视口宽度的1/10
例如:
@media (width:320px){
html{
font-size:32px;
}
}
3.4rem-flexible.js
flexible.js 是手淘开发的一个用来适配移动端的js库,核心原理就是根据不同的视口宽度给网页中HTML根节点设置不同的font-size
代码如下:
<body>
......
<script src="./js/flexible.js"></script>
</body>
3.5rem单位尺寸
rem单位的尺寸=px单位数值 / 基准根字号
4.less
4.1 less—简介
Less是一个CSS预处理器,less文件后缀是.less,扩充了CSS语言,使CSS具备一定的逻辑性、计算能力
注意:浏览器不识别Less代码,目前阶段,网页要引入对应的CSS文件
4.2 less—运算
运算:
a. 加、减、乘直接书写计算表达式
b. 除法需要添加小括号或 .
代码如下:
.box{
width: 100+60px;
height: 300-70px;
width: 20*60px;
height: (300/10px);
}
4.3 less—嵌套
作用:快速生成后代选择器
& 表示的是当前选择器,代码写到谁的大括号里面就表示谁,不会生成后代选择器
代码如下:
.father{
color: red;
.son{
color: blue;
a{
color: green;
&:hover{
color: aquamarine;
}
}
}
}
对应CSS:
.father {
color: red;
}
.father .son {
color: blue;
}
.father .son a {
color: green;
}
.father .son a:hover {
color: aquamarine;
}
4.4 less—变量
概念:容器,存储数据
作用:存储数据,方便使用和修改
语法:
a. 定义变量:
@变量名:数据;
b.使用变量
css属性:@变量名
代码如下:
@myColor :pink;
.box{
color: @myColor;
}
a{
color: @myColor;
}
对应css:
.box {
color: pink;
}
a {
color: pink;
}
4.5 less—导入
作用:导入less公共样式文件
语法:导入:@import“文件路径”
提示:如果是less文件可以省略后缀
@import“./base.less”
@import"./common"
4.6 less—导出
写法:在less文件的第一行添加//out:存储URL
提示:文件夹名称后面添加/
//out:./index.css
//out:./css/
4.7 less—禁止导出
写法:在less文件第一行添加//out:false
5.vw
5.1介绍
a. 相对单位
b. 相对视口的尺寸计算结果
vw:viewport width (1vw=1/100视口宽度)
vh:viewport height (1vh=1/100视口高度)
vw和vh是相对视口宽高计算结果,可以直接实现移动端适配效果
5.2布局
vw单位的尺寸=px单位数值 / (1/100)视口宽度
5.3vh单位问题
开发中,不能把vw和vh混用
**vh是1 / 100视口高度,全面屏视口高尺寸大,如果混用可能会导致盒子变形