6.jpg 0
前端程序猿

专注于前端的程序猿

2022-04-13

css笔记06-动画/过渡/计数器

2022-04-24 0 82 web前端社区

6.jpg 0 前端程序猿

过渡transition

通常当 CSS 的属性值更改后,浏览器会立即更新相应的样式,例如当鼠标悬停在元素上时,通过 :hover 选择器定义的样式会立即应用在元素上。在 CSS3 中加入了一项过渡功能,通过该功能您可以将元素从一种样式在指定时间内平滑的过渡到另一种样式,类似于简单的动画,但无需借助 flash 或 JavaScript。

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

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

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

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

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

1. transition-property

transition-property 属性用来设置元素中参与过渡的属性名称,语法格式如下:

transition-property: none | all | property;

参数说明如下:

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

2. transition-duration

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

transition-duration: time;

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

如果有多个参与过渡的属性,也可以依次为这些属性设置过渡需要的时间,多个属性之间使用逗号进行分隔,例如

  1. 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

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

transition-delay: time;

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

5. transition

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

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

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

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <style>
  5. div {
  6. width: 100px;
  7. height: 100px;
  8. border: 3px solid black;
  9. margin: 10px 0px 0px 10px;
  10. transition: width .25s linear 1.9s, background 1s 2s, transform 2s;
  11. }
  12. div:hover {
  13. width: 200px;
  14. background-color: blue;
  15. transform: rotate(180deg);
  16. }
  17. </style>
  18. </head>
  19. <body>
  20. <div></div>
  21. </body>
  22. </html>

动画animation

CSS 中的动画类似于 flash 中的逐帧动画,表现细腻并且非常灵活,使用 CSS 中的动画可以取代许多网页中的动态图像、Flash 动画或者 JavaScript 实现的特殊效果。

@keyframes 规则

@keyframes 规则用来定义动画各个阶段的属性值,类似于动画中的帧,如:

  1. @keyframes animationName {
  2. from {
  3. properties: value;
  4. }
  5. percentage {
  6. properties: value;
  7. }
  8. to {
  9. properties: value;
  10. }
  11. }
  12. // 或者
  13. @keyframes animationName {
  14. 0% {
  15. properties: value;
  16. }
  17. percentage {
  18. properties: value;
  19. }
  20. 100% {
  21. properties: value;
  22. }
  23. }

语法说明如下:

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

下面我们来看一个简单的 @keyframes 规则示例:

  1. @keyframes ball {
  2. 0% { top: 0px; left: 0px;}
  3. 25% { top: 0px; left: 350px;}
  4. 50% { top: 200px; left: 350px;}
  5. 75% { top: 200px; left: 0px;}
  6. 100% { top: 0px; left: 0px;}
  7. }

动画创建好后,还需要将动画应用到指定的 HTML 元素。要将动画应用到指定的 HTML 元素需要借助 CSS 属性,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 表示无动画效果,

要想让动画成功播放,您还需要定义 animation-duration 属性,否则会因为 animation-duration 属性的默认值为 0,导致动画并不会播放。

animation-duration

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

动画若想成功播放,必须要定义 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 之间的数值

animation-fill-mode

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

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

animation-delay

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

animation-delay: time;

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

animation-iteration-count

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

描述
n 使用具体数值定义动画播放的次数,默认值为 1
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 属性可以同时定义上述的多个属性,语法格式如下:

animation: animation-name animation-duration animation-timing-function animation-delay animation-iteration-count animation-direction animation-fill-mode animation-play-state;

其中每个参数分别对应上面介绍的各个属性,如果省略其中的某个或多个值,则将使用该属性对应的默认值。

如:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <style>
  5. @keyframes box {
  6. 0% {transform: rotate(0);}
  7. 50% {transform: rotate(0.5turn);}
  8. 100% {transform: rotate(1turn);}
  9. }
  10. div {
  11. width: 100px;
  12. height: 100px;
  13. border-radius: 50%;
  14. float: left;
  15. border: 3px solid black;
  16. text-align: center;
  17. line-height: 100px;
  18. position: relative;
  19. animation: box 2s linear 0s infinite alternate;
  20. }
  21. </style>
  22. </head>
  23. <body>
  24. <div>animation</div>
  25. </body>
  26. </html>

css 改变checkbox的样式

重写checkbox和radio样式 ,用label关联,然后改变label标签样式

  1. .ra1_input:checked+label{
  2. background-color: blue;
  3. }
  4. .ra1_input:checked+label::after{
  5. right: 0;
  6. }
  7. .ra1{
  8. display: block;
  9. position: relative;
  10. width: 50px;
  11. height: 25px;
  12. background-color: gray;
  13. border-radius: 25px;
  14. }
  15. .ra1::after{
  16. content: "";
  17. display: block;
  18. position: absolute;
  19. width: 25px;
  20. height: 25px;
  21. background-color: black;
  22. border-radius: 50%;
  23. }

