六六互联

CSS3变形和CSS3过渡是元素从一种状态平滑转换到另一种状态

break-word; clear: both; text-indent: 28px; color: rgb(24, 30, 51); font-family: PingFangSC, 微软雅黑, 黑体, Arial, Helvetica, sans-serif; font-size: 18px; background-color: rgb(255, 255, 255);">CSS3变形 (transform) 和CSS3过渡 (transitions) 完全不同。可以这样理解:过渡是元素从一种状态平滑转换到另一种状态,而变形则定义了元素将会变成什么样子。CSS3中使用transform来定义变形属性,transform字面上就是变形,改变的意思。CSS变形transform是一些效果的集合,主要是移动(translate)、旋转(rotate)、缩放(scale)和倾斜(skew)这四种基本操作,还可以通过设置matrix矩阵来实现更复杂的效果,并且通过空格分隔还可以一次性实现多种变形效果。变形transform可以实现2D和3D两种效果。2D变形涉及的属性主要有transform变形函数和transform-origin变形原点。本文节点主要介绍变形transform 2D的相关知识。

break-word; clear: both; text-indent: 28px; color: rgb(24, 30, 51); font-family: PingFangSC, 微软雅黑, 黑体, Arial, Helvetica, sans-serif; font-size: 18px; background-color: rgb(255, 255, 255);">CSS3变形和CSS3过渡是元素从一种状态平滑转换到另一种状态

2D 变形的实现更广泛,浏览器支持更好,写起来也更简单些。CSS32D变形模块允许我们使用下列变形,如表6-2所示

6-2  2D变形类型                  

 

名称

 
 

描述

 
scale(缩放)
用来缩放元素(放大或缩小)
translate(移动)
 

在屏幕上移动元素(上下左右四个方向)

 
rotate(旋转)
 

按照一定角度旋转元素(单位为度)

 
 

skew(扭曲)

 
 

沿 X 和 Y 轴对元素进行斜切

 
 

matrix(矩阵变形)

 
 

允许你以像素精度来控制变形效果

 

如果要使用2D变形则需要先确定变形的基点以及变形方式,如图所示6-10所示:

CSS3变形和CSS3过渡是元素从一种状态平滑转换到另一种状态

6-10  2D变形需要先确定变形的基点以及变形方式

6.3.1 旋转(rotate)

rotate(<angle>):通过指定的角度参数对原元素指定2D rotation(2D旋转),首先通过transform-origin属性定义旋转的基点,其中angle是指旋转角度,如果设置的值为正数,表示顺时针旋转;如果设置的值为负数,则表示逆时针旋转,通过案例6-7来体验,效果如图6-11所示。

6-7  example07.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>2D旋转</title>
    <style>
        .demo {
            width: 300px; height: 300px; background-color: royalblue;
            float: left; margin-left: 200px;
               }
        .demoRotate{
            width: 300px; height: 300px; background-color: red;
            transform: rotate(45deg); /*顺时针旋转45度*/
            -webkit-transform: rotate(45deg); /*Chrome, Safari*/
            -moz-transform: rotate(45deg);  /*Firefox*/
            margin-top: 100px; margin-left: 200px;
           text-align: center; font-size: 20px;
                }
    </style>
</head>
<body>
    <div></div>
    <div>此div旋转45度</div>
</body>
</html>


CSS3变形和CSS3过渡是元素从一种状态平滑转换到另一种状态

6-11 rotate顺时针旋转45

6.3.2移动(translate)

translate()函数可以把元素从原来的位置移动,而不影响在x,y轴上的任何web组件,类似于position:relative。根据给定的left(x坐标),top(y坐标)位置参数,元素从其当前位置移动。移动translate分为3种情况:

1.translate(x,y)水平和垂直方向同时移动

translate移动的基点默认为元素中心点,可以根据transform-origin改变基点,translate表示对象按照设定的x,y参数值进行平移,如果第二个值没设置,默认为0,当值为负数时,反方向移动物体。通过案例6-8来体验,效果如图6-12所示。

6-8   example08.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>2D移动</title>
    <style>
        .demo {
           width: 300px; height: 300px;
background-color: royalblue; float: left;
                }
        .demoTranslate{ width: 300px; height: 300px; background-color: red;
            transform: translate(100px,150px); /*移动*/
            -webkit-transform: translate(100px,:150px);            -moz-transform: translate(100px,150px);  /*Firefox*/
            text-align: center; font-size: 20px;
             }
    </style>
