理解CSS | 青训营笔记(2)

简介: 理解CSS | 青训营笔记

④ 变形 过渡 动画

过渡

属性值

CSS 中提供了 5 个有关过渡的属性,如下所示:

属性名 属性解释
transition-property 设置元素中参与过渡的属性
transition-duration 设置元素过渡的持续时间
transition-timing-function 设置元素过渡的动画类型
transition-delay 设置过渡效果延迟的时间,默认为 0
transition 简写属性,用于同时设置上面的四个过渡属性。

要成功实现过渡效果,必须定义以下两项内容:

  • 元素中参数与过渡效果的属性;
  • 过渡效果持续的时间。

提示:过渡效果通常会在鼠标悬停在元素上时发生,如果未设置过渡持续的时间,则过渡效果不会生效,因为过渡时间的默认值为 0
 提示:过渡效果通常会在鼠标悬停在元素上时发生,如果未设置过渡持续的时间,则过渡效果不会生效,因为过渡时间的默认值为 0。
 提示:过渡效果通常会在鼠标悬停在元素上时发生,如果未设置过渡持续的时间,则过渡效果不会生效,因为过渡时间的默认值为 0。

1. transition-property

1.1语法:

| transition-property: none || all || property | | ---------------------------------------------------- |

1.2属性值介绍
  • none:表示没有属性参与过渡效果;
  • all:表示所有属性都参与过渡效果;
  • property:定义应用过渡效果的 CSS 属性名称列表,多个属性名称之间使用逗号,进行分隔。

2. transition-duration

2.1语法

transition-duration 属性用来设置过渡需要花费的时间(单位为秒或者毫秒),语法格式如下:

transition-duration: time;
2.2属性值介绍

其中,time 为完成过渡效果需要花费的时间(单位为秒或毫秒),默认值为 0,意味着不会有效果。

如果有多个参与过渡的属性,也可以依次为这些属性设置过渡需要的时间,多个属性之间使用逗号进行分隔,例如transition-duration: 1s, 2s, 3s;。除此之外,也可以使用一个时间来为所有参与过渡的属性设置过渡所需的时间。示例代码如下:

3. transition-timing-function

transition-timing-function 属性用来设置过渡动画的类型,属性的可选值如下:

描述
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 之间

4. transition-delay

4.1语法

transition-delay 属性用来设置过渡效果何时开始,属性的语法格式如下:

transition-delay: time;
4.1属性值介绍

其中,参数 time 用来设置在过渡效果开始之前需要等待的时间,单位为秒或毫秒。

5. transition

5.1语法

transition 属性是上面四个属性的简写形式,通过该属性可以同时设置上面的四个属性,属性的语法格式如下:

transition: transition-property transition-duration transition-timing-function transition-delay;

transition 属性中,transition-property 和 transition-duration 为必填参数,transition-timing-function 和 transition-delay 为选填参数,如非必要可以省略不写。另外,通过 transition 属性也可以设置多组过渡效果,每组之间使用逗号进行分隔,

示例代码如下:

css

/*1.元素中参与过渡的属性 2.元素过渡的所需时间 3.元素过渡的动画模式 4. 延时执行的时长 */
 transition: all 2s ease-in 3s;

动画

1.@keyframes 规则

要创建 CSS 动画,您首先需要了解 @keyframes 规则,@keyframes 规则用来定义动画各个阶段的属性值,类似于 flash 动画中的关键帧,语法格式如下:

css

@keyframes animationName {
     /* 1.from:定义动画的开头,相当于 0%; */
     from {
         /* 2.properties:不同的样式属性名称,例如 color、left、width 等等。 */
         properties: value;
     }
     /* 3.percentage:定义动画的各个阶段,为百分比值,可以添加多个;  */
     percentage {
         properties: value;
     }
     /* 4.to:定义动画的结尾,相当于 100%;*/
     to {
         properties: value;
     }
 }
 // 或者
 /* animationName :表示动画的名称 */
 @keyframes animationName {
     0% {
         properties: value;
     }
     percentage {
         properties: value;
     }
     100% {
         properties: value;
     }
 }

