渐变:
- 线性渐变(Linear-Gradients)-向上,向下,向左,向右,对角
- 径向渐变(Radial-Gradients)-由中心定义
线性渐变:
默认情况下从上到下background-image:linear-gradient(direction,color1,color2,...)
#grad1 { height: 200px; background-color: red; /* 浏览器不支持时显示 */ background-image: linear-gradient(#e66465, #9198e5); }
从左到右
对角#grad { height: 200px; background-image: linear-gradient(to right, red , yellow); }
使用角度:#grad { height: 200px; background-image: linear-gradient(to bottom right, red, yellow); }
0deg 将创建一个从下到上的渐变,90deg 将创建一个从左到右的渐变 ```cssgrad1 {
height: 100px; background-color: red; / 浏览器不支持的时候显示 / background-image: linear-gradient(0deg, red, yellow); }
grad2 {
height: 100px; background-color: red; / 浏览器不支持的时候显示 / background-image: linear-gradient(90deg, red, yellow); }
grad3 {
height: 100px; background-color: red; / 浏览器不支持的时候显示 / background-image: linear-gradient(180deg, red, yellow); }
grad4 {
height: 100px; background-color: red; / 浏览器不支持的时候显示 / background-image: linear-gradient(-90deg, red, yellow); }
<br /><br />**多颜色节点:**
//均匀分布 background-image: linear-gradient(red, green, blue); //自定义分布 background-image: linear-gradient(red 10%, green 85%, blue 90%);
<br />**使用透明度:**
background-image: linear-gradient(to right, rgba(255,0,0,0), rgba(255,0,0,1));
**重复的线性渐变:**
background-image: repeating-linear-gradient(red, yellow 10%, green 20%);
<a name="L3VlA"></a>
### 径向渐变:
background-image:radial-gradient(shape size at position,start color,….,last color)
**均匀分布:**
background-image: radial-gradient(red, yellow, green);
<br />不均匀分布:
background-image: radial-gradient(red 5%, yellow 15%, green 60%);
<br />**设置形状:**
//默认椭圆 background-image: radial-gradient(red, yellow, green); //圆形 background-image: radial-gradient(circle, red, yellow, green);
<br />**重复的径向渐变:**
background-image: repeating-radial-gradient(red, yellow 10%, green 15%);
<a name="rgqiD"></a>
## 转换:
CSS3 转换可以对元素进行移动、缩放、转动、拉长或拉伸,改变元素的大小,形状和位置;
<a name="v33Ek"></a>
### 2D转换:
<a name="HEllx"></a>
#### translate()
根据左(X轴)和顶部(Y轴)位置给定的参数,从当前元素位置移动。
```css
div{
width:100px;
height:75px;
background-color:red;
border:1px solid black;
}
div#div2{
transform:translate(50px,100px);
-ms-transform:translate(50px,100px); /* IE 9 */
-webkit-transform:translate(50px,100px); /* Safari and Chrome */
}
rotate()
一个给定度数顺时针旋转的元素。负值是允许的,这样是元素逆时针旋转。
div{
width:100px;
height:75px;
background-color:red;
border:1px solid black;
}
div#div2{
transform:rotate(30deg);
-ms-transform:rotate(30deg); /* IE 9 */
-webkit-transform:rotate(30deg); /* Safari and Chrome */
}
scale()
该元素增加或减少的大小,取决于宽度(X轴)和高度(Y轴)的参数:
div {
margin: 150px;
width: 200px;
height: 100px;
background-color: yellow;
border: 1px solid black;
border: 1px solid black;
-ms-transform: scale(2,3); /* IE 9 */
-webkit-transform: scale(2,3); /* Safari */
transform: scale(2,3); /* 标准语法 */
}
skew()
包含两个参数值,分别表示X轴和Y轴倾斜的角度,如果第二个参数为空,则默认为0,参数为负表示向相反方向倾斜。
- skewX(
);表示只在X轴(水平方向)倾斜。 skewY(
);表示只在Y轴(垂直方向)倾斜。 div{ width:100px; height:75px; background-color:red; border:1px solid black; } div#div2{ transform:skew(30deg,20deg); -ms-transform:skew(30deg,20deg); /* IE 9 */ -webkit-transform:skew(30deg,20deg); /* Safari and Chrome */ }matrix()
matrix 方法有六个参数,包含旋转,缩放,移动(平移)和倾斜功能。
div{ transform:matrix(0.866,0.5,-0.5,0.866,0,0); -ms-transform:matrix(0.866,0.5,-0.5,0.866,0,0); /* IE 9 */ -webkit-transform:matrix(0.866,0.5,-0.5,0.866,0,0); /* Safari and Chrome */ }3D转换:
rotateX()
围绕其在一个给定度数X轴旋转的元素。
div{ width:100px; height:75px; background-color:red; border:1px solid black; } div#div2{ transform:rotateX(95deg); -webkit-transform:rotateX(95deg); /* Safari and Chrome */ }rotateY()
围绕其在一个给定度数Y轴旋转的元素。
div{ width:100px; height:75px; background-color:red; border:1px solid black; } div#div2{ transform:rotateY(130deg); -webkit-transform:rotateY(130deg); /* Safari and Chrome */ }