多行文本省略

  1. <style>
  2. div {
  3. margin: 0 auto;
  4. width: 300px;
  5. color: red;
  6. display: -webkit-box;
  7. -webkit-box-orient: vertical;
  8. -webkit-line-clamp: 2;
  9. overflow: hidden;
  10. }
  11. </style>
  12. </head>
  13. <body>
  14. <div>多行文本省略多行文本省略多行文本省略多行文本省略多行文本
  15. 省略多行文本省略多行文本省略多行文本省略多行文本省略多行文本
  16. 省略多行文本省略多行文本省略多行文本省略多行文本省略</div>
  17. </body>

1、-webkit-line-clamp:2; (用来限制在一个块元素显示的文本的行数,2表示最多显示2行。 为了实现该效果,它需要组合其他的WebKit属性)

2、display: -webkit-box; (和1结合使用,将对象作为弹性伸缩盒子模型显示 )

3、-webkit-box-orient:vertical;( 和1结合使用 ,设置或检索伸缩盒对象的子元素的排列方式 。)

4、overflow:hidden; (顾名思义超出限定的宽度就隐藏内容)

5、text-overflow: ellipsis;(规定当文本溢出时显示省略符号来代表被修剪的文本)

表格table

1. table-layout

table-layout 属性用来设置表格布局时所用的布局算法:

描述
automatic 默认值,自定表格布局,表示表格中每列的宽度视单元格中的内容而定
fixed 固定表格布局,表示表格的宽度由列宽度、单元格边框、单元格之间的间距等因素而定
inherit 从父元素继承 table-layout 属性的值

固定表格布局

固定表格布局允许浏览器更快地对表格进行布局。在固定表格布局中,表格的水平宽度仅取决于列宽度、表格边框宽度、单元格间距等因素,与单元格中的内容无关。也就是说,表格中超出表格宽度的内容可能会被忽略。

自动表格布局

在自动表格布局中,列的宽度视单元格中的内容(没有换行的最宽内容)而定,也就是说如果某个单元格的宽度为 100px,但单元格中内容所占据的宽度要大于 100px,这就会导致单元格中的内容将单元格撑大。正是因为这一特点,此种算法可能会比较慢。

2. border-collapse

border-collapse 属性用来设置是否合并表格中相邻的边框:

描述
separate 默认值,相邻的两个边框是分开的,使用它不会忽略 border-spacing 和 empty-cells 属性
collapse 相邻的两个边框会合并为一个单一的边框,使用它会忽略 border-spacing 和 empty-cells 属性
inherit 从父元素继承 border-collapse 属性的值

3. border-spacing

border-spacing 属性可以设置相邻单元格边框之间的距离(仅在 border-collapse 属性为 separate 时才有效),它的效果等同于<table>标签的 cellspacing 属性

border-spacing 属性的语法:border-spacing: length length;

计数器counter-reset

CSS 中的计数器类似于变量,可以实现简单的计数功能,并将结果显示在页面上。实现计数器需要用到以下几个属性:

  • counter-reset:创建或者重置计数器;
  • counter-increment:递增变量;
  • content:插入生成的内容;
  • counter() 或 counters():将计数器的值添加到元素。

初始化计数器

要使用计数器首先需要使用 counter-reset 属性来创建一个计数器,这一过程便叫做初始化计数器。counter-reset 属性的语法格式如下:

counter-reset:none | [ ]

参数说明如下:

  • none:阻止计数器复位;
  • :定义计数器的名称;
  • :定义计数器的起始值,默认值为 0,可以为负值。

计数器自增

初始化计数器后,可以通过 counter-increment 属性来指定计数器何时自增,格式如下:

counter-increment:none | [ ]

参数说明如下:

  • none:阻止计数器增加;
  • :定义要自增的计数器名称;
  • :定义计数器每次增加的数值,默认值为 1,可以为负值。

显示计数器

最后,就是如何显示计数器了。要显示计数器您可以使用 counter() 或 counters() 函数,这两个函数的语法格式如下:

counter(name)
counters(name, string, list-style-type)

  1. body{
  2. counter-reset: dl; /**/
  3. }
  4. dl{
  5. counter-reset: dd;
  6. counter-increment: dl;
  7. }
  8. dd{
  9. counter-increment: dd;
  10. }
  11. dt::before{
  12. content: counter(dl);
  13. }
  14. dd::before{
  15. content: counter(dl) "." counter(dd);
  16. }
  17. ol{
  18. counter-reset: ul;
  19. }
  20. ol>li::before{
  21. counter-increment: ul;
  22. content: counters(ul,"-") ":";
  23. }
0

Copyright (C) 2021-2026 98社区 All Rights Reserved 蜀ICP备20012692号-3