</head>
<body>
    <div></div>
    <div>此div向右移动来100px,向下移动150px</div>
</body>
</html>

CSS3变形和CSS3过渡是元素从一种状态平滑转换到另一种状态

                                 图6-12 translateXY方向移动  

CSS3变形和CSS3过渡是元素从一种状态平滑转换到另一种状态

                                                            6-13  scaleXY方向缩放

2.  translateX(x)仅水平方向移动

相当于translate(x,0,)的简写,基点为元素中心点。通过给定一个X方向的数值指定一个translation,只向X轴进行移动元素,也可以通过transform-orign改变基点位置,如transform:translateX(100px)。

3. translateY(y)仅垂直方向移动

相当于translate(0,y)的简写,基点为元素在中心。通过给定一个Y方向的数值指定一个translation,只向X轴进行移动元素,也可以通过transform-orign改变基点位置,如transform:translateY(150px)。

6.3.3缩放(scale)

缩放scale和移动translate非常相似,缩放中心点:即元素的中心位置;基数:缩放就是既可以缩小,也可以放大;缩放基数为1,大于1放大,小于1缩小。其也具有三种情况:

1.scale(x,y)元素在水平和垂直方向同时缩放

scale(x[,y]):提供执行[sx,sy]缩放矢量的两个参数,指定一个2D scale(2D缩放),如果第二个参数未提供,则取于第一个参数一样的值,表示X,Y两个方向的缩放倍数一样,并以第一个参数为准。scale(X,Y)用于对元素进行缩放还可以通过transform-origin对元素的基点进行设置,同样基点在元素中心位置,其中X表示水平方向缩放的倍数,Y表示垂直方向的缩放倍数。其基本语法格式如:transform:scale(2,2.5)。通过案例6-9来体验,效果如图4-13所示。

6-9   example09.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>2D缩放</title>
    <style>
    .demoRotate{ width: 300px; height: 300px; background-color: red;
            transform: scale(1.5,1.2); /*缩放*/
            -webkit-transform: scale(1.5,1.2); /*Chrome, Safari*/
            -moz-transform: scale(1.5,1.2);  /*Firefox*/
            text-align: center;font-size: 20px;
            margin-left: 200px; float:left;
        }
   .demo { width: 400px; height: 400px; background-color: royalblue;
           margin-left: 200px; margin-top: 150px;
                }
    </style>
</head>
<body>
    <div>transform: scale(1.5,1.2);</div>
    <div></div>
</body>
</html>

2.  scaleX(x)x轴缩放

scaleX表示元素只在X轴(水平方向)缩放元素,默认值是(1,1),其基点一样是在元素的中心位置,可以通过transform-origin来改变元素的基点。其基本语法格式如:transform:scaleX(2)。

3.scaleY(y)y轴缩放

scaleY表示元素只在X轴(水平方向)缩放元素,其基点一样是在元素的中心位置,可以通过transform-origin来改变元素的基点。其基本语法格式如:transform:scaleY(2)。

注意:scale可以取负值,负值会让元素翻转并缩放,其基本语法格式如:transform: scale(-1.5,-1.2); /*缩放*/。通过案例6-10来体验仿3D 凸起效果,鼠标移入文字呈现凸起效果,效果如图6-14所示。

6-10  example10.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>3D文字凸起效果</title>
    <style>
        div.box {
            width: 200px; height: 325px; background-color: #fff;
            transition: all .25s linear; /*过渡效果*/
            display: flex; /*弹性盒子布局*/
            justify-content: center; /*垂直居中*/
            align-items: center; /*水平居中*/
            position: absolute; /*绝对定位*/
            top: 0; right: 0; bottom: 0; left: 0; margin: auto;
                   }
        div.box span {
           color: #ff0000; letter-spacing: 5px; /*字母之间间距*/
           font-size: 30px; font-weight: bold;
           text-shadow: 1px 1px 2px #000;  /*设置字体阴影*/
           transition: all .25s linear; /*过渡*/
        }
        div.box:hover {transform: translateY(-1px); /*变形*/
            box-shadow: 2px 2px 10px 2px #808080; /*设置阴影*/
}
        div.box:hover > span { font-size: 35px;}
    </style>
</head>
<body>
    <div>
        <span>CHINA</span>
    </div>
</body>
</html>
 

 