语法说明如下:

  • animationName:表示动画的名称;
  • from:定义动画的开头,相当于 0%;
  • percentage:定义动画的各个阶段,为百分比值,可以添加多个;
  • to:定义动画的结尾,相当于 100%;
  • properties:不同的样式属性名称,例如 color、left、width 等等。

2.CSS 中的动画属性

  • animation-name:设置需要绑定到元素的动画名称;
  • animation-duration:设置完成动画所需要花费的时间,单位为秒或毫秒,默认为 0;
  • animation-timing-function:设置动画的速度曲线,默认为 ease;
  • animation-fill-mode:设置当动画不播放时(动画播放完或延迟播放时)的状态;
  • animation-delay:设置动画开始之前的延迟时间,默认为 0;
  • animation-iteration-count:设置动画被播放的次数,默认为 1;
  • animation-direction:设置是否在下一周期逆向播放动画,默认为 normal;
  • animation-play-state:设置动画是正在运行还是暂停,默认是 running;
  • animation:所有动画属性的简写属性。

animation-name

animation-name 属性用来将动画绑定到指定的 HTML 元素,属性的可选值如下:

描述
keyframename 要绑定到 HTML 元素的动画名称,可以同时绑定多个动画,动画名称之间使用逗号进行分隔
none 表示无动画效果

代码如下:

<!DOCTYPE html>
 <html>
 <head>
     <style>
         @keyframes ball {
             0% { top: 0px; left: 0px;}
             25% { top: 0px; left: 350px;}
             50% { top: 200px; left: 350px;}
             75% { top: 200px; left: 0px;}
             100% { top: 0px; left: 0px;} 
         }
         div {
             width: 100px;
             height: 100px;
             border-radius: 50%;
             border: 3px solid black;
             position: relative;
             animation-name: ball;
         }
     </style>
 </head>
 <body>
     <div></div>
 </body>
 </html>

animation-duration

animation-duration 属性用来设置动画完成一个周期所需要花费的时间,单位为秒或者毫秒。

animation-duration: 2s;
提示:动画若想成功播放,必须要定义 animation-name 和 animation-duration 属性。

animation-timing-function

animation-timing-function 属性用来设置动画播放的速度曲线,通过速度曲线的设置可以使动画播放的更为平滑。animation-timing-function 属性的可选值如下表所示:

描述
linear 动画从开始到结束的速度都是相同的
ease 默认值,动画从低速开始,然后加快,在结束前变慢
ease - in 动画从低速开始
ease - out 动画以低速结束
ease - in - out 动画从低速开始,并且以低速结束
cubic-bezier(n, n, n, n) 使用 cubic-bezier() 函数来定义动画的播放速度,参数的取值范围为 0 到 1 之间的数值

代码:

<!DOCTYPE html>
 <html>
 <head>
     <style>
         @keyframes ball {
             0% {left: 0px;}
             50% {left: 350px;}
             100% {left: 0px;}
         }
         div {
             width: 100px;
             height: 100px;
             border-radius: 50%;
             border: 3px solid black;
             text-align: center;
             line-height: 100px;
             position: relative;
             animation-name: ball;
             animation-duration: 2s;
         }
         .one {
             animation-timing-function: ease;
         }
         .two {
             animation-timing-function: ease-in;
         }
         .three {
             animation-timing-function: ease-out;
         }
         .four {
             animation-timing-function: ease-in-out;
         }
     </style>
 </head>
 <body>
     <div class="one">ease</div>
     <div class="two">ease-in</div>
     <div class="three">ease-out</div>
     <div class="four">ease-in-out</div>
 </body>
 </html>


图: animation-timing-function 属性演示

animation-fill-mode

animation-fill-mode 属性用来设置当动画不播放时(开始播放之前或播放结束之后)动画的状态(样式),属性的可选值如下:

描述
none 不改变动画的默认行为
forwards 当动画播放完成后,保持动画最后一个关键帧中的样式
backwards 在animation-delay 所指定的时间段内,应用动画第一个关键帧中的样式
both 同时遵循 forwards 和 backwards 的规则

animation-delay

