CSS进阶七:transition,transform,animation

transition

元素样式过渡效果

transition-property

设置需要过渡css属性,默认为all;一般不需要设置

transition-property:width,color;

css属性要求

具有中间值的css属性(css样式值是数值或者可以转换成数值.width , color)

transition-duration

过渡效果持续时间

transition-duration:  2s,  .5s     多个过渡时间使用逗号分隔, 通常配合控制多个过渡属性.

transition-delay

设置延迟执行时间

可以设置为负值

设置为-1时,前1秒没有过渡效果,后边的才会有过渡效果

transition-timing-function

过渡效果

可选值:

  • linear匀速过渡
  • ease缓进缓出
  • ease-in
  • ease-out
  • ease-in-out
  • cublic-bezier(n,n,n,n)贝塞尔曲线

transition

简写

单个属性过渡

transition: CSS属性名1 过渡时间  过渡效果  过渡延迟时间 

多个属性过渡

transition:  CSS属性名1  过渡时间1  过渡效果1  过渡延迟时间1 , CSS属性名2  过渡时间2  过渡效果2  过渡延迟时间 2

过渡覆盖问题

transition: width 1s  .3s linear, .2s

此时宽度的过渡变化 200毫秒,而不是3秒,同时过渡会立即执行,并不是延迟1秒执行。

实际浏览器是按以下方式处理的,

transition: width 1s linear .3s ease, all .2s 0s ease

单向过渡VS双向过渡

单向过渡

过渡样式设置在“样式结束值”位置(只有触发过渡时,会产生过渡效果)

.box{
        width: 100px;
        height: 100px;
        background-color: red;
    }
    .box:hover{
        width: 200px;
        transition-duration: 3s;
    }

双向过渡

过渡样式设置在“样式开始值”位置(触发过渡,状态消失都会产生过渡效果)

    .box{
        width: 100px;
        height: 100px;
        background-color: red;
        transition-duration: 3s;
    }
    .box:hover{
        width: 200px;
    }

隐式过渡

指定了字体大小的过渡,但是在firefox 和 chrome 中导致了宽高的“隐式过渡”

过渡事件 transitionend

var element = document.getElementById("slidingMenu");
element.addEventListener("transitionend", function(event) {
element.innerHTML = “过渡时间结束!";
}, false);

transform

元素的2D或3D转换。这个属性允许你将元素旋转,缩放,移动,倾斜

  • 元素变形,不会影响相邻兄弟元素的位置。
  • 元素变形,元素不设置高度时,不会导致父元素高度的变化。
  • 元素变形,只有在块元素中才生效
  • 元素变形,元素的文本及其后代元素都会变形

可选参数:

  • scale(x, y)定义 2D 缩放转换,元素的x,y轴进行缩放转换

  • scaleX(n)定义 2D 缩放转换,元素x轴进行缩放转换

  • scaleY(n)定义 2D 缩放转换,元素y轴进行缩放转换

  • skew(x-angle,y-angle)定义 2D 倾斜转换,沿着 X 和 Y 轴。

  • skewX(angle) 2D 倾斜转换,沿着 X 轴。(相当于Y轴做了一定角度的倾斜)

  • skewY(angle) 2D 倾斜转换,沿着 Y 轴。

  • angle 表示旋转的角度,单位是deg,逆时针45度 45deg;顺时针45度 -45deg

  • translate(x,y)2D 移动转换,沿着 X 和 Y 轴移动元素。

  • translateX(n) 2D 移动转换,沿着 X 轴移动元素。

  • translateY(n) 2D 移动转换,沿着 Y 轴移动元素。

  • translateZ(n) 3D 移动转换,沿着 Z 轴移动元素。

  • x, y, n 表示移动的距离 (length) 。例如 200px

  • 变换中心点对位移函数 translate()不其起作用

  • 位移过大会导致父元素出现滚动条,此时需对父元素设置over-flow: hidden

  • rotate(angle) 2D 旋转,沿Z轴旋转角度

  • 改变变换中心点的位置,可以实现不同的旋转效果

  • rotateX(angle)3D 旋转,沿X轴旋转角度,

  • rotateY(angle)3D 旋转,沿Y轴旋转角度

      transform: scale(x, y) 
    

每次进行变换都是根据最原始位置坐标系进行变换。
例如: 先设置rotate(45deg) 图像会转45度, 再设置旋转45deg是没有效果的,因为已经旋转了45deg。

scale()会使坐标系比例发生变换,其子元素的变换都会根据新的坐标系变换

skew()倾斜之后会导致坐标系也会倾斜,其子元素的变换都会根据新的坐标系变换

rotate()会使坐标系也旋转,其子元素的变换都会根据新的坐标系变换

transform-origin: x-axis y-axis z-axis;

变换中心点