CSS3变形和CSS3过渡是元素从一种状态平滑转换到另一种状态

                                    图6-14  3D文字凸起效果

此综合案例使用到过渡(transition)和变形(transform)以及阴影等特效,当鼠标移入实现过渡,变形,阴影的结合使用达到平滑过渡凸起的效果

6.3.4扭曲(skew)

倾斜skew()函数能够让元素倾斜显示。它可以将一个对象以其中心位置围绕着X轴和Y轴按照一定的角度倾斜。这与rotate()函数的旋转不同,rotate()函数只是旋转,而不会改变元素的形状。skew()函数不会旋转,而只会改变元素的形状。设计时在2D里面创建3D透视图的时候必须的属性。扭曲skew和translate(移动),scale(缩放)一样同样具有三种情况

1.skew(x,y)

使元素在水平和垂直方向同时扭曲(X轴(水平方向)和Y轴(垂直方向)同时按一定的角度进行扭曲变形),skew(x,y)x轴和y轴上的skewtransformation(斜切变换),第一个参数x对应X轴,第二个参数y对应Y轴,此参数可选,如果第二个参数未提供,则值为0,也就是Y轴方向上无斜切。元素的扭曲也是以元素中心为基点,也可以通过transform-origin来改变元素的基点位置。其语法格式如:transform:skew(30deg,10deg)。通过案例6-11来体验,效果如图6-15所示。

6-11   example11.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>2D扭曲</title>
    <style>
        .demoRotate{
            width: 400px; height: 400px; background-color: red;
           /*倾斜 skew(x轴倾斜角度,y轴倾斜角度)*/
          transform: skew(20deg, 20deg); //x,y方向均旋转20度
          -webkit-transform: skew(20deg, 20deg); /*safari chrome*/
           -ms-transform: skew(20deg, 20deg); /*IE*/
            -o-transform: skew(20deg, 20deg); /*Opera*/
            -moz-transform: skew(20deg, 20deg); /*FireFox*/
            text-align: center; font-size: 20px;
margin-left: 200px; float:left;
                    }
        .demo { background-color: royalblue;margin-left: 200px;
margin-top: 150px; width: 400px; height: 400px;
                  }
    </style>
</head>
<body>
    <div> </div>
    <div></div>
</body>
</html>

CSS3变形和CSS3过渡是元素从一种状态平滑转换到另一种状态

6-15  skew(20deg,20deg)X方向和Y方向同时扭曲

2. skewX(x)

相当于skew(ax,0)和skew(ax)。按给定的角度沿X轴指定一个倾斜变形。skewX()使元素以其中心为基点,并在水平方向(X轴)进行倾斜变形,同样可以使用transform-origin来改变元素的基点位置。其基本语法格式如:transform:skewX(30deg)

3.skewY(y)

相当于skew(0,ay)。按给定的角度沿Y轴指定一个倾斜变形。skewY()用来设置元素以其中心为基点并给定的角度在垂直方向(Y轴)倾斜变形,同样可以使用transform-origin来改变元素的基点位置。其基本语法格式如:transform:skewY(30deg)

6.3.5改变基点transform-origin(X,Y)

任何一个元素都有一个中心点,默认情况之下,其中心点是居于元素X轴和Y轴的50%处。如下图6-16所示:

CSS3变形和CSS3过渡是元素从一种状态平滑转换到另一种状态

6-16元素中心点坐标

上述所有属性的变形都是在元素的正中心点位置进行的。如果要实现更加复杂的效果,可以使用css属性transform-origin来改变变形的基点。

transform-origin(X,Y)用来设置元素的运动的基点(参考点),默认点是元素的中心点,其中X和Y的值可以是百分值,像素等,X也可以是字符参数值left,center,right;Y和X一样除了百分值外,还可以设置为字符值top,center,bottom。2D的变形中的transform-origin属性可以是一个参数值,也可以是两个参数值。如果是两个参数值时,第一个值设置水平方向X轴的位置,第二个值是用来设置垂直方向Y轴的位置,如表6-3所示。

表6-3 transform-origin属性参数值

CSS3变形和CSS3过渡是元素从一种状态平滑转换到另一种状态

           改变变形的基点相应的写法如下表6-4所示:

表6-4 变形的基点关键词表示

CSS3变形和CSS3过渡是元素从一种状态平滑转换到另一种状态