animation-delay 属性用来定义动画开始播放前的延迟时间,单位为秒或者毫秒,属性的语法格式如下:

animation-delay: time;

其中参数 time 就是动画播放前的延迟时间,参数 time 既可以为正值也可以为负值。参数值为正时,表示延迟指定时间开始播放;参数为负时,表示跳过指定时间,并立即播放动画。

css

.one {
             position: absolute;
             top: 0;
             left: 0;
             width: 100px;
             height: 100px;
             border-radius: 50%;
             background-color: rgb(75, 251, 239);
             animation: one 3s ease-in-out infinite;
             animation-delay: 3s;
         }
         .two {
             position: absolute;
             top: 150px;
             left: 150px;
             width: 100px;
             height: 100px;
             border-radius: 50%;
             background-color: rgb(1, 84, 123);
             animation: one 3s ease-in-out infinite;
             animation-delay: -3s;
         }
         @keyframes one {
             0% {
                 left: 0px;
             }
 
             50% {
                 left: 350px;
             }
 
             100% {
                 left: 0px;
             }
         }

animation-iteration-count

animation-iteration-count 属性用来定义动画播放的次数,属性的可选值如下:

描述
n 使用具体数值定义动画播放的次数,默认值为 1
infinite 表示动画无限次播放

代码展示:

<div class="one">1</div>
     <div class="two">infinite</div>


@keyframes box {
             0% {
                 transform: rotate(0);
             }
 
             50% {
                 transform: rotate(0.5turn);
             }
 
             100% {
                 transform: rotate(1turn);
             }
         }
         div {
             width: 100px;
             height: 100px;
             float: left;
             border: 3px solid black;
             text-align: center;
             line-height: 100px;
             position: relative;
             animation-name: box;
             animation-duration: 2s;
         }
 
         .one {
             animation-iteration-count: 1;
         }
 
         .two {
             margin-left: 50px;
             animation-iteration-count: infinite;
         }

animation-direction

animation-direction 属性用来设置是否轮流反向播放动画,属性的可选值如下:

描述
normal 以正常的方式播放动画
reverse 以相反的方向播放动画
alternate 播放动画时,奇数次(1、3、5 等)正常播放,偶数次(2、4、6 等)反向播放
alternate-reverse 播放动画时,奇数次(1、3、5 等)反向播放,偶数次(2、4、6 等)正常播放

animation-play-state

animation-play-state 属性用来设置动画是播放还是暂停,属性的可选值如下:

描述
paused 暂停动画的播放
running 正常播放动画


animation

animation 属性是 animation-name、animation-duration、animation-timing-function、animation-delay、animation-iteration-count、animation-direction、animation-fill-mode、animation-play-state 几个属性的简写形式,通过 animation 属性可以同时定义上述的多个属性,语法格式如下:

arduino

animation: 
 animation-name              /* 动画的名称 */
 animation-duration          /* 动画执行的时长*/
 animation-timing-function   /* 动画执行的模式*/
 animation-delay             /* 延时动画执行*/
 animation-iteration-count   /* 动画执行的周期数*/
 animation-direction         /* 是否轮流反向播放动画 */
 animation-fill-mode         /* 动画暂停时(播放前,播放后)的样式*/
 animation-play-state        /* 设置动画是播放还是暂停*/

性能相关

image.png

动画性能相关深入了解

硬件加速详解

⑤ 响应设计

5.1 响应式设计推荐遵循的原则

image.png

5.2 媒体查询的使用

CSS 媒体查询是一种可以根据设备类型或屏幕尺寸等特征,为不同的设备或尺寸定义不同的规则和样式表的技术。它允许我们为不同的设备提供定制化的布局,以更好地适应不同的设备和屏幕尺寸。在响应式设计中使用媒体查询非常普遍。

下面是一个基本的 CSS 媒体查询示例:

css

/* 当浏览器宽度小于 768px 时应用这些样式 */
@media screen and (max-width: 768px) {
  body {
    font-size: 16px;
    background-color: #f1f1f1;
  }
}
/* 当浏览器宽度大于等于 768px 时应用这些样式 */
@media screen and (min-width: 768px) {
  body {
    font-size: 18px;
    background-color: #fff;
  }
}

