目录
一、颜色渐变
(一)线性渐变
(二)径向渐变
(三)重复渐变
二、过渡
三、2D属性-transform
(一)平移translate
(二)scale()
(三)改变中心点的位置:transform-origin
(四)旋转rotate()
(五)太极图
一、颜色渐变
CSS渐变(gradient)可以让你在两个或多个指定的颜色之间显示平稳的过渡。以前,你必须使用图像来实现这些效果,现在通过使用 SS3 的渐变gradients)即可实现。此外,渐变效果的元素在放大时看起来效果更好,因为渐变 (gradient) 是由浏览器生成的。
(一)线性渐变
语法: background:linear--gradient(direction,color-stop1,color-stop2,...);
background:linear-gradient(90deg,red,green)
1.支持多颜色渐变 red,green,blue...
2.支持方向, to left,... to bottom right,...
3.支持角度的写法(deg)
说明:direction:默认为 to bottom,即从上向下的渐变
stop:颜色的分布位置,默认均匀分布,例如有三个颜色,各个颜色的stop均为33.33%。
示例1: to left、 top right、 to bottom、 to top
div { background:linear-gradient(to left, red , blue) )}
div { background:linear-gradient(to right, red , blue) }
div{ background:linear-gradient(to bottom, red,blue)} /* 浏览器默认值*/
div{ background:linear-gradient(to top, red , blue) }
分别产生“从右到左”、“从左到右”、“从上到下”、“从下到上”的“红色-蓝色”渐变
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>线性渐变</title>
<style>
div{
width: 300px;
height: 300px;
border: 10px solid #ccc;
background: linear-gradient(90deg, red,green);;
}
</style>
</head>
<body>
<!--
1.支持多颜色渐变
2.支持方向:to top, to left,,,,,to bottom rignt,to top left,,,,
3.支持角度的写法
-->
<div></div>
</body>
(二)径向渐变
径向渐变不同于线性渐变,线性渐变是从“一个方向”向“另一个方向”的颜色渐变,而径向渐变是从“一个点”向四周的颜色渐变。语法:background: radial-gradient(center, shape, size, start-color, ..., last-color);说明:center: 渐变起点的位置,可以为百分比,默认是图形的正中心。
shape: 渐变的形状,ellipse表示圆形,circle表示圆形。默认为ellipse,如果元素形状为正方形的元素,则ellipse和circle显示一样。size: 渐变的大小,即渐变到哪里停止,它有四个值。
closest-side: 最近边 、farthest-side: 最远边:、closest-corner: 最近角、 farthest-corner: 最远角
background:-webkit-radial-gradient(60% 40%,farthest-corner,blue,green,yellow,black)
/*-webkit- 作用:让谷歌浏览器支持这串代码 火狐:-moz-*/
示例1:多颜色点均分布
div { background: radial-gradient(red, green, blue); }
以中心 (50% 50%) 为起点,到最远角 (farthest-corner) ,从red到green、blue的均匀渐变
EG:div { background:-webkit-radial-gradient(50% 50%, farthest-corner, red, green, blue);} 或
div { background:-webkit-radial-gradient(center,farthest-corner, red, green, blue); }
示例2:多颜色节点不均匀分布
div { background: radial-gradient(red 5%, green 15%, blue 60%); }
示例3: 设置渐变形状
div { background: radial-gradient(circle, red, yellow, green); }
div { background: radial-gradient(ellipse, red, yellow, green); )
circle: 渐变为最大的圆形; ellipse: 根据元素形状渐变,元素为正方形是显示效果与circle无异。
示例4:不同尺寸的渐变
size指定了渐变的大小,即渐变到哪里停止,它有四个值。
closest-side: 最近边、 farthest-side: 最远边、cosest-corner: 最近角;、farthest-corner: 最远角
div { background: radial-gradient(60% 40%, closest-side, blue, green, yellow, black); }
div { background: radial-gradient(60% 40%, farthest-side, blue, green, yellow, black); }
div { background: radial-gradient(60% 40%, closest-corner, blue, green, yellow, black); }
div { background: radial-gradient(60% 40%, farthest-corner, blue, green, yellow, black); }
(三)重复渐变
(1) 重复性线性渐变
div { background: repeating-linear-gradient(red, yellow 10%, green 20%); }
说明: 10%的位置为yellow,20%的位置为green,然后按照这20%向下重复。
(2)重复性径向渐变
div { background: repeating-radial-gradient(red, yellow 10%, green 20%); }
二、过渡
(一)复合属性: transition
复合属性: transition 取值: all 5s linear 3s
transition:all 2s linear 2s;
/*all 所有属性、2s 动画时间、linear 匀速、3s 延迟
除了 display:none /block 属性不会延迟,其他所有元素均会延迟*/
含义:CSs3的transiton允许CSs的性在一定的时间区间内平地过,这种效果可以在标单击、获得焦点、被点击对元素改变中发,并圆地以动回效果改变CSS的建性信
all===单一属性: | transition-property: | 检索或设置对象中的参与过渡的属性 |
5s===单一属性: | transition-duration: | 检索或设置对象过渡的持续时间 |
3s===单一属性: | transition-delay: | 检索或设置对象延迟过渡的时间 |
linear=单一属性: | transition-timing-function: | 检索或设置对象中过渡的动画类型 |
transition-property: height background;
transition-duration: 5s;
transition-timing-function: linear;
transition-delay: 3s;
简写:transition:all/具体属性值 运动时间s/ms 动画类型 延迟时间s/ms
贝塞尔曲线:属性值: cubic-bezier0贝塞尔曲线网址: http://cubic-bezier.com/ 逐动画: transition-timing-function:steps(动画执行的步数);
transition:all 2s cubic-bezier(.51,1.19,.73,.49) 1s;
三、2D属性-transform
transform: translate() rotate() scale();
先位移,后旋转缩放
(一)平移translate
transform: translate(100px,100px);
translate将元素向指定的方向移动,类似于position中的relative.
水平移动: 向右移动translate(tx,0)和向左移动translate(-tx,0);
垂直移动:向上移动translate(0,-ty)和向下移动translate(0,ty);
对角移动:右下角移动translate(tx,ty)、右上角移动translate(tx,-ty)、左上角移动translate(-tx,-ty)和左下角移动translate(-tx.ty)。
translatex():水平方向移动一个对象、对像只X轴进行移动,如果值为正值,对像向右移动;如果值为负值,对像向左移动。
tramsiatey(): 纵轴方向移动一个对象,对象只向y轴进行移动,如果值为正值,对象向下移动;如果值为负值,对像向上移动。
这两个函数和前面介绍的translate()函数不同的是每个方法只接受一个值。
所以
transform:translate(-100px,0)实际上等于transform:translatex(-100px);
transform:translate(0,-100px)实际上等于transform:translatey(-100px)。
transform设置元素移动位置和margin、position等的区别:
设置 left 属性会频繁的造成浏览器回流重排,而 transform 和 opacity 属性不会,因为它是作为合成图层发送到 GPU 上,由显卡执行的染,这样做的优化如下
- 可以通过亚像素精度得到一个运行在特殊优化过的单位图形任务上的平滑动画,并且运行非常快。
- 动画不再绑定到 CPU 重排,而是通过 GPU 合成图像。 即使运行一个非常复杂的 JavaScript任务,动画仍然会很快运行
设置left-合成图层
设置translate-独立图层
(二)scale()
transform: scale(1);
scale()让元素根据中心原点对对象进行缩放。默认的值1。因此0.01到0.99之间的任何值,使一个元素缩小,而任何大于或等于1.01的值,让元素显得更大。
缩放scale0函数和translate0函数的语法非常相似,他可以接受一个值,也可以同时接受两个值,如果只有一个值时,其第二个值默认与第一个值相等。
例如,
scale(1,1)元素不会有任何变化,而scale(2,2)[可以缩写为scale(2)]让元素沿X轴和Y轴放大两倍。
scale(-2)让元素根据中心点倒着放大两倍。
scaleX(): 相当于scale(sx,1)。表示元素只在X轴(水平方向)缩放元素,其默认值是1。
scaleY(): 相当于scale(1,sy)。表示元素只在Y轴(纵横方向) 缩放元素,其默认值是1。
(三)改变中心点的位置:transform-origin
transform-origin:center;
center(默认) | |
left top | right top |
left center | right center |
left bottom | right bottom |
(四)旋转rotate()
transform: rotate(360deg);
旋转rotate()函数通过指定的角度参数对元素根据对象原点指定一个2D旋转,它主要在二维空间内进行操作,接受一个角度值,用来指定旋转的幅度。
如果这个值为正值,元素相对原点中心顺时针旋转;
如果这个值为负值,元素相对原点中心逆时针旋转
rotate 中心 ==== rotateZ
rotateZ() 方法,元素围绕其 z 轴(垂直于眼睛所看到的页面)以给定的度数进行旋转
rotateX() 方法,元素围绕其 X 轴以给定的度数进行旋转
rotateY() 方法,元素围绕其 Y 轴以给定的度数进行旋转
(五)太极图和折扇
<style>
*{
margin: 0;
padding: 0;
}
body{
background: #0ff;
}
div{
width: 600px;
height: 600px;
margin: 50px auto;
background: linear-gradient(#fff 50%,#000 50%);
display: flex;
align-items: center;
border-radius: 50%;
transition: all 10s ease-in;
}
div:hover{
transform: rotate(7200deg);
}
div::before{
content: "";
display: block;
width: 300px;
height: 300px;
background: radial-gradient(#fff 30%,#000 35%);
border-radius: 50%;
}
div::after{
content: "";
display: block;
width: 300px;
height: 300px;
background: radial-gradient(#000 30%,#fff 35%);
border-radius: 50%;
}
ul{
list-style: none;
width: 600px;
height: 300px;
border: 3px solid #f00;
margin: 50px auto;
position: relative;
transition: all 2s;
}
ul li{
width: 60px;
height: 200px;
margin-bottom: 0;
position: absolute;
text-align: center;
left: 50%;
margin-left: -30px;
bottom: 50px;
background: #0f0;
transition: all 2s;
transform-origin: bottom center;
border-radius: 10%;
box-shadow: 8px 5px 10px;
}
ul>li:not(:nth-child(7)){
opacity: 0;
}
ul:hover>li:not(:nth-child(7)){
opacity: 1;
}
ul>li:nth-child(1),ul>li:nth-child(13){
background: #ff0;
}
ul:hover>li:nth-child(1){
transform: rotate(90deg);
}
ul:hover>li:nth-child(13){
transform: rotate(-90deg);
}
ul>li:nth-child(2),ul>li:nth-child(12){
background: #fff;
}
ul:hover>li:nth-child(2){
transform: rotate(75deg);
}
ul:hover>li:nth-child(12){
transform: rotate(-75deg);
}
ul>li:nth-child(3),ul>li:nth-child(11){
background: #44f;
}
ul:hover>li:nth-child(3){
transform: rotate(60deg);
}
ul:hover>li:nth-child(11){
transform: rotate(-60deg);
}
ul>li:nth-child(4),ul>li:nth-child(10){
background: #d9f;
}
ul:hover>li:nth-child(4){
transform: rotate(45deg);
}
ul:hover>li:nth-child(10){
transform: rotate(-45deg);
}
ul>li:nth-child(5),ul>li:nth-child(9){
background: rgb(29, 33, 73);
}
ul:hover>li:nth-child(5){
transform: rotate(30deg);
}
ul:hover>li:nth-child(9){
transform: rotate(-30deg);
}
ul>li:nth-child(6),ul>li:nth-child(8){
background: rgb(136, 20, 194);
}
ul:hover>li:nth-child(6){
transform: rotate(15deg);
}
ul:hover>li:nth-child(8){
transform: rotate(-15deg);
}
</style>
</head>
<body>
<div></div>
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<li>6</li>
<li>7</li>
<li>8</li>
<li>9</li>
<li>10</li>
<li>11</li>
<li>12</li>
<li>13</li>
</ul>
</body>