通过案例6-12来体验通过transform-origin改变元素原点到左上角,然后进行顺时针旋转45度,效果如图6-17所示。

6-12   example12.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>transform-origin改变变形基点</title>
    <style>
        .wrapper { width: 300px; height: 300px; float: left; margin: 100px;
            border: 2px dotted red; line-height: 300px; text-align: center;
                  }
        .wrapper div {
            background: orange;
            -webkit-transform: rotate(45deg);
            transform: rotate(45deg); /*旋转45度角*/
        }
        .transform-origin div {
            transform-origin: left top;/*左上角为基点*/
            -webkit-transform-origin: left top;
        }
    </style>
</head>
<body>
    <div><div>原点在默认位置处</div> </div>
     <div class="wrapper  transform-origin"> <div>原点重置到左上角</div></div>
  </body>
</html>

CSS3变形和CSS3过渡是元素从一种状态平滑转换到另一种状态

6-17 transform-origin改变元素基点

注意:CSS3 transform属性同时执行多个不同动画(属性)效果,多个动画效果之间使用空格隔开,其基本语法格式如下:

transform: rotate(360deg) scale(2,2) skew(10deg,5deg);
/*中间用空格隔开 旋转 缩放 扭曲 等同时执行多个效果!*/

通过案例6-13来体验图片动态旋转,效果如图6-18所示。

6-13   example13.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>图片动态旋转</title>
    <style>
        ul {
            width: 220px;height: 220px;position: relative;
            margin-left: 500px; margin-top: 400px;  }
        li{
           list-style: none;position: absolute;left: 0;top: 0;
           transform-origin: left top;transition: all 1s;
        }
        ul:hover li:first-child{ transform: rotate(60deg); }
        ul:hover li:nth-child(2){transform: rotate(120deg); }
        ul:hover li:nth-child(3){transform: rotate(180deg);}
        ul:hover li:nth-child(4){transform: rotate(240deg); }
        ul:hover li:nth-child(5){transform: rotate(300deg);}
        ul:hover li:last-child{transform: rotate(360deg);}
    </style>
</head>
<body>
   <ul>
   <li> <img src="image/index6.png"style="width: 200px; height: 280px;" ></li>
   <li><img src="image/index7.png" style="width: 200px; height: 280px;" > </li>
   <li><img src="image/index8.png"style="width: 200px; height: 280px;"></li>
   <li><img src="image/index7.png"style="width: 200px; height: 280px;" ></li>
   <li><img src="image/index6.png"style="width: 200px; height: 280px;" ></li>
   <li><img src="image/index8.png" style="width: 200px; height: 280px;"></li>
    </ul>
</body>
</html>

CSS3变形和CSS3过渡是元素从一种状态平滑转换到另一种状态

6-18 图片动态旋转

通过案例6-14来体验transform变形相册展示,效果如图6-19所示。

6-14   example14.html

 

<!DOCTYPE  html>

 

<html>

 

<head>

 

     <meta charset="utf-8">

 

     <title>transform基础用法</title>

 

     <style>

 

         div{

 

             width: 300px;height: 200px; background-color: red;

 

             text-align: center;float: left;margin-left: 120px;

 

             margin-top: 80px;border: 1px seagreen solid;

 

         }

 

         #trans-1{ /*逆时针旋转-10度,方向放大 */

 

            transform: rotate(-10deg)  scale(1.2);

 

             background-color: rgba(0,225,0,1);

 

             background-image: url(image/img3.png);

 

            background-size:183px 100px;

 

             /*background-repeat:no-repeat;*/

 

         }

 

         #trans-2{

 

             transform: skewX(-10deg); /*x方向逆时针扭曲10度*/

 

             background-image: url(image/img2.png);

 

             background-size:300px 200px;

 

         }

 

         #trans-3{

 

             /*x,y方向扭曲10,20度, x方向收缩*/

 

             transform: skew(10deg,20deg) scaleX(0.5) ;

 

             background-image: url(image/img1.png);

 

             background-size:320px 200px;

 

             background-repeat: no-repeat;

 

        }

 

     </style>

 

</head>

 

<body>

 

     <div id="trans-1"></div>

 

     <div id="trans-2"></div>

 

     <div id="trans-3"></div>

 

</body>

 

</html>

 


CSS3变形和CSS3过渡是元素从一种状态平滑转换到另一种状态

                             图6-19  transform 实现简单图片变形效果


相关推荐