perspective定义:3D 元素距视图的距离,以像素计;
景深,也称为透视,视角,取决于你看到的是2D还是3D
设置元素被查看位置的视角,3D立体效果
1)属性值:像素
2)给3D元素父级添加景深,不会出现梯形效果,近大远小的效果
3)给3D元素添加景深,会出现梯形效果
当为元素定义 perspective 属性时,其子元素会获得透视效果,而不是元素本身。perspective: 600px;translateZ:
perspective-origin:
perspective-origin: x-axis y-axis;x-axis:定义该视图在 x 轴上的位置。默认值:50%。
y-axis:定义该视图在 y 轴上的位置。默认值:50%。
transform-style: preserve-3d
backface-visibility
现实生活中,无法穿透物体看到物体背后的物体,所以一般隐藏背后的元素。
backface-visibility:hidden;例子:旋转木马图片
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>3d旋转图集</title> <style> main{ position: relative; width: 100vw; height: 100vh; background-color: #fff; //加景深 perspective: 900px; } div{ position:absolute; left: 50%; top:30%; width: 190px; height: 300px; //添加3D效果 transform-style: preserve-3d; //动画 animation:xuanzhuan linear 10s infinite } /* 设置图片的大小 */ div img{ position: absolute; width: 190px; height: 300px; } img:nth-child(1) { transform: rotateY( 0deg ) translateZ(300px); } img:nth-child(2) { transform: rotateY( 40deg ) translateZ(300px);} img:nth-child(3) { transform: rotateY( 80deg ) translateZ(300px);} img:nth-child(4) { transform: rotateY( 120deg ) translateZ(300px);} img:nth-child(5) { transform: rotateY( 160deg ) translateZ(300px);} img:nth-child(6) { transform: rotateY( 200deg ) translateZ(300px);} img:nth-child(7) { transform: rotateY( 240deg ) translateZ(300px);} img:nth-child(8) { transform: rotateY( 280deg ) translateZ(300px);} img:nth-child(9) { transform: rotateY( 320deg ) translateZ(300px);} @keyframes xuanzhuan { from{transform: rotateY(0deg)} to{transform: rotateY(360deg)} } </style> </head> <body> <main> <div> <img src="./assets/1.jpg" alt=""> <img src="./assets/2.jpg" alt=""> <img src="./assets/3.jpg" alt=""> <img src="./assets/4.jpg" alt=""> <img src="./assets/5.jpg" alt=""> <img src="./assets/6.jpg" alt=""> <img src="./assets/7.jpg" alt=""> <img src="./assets/8.jpg" alt=""> <img src="./assets/9.jpg" alt=""> </div> </main> </body> </html>
如何计算translateZ:
九张图:360/9=40,也就是每张图要旋转40deg;
如图所示,如果只定义rotateY,九张图片会挤在一起,完全体现不出效果,所以要让每张图片往外跨出一步,这一步的值如何计算呢:
按照这个逻辑,上面例子中每张图片宽度是190px,translateZ为233.5
则每张图片至少要向外侧走233.5px,结合实际,留出空隙,选择300px
例子:开门
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>开门</title>
<style>
div{
perspective: 1200px;
transform-style: preserve-3d;
backface-visibility: hidden;
}
img{
width:300px;
height:450px;
transform: rotateY(0deg);
transform-origin: left;
transition: all 2s;
}
img:hover{
transform: rotateY(-90deg);
}
</style>
</head>
<body>
<div>
<img src="./assets/2.jpg" alt="">
</div>
</body>
</html>
过渡:
元素从一种样式逐渐改变为另一种的效果。
- 指定要添加效果的CSS属性
- 指定效果的持续时间。 ```css div{ width:100px; height:100px; background:red; transition:width 2s; -webkit-transition:width 2s; / Safari / }
div:hover{ width:300px; }
鼠标移动到元素上,2s时间内,宽度从100px过渡到300px;
//多项改变 transition: width 2s, height 2s, transform 2s;
```css
div{
//属性名称
transition-property: width;
//持续时间
transition-duration: 1s;
//规定过渡效果的时间曲线。默认是 "ease"。
transition-timing-function: linear;
//延时时间
transition-delay: 2s;
/* Safari */
-webkit-transition-property:width;
-webkit-transition-duration:1s;
-webkit-transition-timing-function:linear;
-webkit-transition-delay:2s;
}
//简写
transition: width 1s linear 2s;
| 值 | 描述 |
|---|---|
| linear | 规定以相同速度开始至结束的过渡效果(等于 cubic-bezier(0,0,1,1))。 |
| ease | 规定慢速开始,然后变快,然后慢速结束的过渡效果(cubic-bezier(0.25,0.1,0.25,1))。 |
| ease-in | 规定以慢速开始的过渡效果(等于 cubic-bezier(0.42,0,1,1))。 |
| ease-out | 规定以慢速结束的过渡效果(等于 cubic-bezier(0,0,0.58,1))。 |
| ease-in-out | 规定以慢速开始和结束的过渡效果(等于 cubic-bezier(0.42,0,0.58,1))。 |
| cubic-bezier(n,n,n,n) | 在 cubic-bezier 函数中定义自己的值。可能的值是 0 至 1 之间的数值。 |
动画:
@keyframes myfirst{
from {background: red;}
to {background: yellow;}
}
myfirst是动画名称
注意:必须定义动画的名称和动画的持续时间
div{
width:100px;
height:100px;
background:red;
animation:myfirst 5s;
-webkit-animation:myfirst 5s; /* Safari and Chrome */
}
@keyframes myfirst{
from {background:red;}
to {background:yellow;}
}
@-webkit-keyframes myfirst /* Safari and Chrome */{
from {background:red;}
to {background:yellow;}
}
或者:
@keyframes myfirst{
0% {background: red; left:0px; top:0px;}
25% {background: yellow; left:200px; top:0px;}
50% {background: blue; left:200px; top:200px;}
75% {background: green; left:0px; top:200px;}
100% {background: red; left:0px; top:0px;}
}
animation属性:
div{
//动画的名称
animation-name: myfirst;
//动画持续时间
animation-duration: 5s;
//规定动画的速度曲线,默认是 "ease"。
animation-timing-function: linear;
//延时
animation-delay: 2s;
//规定动画被播放的次数,默认是 1
animation-iteration-count: infinite;
//规定动画是否在下一周期逆向地播放,默认是 "normal"
animation-direction: normal;
//规定动画是否正在运行或暂停,默认是 "running"
animation-play-state: running;
}
//简写
animation: myfirst 5s linear 2s infinite normal;
多媒体查询:
@media not|only mediatype and (expressions) {
CSS 代码...;
}
- not: not是用来排除掉某些特定的设备的,比如 @media not print(非打印设备)。
- only: 用来定某种特别的媒体类型。
- all: 所有设备 ```css body { background-color: pink; }
@media screen and (max-width: 480px) { body { background-color: lightgreen; } }
如果媒体类型屏幕的可视窗口宽度小于 480 px ,背景颜色将改变。
```css
@media screen and (max-width: 1000px) and (min-width: 700px) {
ul li a:before {
content: "Email: ";
font-style: italic;
color: #666666;
}
}
Css、Scss、Sass和Less(大概了解)
Sass/Scss、Less是什么?
Sass (Syntactically Awesome Stylesheets)是一种动态样式语言,比css比多出好些功能(如变量、嵌套、运算,混入(Mixin)、继承、颜色处理,函数等),更容易阅读。
Sass的缩排语法,对于写惯css前端的web开发者来说很不直观,也不能将css代码加入到Sass里面,因此sass语法进行了改良,Sass 3就变成了Scss(sassy css)。与原来的语法兼容,只是用{}取代了原来的缩进。
Less也是一种动态样式语言. 对CSS赋予了动态语言的特性,如变量,继承,运算, 函数.
Sass/Scss与Less区别:
变量符不一样,Less是@,而Scss是$,而且变量的作用域也不一样
Less
@color: #00c; /* 蓝色 */
#header {
@color: #c00; /* red */
border: 1px solid @color; /* 红色边框 */
}
#footer {
border: 1px solid @color; /* 蓝色边框 */
}
Less-作用域编译后
#header{border:1px solid #cc0000;}
#footer{border:1px solid #0000cc;}
scss
$color: #00c; /* 蓝色 */
#header {
$color: #c00; /* red */
border: 1px solid $color; /* 红色边框 */
}
#footer {
border: 1px solid $color; /* 蓝色边框 */
}
Sass-作用域编译后
#header{border:1px solid #c00}
#footer{border:1px solid #c00}
Sass支持条件语句,可以使用if{}else{},for{}循环等等。而Less不支持。
/* Sample Sass “if” statement */
@if lightness($color) > 30% {
} @else {
}
/* Sample Sass “for” loop */
@for $i from 1 to 10 {
.border-#{$i} {
border: #{$i}px solid blue;
}
}
SCSS:
https://www.yuque.com/cuggz/feplus/nste42#7e7ebbb2
跑马灯:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style type="text/css">
* {
margin: 0;
padding: 0;
}
.content-left {
display: flex;
margin-top: 20px;
animation: paomadengLeft 30s linear 3s infinite;
}
.content-right {
display: flex;
margin-top: 20px;
animation: paomadengright 30s linear 3s infinite;
}
.content-item {
width: 300px;
height: 450px;
margin: 0 20px;
}
@keyframes paomadengLeft {
from {
transform: translateX(0);
}
to {
transform: translateX(-100%);
}
}
@keyframes paomadengright {
from {
transform: translateX(-100%);
}
to {
transform: translateX(0);
}
}
</style>
</head>
<body>
<div style="display: flex">
<div class="content-left">
<img src="./assets/1.jpg" class="content-item"/>
<img src="./assets/2.jpg" class="content-item"/>
<img src="./assets/3.jpg" class="content-item"/>
<img src="./assets/4.jpg" class="content-item"/>
<img src="./assets/5.jpg" class="content-item"/>
<img src="./assets/6.jpg" class="content-item"/>
<img src="./assets/7.jpg" class="content-item"/>
<img src="./assets/8.jpg" class="content-item"/>
<img src="./assets/9.jpg" class="content-item"/>
</div>
<div class="content-left">
<img src="./assets/1.jpg" class="content-item"/>
<img src="./assets/2.jpg" class="content-item"/>
<img src="./assets/3.jpg" class="content-item"/>
<img src="./assets/4.jpg" class="content-item"/>
<img src="./assets/5.jpg" class="content-item"/>
<img src="./assets/6.jpg" class="content-item"/>
<img src="./assets/7.jpg" class="content-item"/>
<img src="./assets/8.jpg" class="content-item"/>
<img src="./assets/9.jpg" class="content-item"/>
</div>
</div>
<div style="display: flex">
<div class="content-right">
<img src="./assets/1.jpg" class="content-item"/>
<img src="./assets/2.jpg" class="content-item"/>
<img src="./assets/3.jpg" class="content-item"/>
<img src="./assets/4.jpg" class="content-item"/>
<img src="./assets/5.jpg" class="content-item"/>
<img src="./assets/6.jpg" class="content-item"/>
<img src="./assets/7.jpg" class="content-item"/>
<img src="./assets/8.jpg" class="content-item"/>
<img src="./assets/9.jpg" class="content-item"/>
</div>
<div class="content-right">
<img src="./assets/1.jpg" class="content-item"/>
<img src="./assets/2.jpg" class="content-item"/>
<img src="./assets/3.jpg" class="content-item"/>
<img src="./assets/4.jpg" class="content-item"/>
<img src="./assets/5.jpg" class="content-item"/>
<img src="./assets/6.jpg" class="content-item"/>
<img src="./assets/7.jpg" class="content-item"/>
<img src="./assets/8.jpg" class="content-item"/>
<img src="./assets/9.jpg" class="content-item"/>
</div>
</div>
</body>
</html>
无限滚动:
例子,项目中工作室动态
定时器消耗性能,采用css动画实现
/* 无限滚动 */
.infinite-y{
animation: infinitevertical 30s linear infinite;
&:hover {
animation-play-state: paused;
}
}
.infinite-x{
animation: infinitehorizontal 30s linear infinite;
&:hover {
animation-play-state: paused;
}
}
/* 无限滚动垂直 */
@keyframes infinitevertical {
0% {
transform: translateY(0%);
}
100% {
transform: translateY(-50%);
}
}
/* 无限滚动水平 */
@keyframes infinitehorizontal {
0% {
transform: translateX(0%);
}
100% {
transform: translateX(-50%);
}
}
var():
用于插入自定义的属性值,如果一个属性值在多处被使用,该方法就很有用;
语法:
var(custom-property-name, value)
custom-property-name自定义的属性值,必须以”—“开头;
:root {
--main-bg-color: coral;
--main-txt-color: blue;
--main-padding: 15px;
}
#div1 {
background-color: var(--main-bg-color);
color: var(--main-txt-color);
padding: var(--main-padding);
}
#div2 {
background-color: var(--main-bg-color);
color: var(--main-txt-color);
padding: var(--main-padding);
}
@mixin 与 @include
@mixin 指令允许我们定义一个可以在整个样式表中重复使用的样式。
@include 指令可以将混入(mixin)引入到文档中。
@mixin important-text {
color: red;
font-size: 25px;
font-weight: bold;
border: 1px solid blue;
}
创建了一个名为important-text的混入
.danger {
@include important-text;
background-color: green;
}
@include 指令可用于包含混入
所以上面的例子等于
.danger {
color: red;
font-size: 25px;
font-weight: bold;
border: 1px solid blue;
background-color: green;
}