x-axis。y-axis默认是center;z-axis默认是0

  • x-axis 定义视图被置于 X 轴的何处。可能的值:
  • left
  • center
  • right
  • length
  • %
  • y-axis 定义视图被置于 Y 轴的何处。可能的值:
  • top
  • center
  • bottom
  • length
  • %

backface-visibility

设置元素翻转180deg之后是否可见

可选参数:

  • visible 背面是可见的。
  • hidden 背面是不可见的。

perspective:number | none

景深(给当前元素的父元素设置),3D元素是如何查看透视图

  • number 元素距离视图的距离,以像素计。
  • none 默认值。与 0 相同。不设置透视。

perspective-origin:x-axis y-axis

景深中心点

参数说明

  • x-axis 定义视图被置于 X 轴的何处。可能的值:
    • left
    • center
    • right
    • length
    • %
  • y-axis 定义视图被置于 Y 轴的何处。可能的值:
    • top
    • center
    • bottom
    • length
    • %
  • z-axis 定义视图被置于 Z 轴的何处。可能的值:
    • length

transform-style

指定嵌套元素是怎样在三维空间中呈现

可选值:

  • flat(默认值) 子元素将不保留其 3D 位置。

  • preserve-3d 子元素将保留其 3D 位置。


animation

动画

@keyframes

定义一个动画,@keyframes定义的动画名称用来被animation-name所使用

@keyframes mykeyframes {
        from{
            background-color: orange;
        }
        20%{
            background-color:  blue;
        }
        50%{
            background-color:  red;
            transform: scale(.5);
        }
        to{
            background-color:  green;
            transform: scale(2);
        } 
    }

    //from{} = 0%{}
    //to{}=100%{}

    0%, 90%{
            background: url("img/1.png") no-repeat;
            background-size: 100%;
        }

animation-name

    .box{
        width: 100px;
        height: 100px;
        animation-name: anim1;
        animation-duration: 2s;
    }

    @keyframes anim1 {
        from{
            background-color: red;
        }
        10%{
            background-color: green;
        }
        to{
            background-color: blue;
        }
    }

animation-duration

动画持续时长

animation-delay

动画延迟时长

animation-iteration-count

规定动画播放次数

可选参数:

  • infinite 无限次播放

  • n 指定播放次数

animation-direction

定义是否循环交替反向播放动画。

注意:如果动画被设置为只播放一次,该属性将不起作用

可选参数:

  • normal 正常播放
  • Reverse反向播放
  • alternate 动画下一次播放反向播放
  • alternate动画在奇数次(1、3、5...)正向播放,在偶数次(2、4、6...)反向播放。
  • alternate-reverse 动画在奇数次(1、3、5...)反向播放,在偶数次(2、4、6...)正向播放

animation-timing-function

指定动画速度曲线

  • linear匀速过渡
  • ease缓进缓出
  • ease-in
  • ease-out
  • ease-in-out
  • cublic-bezier(n,n,n,n)贝塞尔曲线

animation-play-state

设置动画暂停、播放

可选参数:

  • paused 动画暂停

  • running 动画播放

animation

所有动画属性的简写属性,除了 animation-play-state 属性

animation-fill-mode

设置样式以在动画不播放时应用元素

设置元素动画播放前显示的样式和播放结束后显示的样式

  • none 默认值。无样式
  • forwards 动画结束后,使用元素的结束属性值。
  • backwards 使用元素的起始值。
  • both 动画将遵循向前和向后的规则。

css中的计数器

counter-reset:name number

设置或重置一个计数器

  • name 计数器名称
  • number 计数器初始值,默认为0

参数:计数器名称

counter-increment: name number

  • name 计数器名字
  • number每次的增量,默认为1

counter(name)/counters(name,"分隔符")

显示计数结果

<style>
    li{list-style:none;}
    .father { padding-left: 20px; counter-reset: count; line-height: 1.6; color: #666; }

    .son:before { content: counters(count, '-') '. '; 
        counter-increment: count; 
            font-family: arial black; }
</style>
</head>
<body>
<ul class="father">
<li class="son">我的爱好
    <ul class="father">
            <li class="son">爬山</li>
            <li class="son">追剧</li>
            <li class="son">旅游</li>
    </ul>
</li>
<li class="son">我的偶像
    <ul class="father">
        <li class="son">王昱珩
          <ul class="father">
              <li class="son">最强大脑第二季选手</li>
              <li class="son">最强大脑第五季水之队队长</li>
          </ul>
        </li>
        <li class="son">胡歌</li>
        <li class="son">陈默</li>
    </ul>
</li>
<li class="son">web前端</li>
<li class="son">啦啦啦啦啦</li>
</ul>
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,122评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,070评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,491评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,636评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,676评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,541评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,292评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,211评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,655评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,846评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,965评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,684评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,295评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,894评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,012评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,126评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,914评论 2 355

推荐阅读更多精彩内容