Border radius - 允许我们为元素创建圆角。
Border images - 允许我们指定一个图像作为元素周围的边框。
Multiple backgrounds - 将多个背景应用于元素。
动画(Animations)和特效(effects)…
为了使Web开发更加简单快捷,CSS3引入了更多的新功能,其中包括:
Box Shadow (盒阴影)
使用box-shadow属性,可以通过指定颜色,大小,模糊和偏移值来将一个或多个阴影附加到元素。
Gradients (渐变)
CSS3渐变允许我们将元素的背景颜色设置为渐变。 有两种类型的渐变可用:线性(Linear)和径向(Radial)。
CSS3:新功能
转换(transform) :通过CSS3转换,我们可以移动,比例化,反过来,旋转,和拉伸元素。
动画(animation) :CSS3中我们可以创建动画,它可以取代许多网页动画图像,Flash动画,和JAVAScripts。
转换(transform)可以通过改变元素的属性来实现一些动画的效果
通过添加前缀,能使CSS样式在不受支持的浏览器中生效。有时候为了兼容更多的浏览器,你可能需要对同一个样式属性进行重复定义增加不同的前缀。
CSS3前缀用于区分并兼容各大主流浏览器对于CSS新功能的支持。
例如,Safari和Chrome的前缀是-webkit。 Chrome,Safari和Mozilla目前支持border-radius属性,只要它带有浏览器前缀即可生效。
要在Chrome和Safari中指定边框半径,请使用以下语法:
HTML代码:
CSS代码:
div {
border :1px solid green;
-webkit-border-radius: 24px;
}
Browser | Vendor Prefix |
---|---|
Firefox | -moz- |
Safari | -webkit- |
Chrome | -webkit- |
Opera | -o- |
Internet Explorer | -ms |
border-radius属性
通过border-radius属性可以给任何元素设置“圆角”。
HTML代码:
CSS代码:
div {
border-radius: 20px;
background-color: green;
color: white;
}
执行结果:
border-radius的属性可以通过(左上角,右上角,右下角,左下角)的顺序进行设置。
CSS代码:
border-radius: 0 0 20px 20px;
执行结果:
border-radius的属性值也可以是百分比。
通过border-radius创建一个圆形
通过将元素的border-radius设置成元素高度以及宽度的一半可以将元素变成圆形。
示例中矩形元素的宽度和高度均为300px。通过将border-radius设置为150px,矩形元素将变成圆形。
HTML代码:
CSS代码:
div {
width: 200px;
height: 200px;
border-radius: 100px;
background-color: green;
color: white;
text-align: center;
}
执行结果:
box-shadow属性
box-shadow属性可以为元素增加阴影效果。
box-shadow的属性介绍(使用的时候必须按顺序设置)
box-shadow: h-shadow v-shadow blur spread color inset;
值 描述
h-shadow 必需。水平阴影的位置。允许负值。
v-shadow 必需。垂直阴影的位置。允许负值。
blur 可选。模糊距离。
spread 可选。阴影的尺寸。
color 可选。阴影的颜色。请参阅 CSS 颜色值。
inset 可选。将外部阴影 (outset) 改为内部阴影。
HTML代码:
CSS代码:
div {
width: 300px;
height: 100px;
background-color: #9ACD32;
box-shadow: 10px 10px #888888;
}
执行结果:
创建一个内阴影
通过设置box-shadow的inset属性可以设置内阴影。
CSS代码:
box-shadow: inset 10px 10px 5px #888888;
执行结果:
您可以通过用逗号分隔每个阴影来同时创建内部(inset)和外部(默认为外部)阴影。
box-shadow: inset 10px 10px 5px #888888, 10px 10px 5px #888888;
如何设置多个阴影
可以通过在同一个规则中使用 “,”(逗号) 来定义多个阴影。
下例中我们将通过逗号创建两个阴影。
CSS代码:
box-shadow: inset 15px 15px 5px #ddd, inset -15px -15px 5px #ddd;
执行结果:
如果我们设置了多个阴影值,这些阴影的层叠层次将会按设置的顺序排放,所以最后一个设置的阴影将会在之前所有阴影的后面。
CSS代码:
box-shadow: 0 0 10px 4px #FF6347,
0 0 10px 30px #FFDAB9,
30px 0 20px 30px #B0E0E6;
执行结果:
上例中蓝色阴影(#B0E0E6)放置于所有阴影的后面。
透明效果
CSS3中可以通过设置RGBA来实现透明效果。
RGBA在RGB的基础上加入了Alpha通道,通过设置Alpha值可以实现透明的效果。
rgba(255, 255, 255, 0)
R:红色值。正整数 | 百分数
G:绿色值。正整数 | 百分数
B:蓝色值。正整数| 百分数
A:透明度。取值0~1之间
HTML代码:
CSS代码:
body {
background:url(“https://www.w3cschool.cn/attachments/image/20180125/1516870677823170.jpg”);
}
nav {
padding: 50px 0;
min-width: 500px;
}
nav ul {
background: linear-gradient(90deg,
rgba(255, 255, 255, 0) 0%,
rgba(255, 255, 255, 0.2) 25%,
rgba(255, 255, 255, 0.2) 75%,
rgba(255, 255, 255, 0) 100%);
box-shadow: 0 0 25px rgba(0, 0, 0, 0.1),
inset 0 0 1px rgba(255, 255, 255, 0.6);
}
nav ul li {
display: inline-block;
}
nav ul li a {
padding: 10px;
color: #FFFFFF;
font-size: 18px;
font-family: Arial;
text-decoration: none;
display: block;
}
执行结果:
text-shadow属性
text-shadow属性定义一个或多个以逗号分隔的阴影效果,应用于当前元素的文本内容。
下图显示了如何应用text-shadow属性:
- 对于CSS文本阴影属性,offset-x和offset-y值是必需的。
- color值不是必需的,但由于文本阴影的默认值是透明的,除非指定颜色值,否则不会显示文本阴影。
如何设置多个文本阴影效果
text-shadow样式可以通过 “,” (逗号)分割同时创建多个阴影。
在CSS3中越先定义的阴影效果会被放置在越顶层,反之则相反。
下例为我们展示如何通过逗号创建多个阴影。
HTML代码:
CSS代码:
h1 {
text-shadow: 5px 10px 2px #93968f,
-3px 6px 5px #58d1e3;
}
执行结果:
如何使用伪类
CSS3中的伪类允许我们在不适用javascript等脚本的情况下去设置web页面中某些特定的元素的属性。
伪类通常以 “:”(冒号)开头。:first-child和:last-child是较为常用的伪类。
:first-child将会匹配该元素中的第一个子元素。
:last-child则反之,匹配最后一个子元素。
HTML代码:
First w3cschool
Second W3cschool
Third w3cSchool
Fourth W3cSchool
CSS代码:
#parent p:first-child {
color: green;
text-decoration: underline;
}
执行结果:
反之同理 :last-child则是选取最后一个元素。
如何使用伪元素
伪元素用于选择元素的特定部分。
在CSS中有五个伪元素,每个都以一个双冒号(::)开头:
::first-line- 选择器中文本的第一行
::first-letter - 选择器中文本的第一个字母
::selection - 选择用户选择的元素部分
::before - 在元素之前插入一些内容
::after - 在元素之后插入一些内容
在下面的例子中,::first-line伪元素用于为文本的第一行设置样式。
HTML代码:
First w3cschool
Second W3cschool
Third w3cSchool
Fourth W3cSchool
CSS代码:
p::first-line {
color: #AE4141;
}
执行结果:
::selection 伪元素对选定的文本进行设置样式。
CSS代码:
p::selection{
background: #AE4141;
color: #fff;
}
p::-moz-selection{
background: #AE4141;
color: #fff;
}
执行结果:
使用-moz-前缀,因为Mozilla不支持:: selection元素。
如何使用伪元素
使用::before和::after伪元素允许我们向页面添加各种各样的内容。
在下面的例子中,::before伪元素用于在列表之前添加图像。
HTML代码:
First w3cschool
Second W3cschool
Third w3cSchool
Fourth W3cSchool
CSS代码:
p::before {
content: url(“http://statics.w3cschool.cn/images/w3c/index-logo.png”);
}
执行结果:
请注意样式中的content关键字
反之同理,::after则会在末尾增加样式
word-wrap属性
word-wrap属性允许对长单词进行自动换行处理。
它的值可以为:
normal
break-word
HTML代码:
Firstw3cschool,SecondW3cschool,Thirdw3cSchool,FourthW3cSchool
CSS代码:
p {
width: 100px;
height: 100px;
border: 1px solid #000000;
word-wrap: normal;
}
执行结果:
接下来我们将word-wrap的属性设置为break-word,然后再看一下效果。
CSS代码:
p {
width: 100px;
height: 150px;
border: 1px solid #000000;
word-wrap: break-word;
}
执行结果:
@font-face 规则
@ font-face规则允许将自定义字体加载到网页中。
借助于此规则,设计不再局限于安装在用户计算机上的字体。
在Internet Explorer 8和更低版本中,URL必须指向Embedded OpenType(eot)文件,而Firefox,Chrome等支持True Type字体(ttf)字体和OpenType字体(otf)。
使用@font-face规则
必须使用@font-face规则声明每种形式的字体系列。
在下面的例子中,一个名为“Delicious”的自定义字体被加载并用于标题。
HTML代码:
CSS代码:
@font-face {
font-family: Delicious;
src: url(‘Delicious-Roman.otf’);
}
@font-face {
font-family: Delicious;
font-weight: bold;
src: url(‘Delicious-Bold.otf’);
}
h1{
font-family: Delicious, sans-serif;
}
当定义了多个@font-face规则时,Internet Explorer有一个内置的错误。 如下所示使用#iefix修复了这个问题:
@font-face {
font-family: Delicious;
src: url(‘Delicious-Roman.ttf’);
src: url(‘Delicious-Roman.eot?#iefix’);
}
执行结果:
创建线性渐变
CSS3渐变(linear-gradient)使您能够显示两个或多个指定颜色之间的平滑过渡。 CSS3定义了两种类型的渐变:线性(Linear)和径向(Radial)。
为了创建一个线性渐变,你必须至少定义两种颜色结点。颜色结点即你想要呈现平稳过渡的颜色。同时,你也可以设置一个起点和一个方向(或一个角度)。
在下面的示例中,使用蓝色和黑色的颜色从上到下创建线性渐变。
CSS代码:
div {
float: left;
width: 300px;
height: 100px;
margin: 4px;
color: #FFF;
background:linear-gradient(DeepSkyBlue, Black);
}
执行结果:
该属性在Mozilla系列的浏览器中需要加入前缀(-moz)
示例中使用了颜色名称设置颜色,你还可以使用十六进制、RGB或者HSL等来进行渐变定义
3/11
颜色停止
线性渐变可以通过","逗号分隔添加多个颜色,浏览器将由上到下的在几种颜色中生成颜色区间并生成渐变效果。
CSS代码:
div {
float: left;
width: 300px;
height: 100px;
margin: 4px;
color: #FFF;
background:linear-gradient(blue, yellow, green, pink, white);
}
执行结果:
接下来我们为每种颜色设置颜色停止
CSS代码:
div {
float: left;
width: 300px;
height: 100px;
margin: 4px;
color: #FFF;
background:linear-gradient(blue 20%, yellow 30%, green 85%);
}
执行结果:
除百分比外,还可以使用px,em等来指定颜色停止。
如果您对两种颜色使用相同的颜色停止位置,则会在它们之间创建一条清晰的线条。
渐变方向
渐变的方向是可以被改变的。
在下面的例子中,第一个渐变从左开始,向右移动; 第二个从底部到顶部。
CSS代码:
div.first {
float: left;
width: 300px;
height: 100px;
margin: 4px;
color: #FFF;
background:-webkit-linear-gradient(left, blue, green, white);
}
div.second {
float: left;
width: 300px;
height: 100px;
margin: 4px;
background:-webkit-linear-gradient(bottom, blue, green, white);
}
执行结果:
left, right, top, 和 bottom的渐变方向都是支持的,您可以根据需求自由设定。
渐变的角度
通过设置 (bottom, top, right, left, bottom right等)的值,可以改变颜色渐变的角度。
该角度被指定为在水平线和梯度线之间延伸的角度。 换句话说,0deg创建一个从左到右的渐变,而90deg则创建一个从下到上的渐变。
CSS代码:
div.first {
float: left;
width: 300px;
height: 100px;
margin: 4px;
color: #FFF;
background:-webkit-linear-gradient(bottom left, blue, green, white);
}
div.second {
float: left;
width: 300px;
height: 100px;
margin: 4px;
background:-webkit-linear-gradient(100deg, blue, green, white);
}
执行结果:
重复线性渐变
repeat-linear-gradient()函数用于重复线性渐变:
CSS代码:
div {
float: left;
width: 300px;
height: 100px;
margin: 4px;
color: #FFF;
background:-webkit-repeating-linear-gradient(blue, green 20px);
}
执行结果:
<html>
<head>
<style>
div{
width: 300px;
height: 100px;
margin: 10px;
color: #FFF;
}
#div-1 {
background:linear-gradient(DeepSkyBlue, Black);
}
#div-2 {
background:linear-gradient(blue, yellow, green, pink, white);
}
#div-3 {
background:-webkit-linear-gradient(left, blue, green, white);
}
#div-4 {
background:-webkit-linear-gradient(bottom right, blue, green, white);
}
#div-5 {
background:-webkit-repeating-linear-gradient(blue, green 20px);
}
style>
head>
<body>
<div id="div-1">w3cschool--线性渐变div>
<div id="div-2">w3cschool--颜色停止div>
<div id="div-3">w3cschool--渐变方向div>
<div id="div-4">w3cschool--渐变的角度div>
<div id="div-5">w3cschool--重复线性渐变div>
body>
html>
径向渐变
要创建径向渐变,您必须定义至少两个颜色的中止点。
径向梯度由其中心定义。
径向渐变的CSS语法如下所示:
background: radial-gradient(shape size at position, start-color, …, last-color);
值 描述
shape 确定圆的类型:
ellipse (默认): 指定椭圆形的径向渐变。
circle :指定圆形的径向渐变
size 定义渐变的大小,可能值:
farthest-corner (默认) : 指定径向渐变的半径长度为从圆心到离圆心最远的角
closest-side :指定径向渐变的半径长度为从圆心到离圆心最近的边
closest-corner : 指定径向渐变的半径长度为从圆心到离圆心最近的角
farthest-side :指定径向渐变的半径长度为从圆心到离圆心最远的边
position 定义渐变的位置。可能值:
center(默认): 设置中间为径向渐变圆心的纵坐标值。
top: 设置顶部为径向渐变圆心的纵坐标值。
bottom: 设置底部为径向渐变圆心的纵坐标值。
start-color, …, last-color 用于指定渐变的起止颜色。
设置径向渐变的形状
shape参数定义形状。 如果您没有定义径向渐变的形状,则默认情况下将采用椭圆值(ellipse)。
ellipse (默认): 指定椭圆形的径向渐变。
circle :指定圆形的径向渐变
在下面的例子中,我们没有指定第一个div的径向渐变的形状,但是第二个,我们将该值设置为圆形。
CSS代码:
div.first {
height: 150px;
width: 200px;
color: #FFF;
background: -moz-radial-gradient(green, yellow, blue);
}
div.second {
height: 150px;
width: 200px;
color: #FFF;
background: -moz-radial-gradient(circle, green, yellow, blue);
}
执行结果:
径向梯度定位
本质上,我们可以使用与background-position CSS属性指定背景图像位置相同的方法来指定椭圆中心的位置。
我们可以使用关键字,(left, center right, 或者 top, center, bottom),长度值,百分比值,像素,ems或者组合起来进行定位。
在下面的例子中,第一个渐变从左上角开始; 在第二,我们设置了5%的绿色,15%的黄色和60%的蓝色。
CSS代码:
div.first {
height: 150px;
width: 200px;
color: #FFF;
background: -webkit-radial-gradient(top left, green, yellow, blue);
}
div.second {
height: 150px;
width: 200px;
color: #FFF;
background: -webkit-radial-gradient(green 5%, yellow 15%, blue 60%);
}
执行结果:
设置颜色停留
与线性渐变一样,使用颜色指定一个颜色停止位置,并加上一个可选的停止位置,即长度或百分比值。
这里是一个简单的带有颜色停止的圆形渐变:
CSS代码:
background: -webkit-radial-gradient(circle, green 40%, yellow 50%, blue 70%);
执行结果:
<html>
<head>
<style>
div{
height: 150px;
width: 200px;
color: #FFF;
}
div#div-1 {
background: radial-gradient(green, yellow, blue);
}
div#div-2 {
background: radial-gradient(circle, green, yellow, blue);
}
div#div-3 {
background: -webkit-radial-gradient(top left, green, yellow, blue);
}
div#div-4 {
background: radial-gradient(green 5%, yellow 15%, blue 60%);
}
div#div-5 {
background: radial-gradient(circle, green 40%, yellow 50%, blue 70%);
}
style>
head>
<body>
<div id="div-1">w3cschool--径向渐变div>
<div id="div-2">w3cschool--设置径向渐变的形状div>
<div id="div-3">w3cschool--径向梯度定位-1div>
<div id="div-4">w3cschool--径向梯度定位-2div>
<div id="div-5">w3cschool--设置颜色停留div>
body>
html>
background-size属性
background-size属性为CSS添加了新的功能,使我们能够使用长度或百分比来指定背景图像的大小。
CSS代码:
div {
height: 60px;
width: 228px;
border: 1px solid #000;
background: url(“https://statics.w3cschool.cn/images/w3c/index-logo.png”) no-repeat 50% 50%;
background-size: 228px 60px;
}
执行结果:
background-size属性
background-size的属性有两个关键字contain 和 cover。
contain关键字缩放图像以适应容器。
换句话说,图像会按比例增长或缩小,但宽度和高度不会超过容器的尺寸:
background-size: contain;
执行结果:
background-size也接受cover关键字。 图像缩放以适应整个容器; 不过,如果长宽比不同,图像将被裁剪:
background-size: cover;
执行结果:
background-clip属性
background-clip属性指定背景的绘画区域。
该属性有三个不同的值:
border-box - (默认)背景被绘制到边框的外边缘
padding-box - 背景被绘制到填充的外边缘
content-box - 背景被绘制在内容框中
在下面的例子中,带背景剪辑的第一个div被设置为填充框; 在第二个div中它被设置为内容框。
CSS代码:
.first {
border: 2px dotted black;
padding: 20px;
background: red;
color: #fff;
background-clip: padding-box;
}
.second {
border: 2px dotted black;
padding: 20px;
background: red;
color: #fff;
background-clip: content-box;
}
执行结果:
background-clip属性对于背景图片的应用
background-clip也适用于背景图像。
CSS代码:
div {
height: 60px;
background-image: url(“https://7nsts.w3cschool.cn/images/w3c/index-logo.png”);
background-clip: content-box;
}
执行结果:
调用了background-clip的透明边框
在元素上设置透明边框会在边框下面显示元素自己的背景。
在下面的示例中,我们使用RGBA将边框设置为透明,但实际上它们显示为纯灰色。
border: 20px solid rgba(0, 0, 0, 0.3);
width:200px;
position:absolute;
top:50px;
left:50px;
background-color:white;
执行结果:
通过将background-clip属性设置为padding-box,边框将变为透明。
div {
border: 20px solid rgba(0, 0, 0, 0.3);
-moz-background-clip: padding-box;
background-clip: padding-box;
width:100%;
position:absolute;
background-color:white;
}
执行结果:
透明效果是通过background-clip:padding-box实现的。 没有它,盒子的背景也在边界之下,使它不透明。
层叠的背景图
CSS3中支持同时使用多个背景图片。
通过","逗号分隔可以设置多个背景图。 第一个图像将出现在顶部,最后一个在底部。
在下面的例子中,我们有两个背景图片:第一个是w3cschool标识(对齐底部和右侧); 第二个是风景图像(与左上角对齐)。
CSS代码:
div {
width: 400px;
height: 300px;
background-image: url(‘https://7nsts.w3cschool.cn/images/w3c/header-logo.png’),url(‘https://7n.w3cschool.cn/attachments/image/20180125/1516870677823170.jpg’);
background-position: right bottom, left top;
background-repeat: no-repeat;
}
执行结果:
层叠的背景图
使用background-position属性可以更改背景图像的位置。
CSS代码:
div {
width: 400px;
height: 300px;
background-image: url(‘https://7nsts.w3cschool.cn/images/w3c/header-logo.png’),url(‘https://7n.w3cschool.cn/attachments/image/20180125/1516870677823170.jpg’);
background-position: right top, left top;
background-repeat: no-repeat;
}
执行结果:
可以通过使用background简写属性
例:background: url(w3cschool.png) right top no-repeat, url(w3cschool.jpg) left top no-repeat;
opacity属性
CSS中的opacity属性支持为元素增加一个不透明度。
下例中对同一张图片设置多种不透明度进行展示,可以明显看到差别。
CSS代码:
#img1 {
opacity: 1;
}
#img2 {
opacity: 0.5;
}
#img3 {
opacity: 0.25;
}
执行结果:
opacity的值必须介于(0.0~1.0)之间。0.0(完全透明)、1.0(完全不透明)
在Internet Explorer中设置opacity
要让opacity属性兼容所有的IE版本,请使用filter:alpha(opacity = x) 以及opacity属性。 x可以取值从0到100。
x设置为0则是完全透明,反之设置为100是完全不透明。
例如,为了使代码能够正常的使用IE,当图像的不透明度设置为0.4时,应该如下所示:
CSS代码:
#img {
opacity: 0.4;
filter: alpha(opacity=40);
}
执行结果:
alpha过滤器是一个仅限Microsoft的属性,而不是标准的CSS属性。
CSS3 转换
CSS3转换 (transition) 允许我们在限定的时间内从一个属性值转换到另一个属性值。
transition-property - 指定要转换的属性
transition-duration - 指定转换发生的持续时间
transition-timing-function - 指定转换的速度在其持续时间内如何变化
transition-delay - 指定过渡效果的延迟(以秒为单位)
在下面的示例中,我们将transition属性设置为5秒的持续时间转换属性,并设置ease-in定时函数,该函数用慢启动指定转换效果。
CSS代码:
transition: transform 5s ease-in;
过渡效果可以应用于各种CSS属性,包括背景颜色,宽度,高度,不透明度等等
transition-property
在下面的例子中,div元素的宽度和高度都是100px,并有一个红色的背景。 我们为width属性指定了一个过渡效果,持续时间为3秒:
CSS代码:
div {
width: 100px;
height: 100px;
background: red;
color: #fff;
transition: width 3s;
}
div:hover {
width: 250px;
}
执行结果:
如果您将光标悬停在div元素上,则会从左向右移动。
当光标被移出元素时,它将逐渐变回原来的样式。
transition-timing-function
transition-timing-function属性指定过渡效果的速度曲线。
它可以有以下值:
ease - 动画开始缓慢,然后加速(默认值)。
ease-in - 缓步开始,然后加速,突然停止。
ease-out - 快速启动,但减速停止。
ease-in-out - 类似于ease,但是加速和减速时会有稍微的不同。
linear - 匀速转换。
最后,我们有cubic-bezier() 函数,它允许你在cubic-bezier函数中定义你自己的值。 取值范围在0~1之间。
CSS代码:
transition-timing-function: cubic-bezier(0,0,1,1);
CSS3旋转
CSS3中transform(旋转)允许您翻转,旋转,缩放和倾斜元素。
transform(旋转)是一种让元素更改形状,大小和位置的效果。
CSS3支持2D和3D转换。 我们来看看旋转转换:
CSS代码:
div {
width: 300px;
height: 150px;
margin-top: 25px;
background-color: red;
}
执行结果:
转换前的div元素是这样的
现在我们设置15deg的角度将div进行旋转。
div {
width: 200px;
height: 100px;
margin-top: 30px;
background-color: #32CD32;
transform: rotate(15deg);
}
执行结果:
rotate()方法根据给定的deg顺时针或逆时针旋转一个元素。
负值将导致逆时针旋转。
使用负值
如前所述,使用正值将顺时针旋转元素,使用负值将逆时针旋转元素。
CSS代码:
div.positive {
width: 200px;
height: 100px;
margin-top: 30px;
background-color: red;
transform: rotate(10deg);
}
div.negative {
width: 200px;
height: 100px;
margin-top: 30px;
background-color: red;
transform: rotate(-10deg);
}
执行结果:
transform-origin
transform-origin属性允许您更改已转换元素的位置。 该属性的默认值是50%50%,对应于元素的中间。
在下面的例子中,我们将transform-origin属性和transform-rotate一起使用。 x轴(水平)的原点从左侧设定为30%。 y轴(垂直)的原点从上方设定为80%。
CSS代码:
div.empty-div {
position: relative;
height: 100px;
width: 100px;
margin: 30px;
padding: 10px;
border: 1px solid black;
}
div.green-div {
padding: 50px;
position: absolute;
background-color: #8bc34a;
border: 1px solid white;
transform: rotate(15deg);
transform-origin: 30% 80%;
}
执行结果:
0 0与左上相同,100%100%与右下相同。
transform-origin属性必须与transform属性一起使用。
translate()
translate()方法从当前位置移动一个元素(根据给定的x轴和y轴的参数)。 正值会将元素向下推到其默认位置的右侧,而负值则会将元素向上并拖至其默认位置的左侧。
在下面的例子中,div元素向右移动120px,向下移动60px:
CSS代码:
div {
padding: 50px;
position: absolute;
background-color: red;
transform:translate(120px, 60px);
}
执行结果:
skew()
skew()通过给元素设置X轴和Y轴的倾斜角度值来实现倾斜。
以下示例沿着X轴将
CSS代码:
div {
padding: 50px;
position: absolute;
background-color: #32CD32;
transform: skew(45deg);
-webkit-transform: skew(45deg);
}
执行结果:
如果没有指定第二个参数,则它的默认值为零。
scale()
scale()方法根据已设定的宽度和高度参数来增加或减少元素的大小。 1代表原始尺寸,2代表原始尺寸的两倍,依此类推。
在下面的例子中,我们在水平和垂直方向上将第一个div减小0.6倍,并将第二个div在水平和垂直方向上增加1.6倍。
CSS代码:
div.first {
width: 200px;
height: 100px;
background-color: red;
transform: scale(0.7, 0.7);
color:white;
}
div.second {
margin: 60px;
width: 200px;
height: 100px;
background-color: red;
transform: scale(1.5,1.5);
color:white;
}
执行结果:
如果只传递了一个参数,则默认宽度和高度都使用该参数
多重转换
一次可以使用多个转换。 同时旋转和缩放元素的大小就是一个例子。
对元素应用多个变换很简单, 只是用空格分开它们。
这是一个定义了两个转换的例子:
div{
width: 200px;
height: 100px;
background-color: red;
transform: rotate(35deg) translate(120px);
-webkit-transform: rotate(35deg) translate(120px);
color:white;
}
执行结果:
CSS3动画
动画让一个元素从一种风格逐渐变为另一种风格。
您可以根据需要更改任意数量的CSS属性。
关键帧将保存元素在特定时间的样式
@keyframes规则
当您在@keyframes规则中指定CSS样式时,动画将在某些时间从当前样式逐渐变为新样式。
要使动画起作用,必须将动画绑定到元素。
以下示例将更改元素的背景颜色三次:动画完成50%,完成70%,动画完成100%时。
div {
width: 100px;
height: 100px;
background-color: red;
animation-name: w3cschool;
animation-duration: 1s;
}
@keyframes w3cschool {
0% {background-color: red;}
50% {background-color: yellow;}
70% {background-color: blue;}
100% {background-color: green;}
}
执行结果:
csc1-2
w3cschool是为动画设置的名字,您可以设置任意的名字
@keyframes规则
作为使用百分比的替代方法,您可以使用from和to关键字,其中:
from - 为0%的起始点
to - 为100%的结束点
下面的两个例子是等价的,并产生相同的结果:
@keyframes w3cschool {
0% {background-color: red;}
100% {background-color: green;}
}
@keyframes w3cschool {
from {background-color: red;}
to {background-color: green;}
}
执行结果:
csc1-3
@keyframes规则
要使动画起作用,必须将动画绑定到元素。
在下面的例子中,动画持续一秒钟,并将红色div的背景颜色更改为绿色和蓝色。
div {
width: 100px;
height: 100px;
background-color: red;
animation-name: w3cschool;
animation-duration: 1s;
}
@keyframes w3cschool {
0% {background-color: red;}
50% {background-color: green;}
100% {background-color: blue;}
}
执行结果:
css1-1
animation-name 属性指定要用于元素的动画。
animation-duration 属性指定所选动画的持续时间。
如果未指定animation-duration属性,则动画将不起作用,因为默认值为0。
animation-name属性
animation-name属性定义要使用哪个动画。
在此示例中,动画的名称设置为w3cschool,它与定义的关键帧相匹配。
CSS代码:
div {
animation-name: w3cschool;
animation-duration: 10s;
}
@keyframes w3cschool {
from { width: 0px; }
to { width: 120px; }
}
执行结果:
csc1-4
animation-duration属性以秒为单位指定所选动画的持续时间。
如果动画名称与任何关键帧规则不匹配,则动画将不会执行。
动画属性
(animation-timing-function)动画定时功能指定动画的速度曲线。 它可以有以下值:
ease - 指定一个慢启动的动画,然后快速,然后慢慢结束(默认值)
linear - 从开始到结束指定一个具有相同速度的动画
ease-in - 指定一个慢启动的动画
ease-out - 指定一个缓慢结束的动画
ease-in-out - 指定一个缓慢的开始和结束的动画
cubic-bezier(n,n,n,n) - 让你在一个cubic-bezier函数中定义你自己的值
CSS代码:
animation-timing-function: linear;
animation-delay 定义动画开始之前的延迟。
CSS代码:
animation-delay: 2s;
animation-delay和animation-duration的属性值可以用秒(s)和毫秒(ms)来定义
更多的动画属性
animation-iteration-count属性确定动画重复的次数。
例如,您可以将动画设置为运行6次:
animation-iteration-count: 6;
为了使动画永久重复,只需使用无限值:
animation-iteration-count: infinite;
animation-direction属性指定如何应用关键帧,值可以设置为:
normal - 默认值,这意味着它从0%到100%前进。
reverse - 从100%到0%的相反方向播放关键帧
alternate - 动画首先向前,然后向后,然后向前。
alternate reverse - 动画首先倒退,然后前进,然后倒退。
如果对animation-iteration-count的值使用0或负数,动画将永远不会启动。
先研究一下下面的例子:
div {
animation-name: colorchange;
animation-duration: 4s;
animation-timing-function: ease-in;
animation-delay: 2s;
animation-iteration-count: infinite;
animation-direction: reverse;
}
可以简写上面的属性设置成同一个属性,将上面的所有效果进行合并。
div {
animation: colorchange 4s ease-in 2s infinite reverse;
}
请注意简写后每一个属性的顺序,不能改变,否则将无法生效
3D转换
除了x轴和y轴,3D转换还引入了Z轴,这使得3D操作成为可能。
3D转换与2D转换非常相似:
通过rotateX(), rotateY() 和 rotateZ()函数以给定的度数(deg)围绕相应的轴旋转3D空间中的元素。
div.X {
transform: rotateX(160deg);
}
div.Y {
transform: rotateY(160deg);
}
div.Z {
transform: rotateZ(160deg);
}
执行结果:
您可以使用 transform: none; 关闭元素的所有转换效果。
转换
3D转换方法允许您使用任何CSS长度单位(px,em,%等)
translateX - 水平移动元素
translateY - 垂直移动
translateZ - 移入或移出屏幕。( 正值将元素移入,将负值移出)
CSS代码:
.first {
width:250px;
height:100px;
color:white;
background-color:red;
transform: translateX(29px)
translateY(5em)
translateZ(-13px);
}
执行结果:
translate3d()方法允许我们按照以下顺序同时传递x,y和z偏移量:
.first {
transform: translate3d(-25px, 4em, 15px);
}
像translate3d()方法一样,还有scale3d()和rotate3d(),它们适用于3D中的缩放和旋转元素。
perspective
perspective定义了如何渲染3D场景的深度。 将视角看作从观众到物体的距离。 值越大,距离越远,视觉效果越不强烈,子元素所呈现的边缘越小。
在为一个元素定义perspective属性时,它是获取perspective视图的子元素,而不是元素本身。
CSS代码:
div.empty-div {
position: relative;
height: 200px;
width: 200px;
margin: 30px;
padding: 10px;
border: 1px solid black;
perspective: 100px;
-webkit-perspective: 100px;
}
div.red-div {
padding: 60px;
position: absolute;
background-color: red;
border: 1px solid white;
transform: rotateX(45deg);
-webkit-transform: rotateX(45deg);
}
执行结果:
perspective属性只影响3D转换的元素。