上面的代码演示了如何在 CSS 中使用媒体查询。当浏览器宽度小于 768px 时,第一个媒体查询将应用规则集中的样式,而当浏览器宽度大于或等于 768px 时,第二个媒体查询将应用规则集中的样式。注意到每个媒体查询都包含一个媒介类型 "screen" 和一个条件表达式,条件表达式指定了媒体查询应用的范围。

除了浏览器宽度,还可以使用其他常见的媒体特征,如高度、设备方向和分辨率等,以适配不同的设备和屏幕。这些媒体特征可以在 CSS 规范中找到,并可以结合使用来实现更复杂的布局适配。

image.png

5.3 设备像素,参考像素 移动设备视口

5.3.1 设备像素

image.png

5.3.2 DPI && PPI

image.png

5.4 css3 像素

image.png

5.5 css常用单位

当开发网页时,CSS单位是一项非常重要的知识。下面是一些常见的CSS单位及其解释:

单位名称 含义
px(像素) 一个基本的屏幕上的点,通常用于定义元素的具体大小。
em 相对大小,相对于父元素的字号大小而言。如:font-size: 1.2em; 表示当前元素字号是父亲的1.2倍。
rem 相对大小,与根元素(即 html)的字号大小有关。这个单位不受浏览器 font-size 调节的影响,因此是线性的。
%(百分比) 相对于父元素的宽度/高度而言,可以用于设置元素的宽度、高度、内边距、外边距等。
vw/vh 视口宽度单位(Viewport Width / Viewport Height),视口指窗口显示内容区域的大小。vw表示视口宽度的1/100,vh表示视口高度的1/100。
pt(磅) 印刷单位,1pt=1/72英寸;用于打印样式表中。
mm/cm/in 计量单位,毫米/厘米/英寸,用于打印样式表中。


目录
相关文章
|
4月前
|
前端开发 JavaScript 开发者
理解CSS | 青训营笔记(3)
理解CSS | 青训营笔记(3)
37 0
|
4月前
|
前端开发 容器
理解CSS | 青训营笔记(1)
理解CSS | 青训营笔记
54 0
|
7月前
|
前端开发 容器
CSS3属性详解(一)文本 盒模型中的 box-ssize 属性 处理兼容性问题:私有前缀 边框 背景属性 渐变 前端开发入门笔记(七)
CSS3属性详解(一)文本 盒模型中的 box-ssize 属性 处理兼容性问题:私有前缀 边框 背景属性 渐变 前端开发入门笔记(七)
91 2
|
7月前
|
移动开发 前端开发 JavaScript
CSS选择器 前端开发入门笔记(十)
CSS选择器 前端开发入门笔记(十)
70 1
|
7月前
|
编解码 前端开发 iOS开发
前端开发入门笔记(八)CSS3属性详解:动画详解+Flex布局图文详解+Web字体
前端开发入门笔记(八)CSS3属性详解:动画详解+Flex布局图文详解+Web字体
114 1
|
7月前
|
前端开发 JavaScript 容器
CSS属性:定位属性+案例讲解:博雅互动 前端开发入门笔记(五)
CSS属性:定位属性+案例讲解:博雅互动 前端开发入门笔记(五)
56 1
|
7月前
|
XML 编解码 前端开发
css设计文本样式 前端开发入门笔记(十二)
css设计文本样式 前端开发入门笔记(十二)
43 0
|
7月前
|
Web App开发 XML 前端开发
CSS中的非布局样式+CSS布局 前端开发入门笔记(十一)
CSS中的非布局样式+CSS布局 前端开发入门笔记(十一)
80 0
|
前端开发 Web App开发
css使用笔记
最近写一个前台页面,因为不用考虑太多兼容性问题,尝试了很多css3的东西,记录下。 1、渐变和边框阴影 最初的视觉稿,上面有很多地方颜色使用了渐变,为了不使用图片,用了很挫的方式来实现:从图片渐变开始、中间、结束部分,用gimp的吸管获取颜色,然后转换成css的渐变。不过因为渐变每个浏览器支持方
1624 0
下一篇
DataWorks