zoukankan      html  css  js  c++  java
  • CSS3 transform

    部分内容转载自 https://www.w3cplus.com/content/css3-transform

    Transform字面上就是变形,改变的意思。在CSS3transform主要包括以下几种:旋转rotate扭曲skew缩放scale移动translate以及矩阵变形matrix
    一、Rotate(旋转)

    2D旋转,需要先有旋转的基点(transform-origin)的定义,

    二、Translate平移

    基点默认为元素中心点。Translate(X,Y)   translateX(X)   translateY(Y) .

    示例:不知道DIV的高宽,实现文本水平 垂直居中。

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>CSS 动画</title>
        <style type="text/css">
            .demo{
               padding:20px;
                background:orange;
                color:#fff;
                position: absolute;
                top:50%;
                left:50%;
                border-radius: 5px;
                -webkit-transform:translate(-50%,-50%);
                -moz-transform:translate(-50%,-50%);
                transform:translate(-50%,-50%);
            }
        </style>
    </head>
    <body>
    <div class="demo">我不知道自己的高度和宽度是多少,我要实现水平居中!</div>
    </body>
    </html>
    

      

    三、Scale(缩放)

    缩放中心是元素的中心。缩放基数为1,缩放值大于1就是放大,小于1就是缩小。scale(X,Y)   scaleX(X)  scaleY(Y) 若是scale(只有一个值)那意思就是X=Y。

    四、Skew(扭曲)

    扭曲中心是元素中心。扭曲单位为deg。语法为skew(X,Y);skewX(X);skewY(Y)。如:transform:skew(30deg,10deg)

    五、Matrix(矩阵)

    matrix(<number>, <number>, <number>, <number>, <number>, <number>) : 以一个含六值的(a,b,c,d,e,f)变换矩阵的形式指定一个2D变换,相当于直接应用一个[a b c d e f]变换矩阵。就是基于水平方向(X轴)和垂直方向(Y轴)重新定位元素,此属性值使用涉及到数学中的矩阵,我在这里只是简单的说一下CSS3中的transform有这么一个属性值,如果有感兴趣的朋友可以去了解更深层次的martix使用方法,这里就不多说了。 

    也可以理解为:matrix(scaleX(),skewY(),skewX(),scaleY(),translateX(),translateY());

    http://www.zhangxinxu.com/wordpress/2012/06/css3-transform-matrix-%E7%9F%A9%E9%98%B5/

    https://www.cnblogs.com/Ivy-s/p/6786622.html

    六、改变元素基点(tansform-origin)

    transform-origin就是更改元素的基点,而元素基点默认为其中心位置,换句话说我们没有使用transform-origin改变元素基点位置的情况下,transform进行的rotate,translate,scale,skew,matrix等操作都是以元素自己中心位置进行变化的。但是有时候我们需要在不同的位置对元素进行操作,那就需要改变元素基点,使元素基点不在中心位置,达到需要的要求。

    transform-origin(X,Y):用来设置元素的运动的基点(参照点)。默认点是元素的中心点。其中X和Y的值可以是百分值,em,px,其中X也可以是字符参数值left,center,right;Y和X一样除了百分值外还可以设置字符值top,center,bottom,这个看上去有点像我们background-position设置一样;下面我列出他们相对应的写法:

    1、top left | left top 等价于 0 0 | 0% 0%

    2、top | top center | center top 等价于 50% 0

    3、right top | top right 等价于 100% 0

    4、left | left center | center left 等价于 0 50% | 0% 50%

    5、center | center center 等价于 50% 50%(默认值)

    6、right | right center | center right 等价于 100% 50%

    7、bottom left | left bottom 等价于 0 100% | 0% 100%

    8、bottom | bottom center | center bottom 等价于 50% 100%

    9、bottom right | right bottom 等价于 100% 100%

    其中 left,center right是水平方向取值,对应的百分值为left=0%;center=50%;right=100%而top center bottom是垂直方向的取值,其中top=0%;center=50%;bottom=100%;如果只取一个值,表示垂直方向值不变,但是background-position不需要做浏览器兼容,而transform-origin需要做浏览器兼容。

     //Mozilla内核浏览器:firefox3.5+
      -moz-transform-origin: x y;
      //Webkit内核浏览器:Safari and Chrome
      -webkit-transform-origin: x y;
      //Opera
      -o-transform-origin: x y ;
      //IE9
      -ms-transform-origin: x y;
      //W3C标准
      transform-origin: x y ;
    它在不同浏览器内核下的书写规则:
      //Mozilla内核浏览器:firefox3.5+
      -moz-transform: rotate | scale | skew | translate ;
     //Webkit内核浏览器:Safari and Chrome
      -webkit-transform: rotate | scale | skew | translate ;
     //Opera
      -o-transform: rotate | scale | skew | translate ;
     //IE9
      -ms-transform: rotate | scale | skew | translate ;
     //W3C标准
      transform: rotate | scale | skew | translate ;
    来自W3C plus的示例:
      HTML Code:
    <div class="menu"> <ul class="clearfix"> <li class="item translate"><a href="#">Translate</a></li> <li class="item translate-x"><a href="#">TranslateX</a></li> <li class="item translate-y"><a href="#">TranslateY</a></li> <li class="item rotate"><a href="#">Rotate</a></li> <li class="item scale"><a href="#">Scale</a></li> <li class="item scale-x"><a href="#">ScaleX</a></li> <li class="item scale-y"><a href="#">ScaleY</a></li> <li class="item skew"><a href="#">Skew</a></li> <li class="item skew-x"><a href="#">SkewX</a></li> <li class="item skew-y"><a href="#">SkewY</a></li> <li class="item matrix"><a href="#">Matrix</a></li> </ul> </div> 著作权归作者所有。 商业转载请联系作者获得授权,非商业转载请注明出处。 原文: https://www.w3cplus.com/content/css3-transform © w3cplus.com
    CSS code:
    .menu ul {
        border-top: 15px solid black;
        padding: 0 10px;    
     }
     .menu ul li a{
        color: #fff;
        float: left;
        margin: 0 5px;
        font-size: 14px;
        height: 50px;
        line-height: 50px;
        text-align: center;
         65px;
        padding: 10px 5px;
        background: #151515;
        -moz-border-radius: 0 0 5px 5px;
        -webkit-border-radius: 0 0 5px 5px;
        border-radius: 0 0 5px 5px;
        -moz-box-shadow: 0 0 1px #ccc,inset 0 0 2px #fff;
        -webkit-box-shadow: 0 0 1px #ccc,inset 0 0 2px #fff;
        box-shadow: 0 0 1px #ccc,inset 0 0 2px #fff;
        text-shadow: 0 1px 1px #686868;
        text-decoration: none;
     }
     .menu ul li.translate a{
        background: #2EC7D2;
     }
     .menu ul li.translate-x a {
        background: #8FDD21;
     }
     .menu ul li.translate-y a {
        background: #F45917;
     }
     .menu ul li.rotate a {
        background: #D50E19;
     }
     .menu ul li.scale a {
        background: #cdddf2;
     }
     .menu ul li.scale-x a {
       background: #0fDD21;
     }
     .menu ul li.scale-y a {
       background: #cd5917;
     }
     .menu ul li.skew a {
       background: #519;
     }
     .menu ul li.skew-x a {
       background: #D50;
     }
     .menu ul li.skew-y a {
       background: #E19;
     }
     .menu ul li.matrix a {
       background: #919;
     }
    /*加上hover效果*/
    
    

     加上Hover效果:

    .menu ul li.translate a:hover {
         -moz-transform: translate(-10px,-10px);
         -webkit-transform: translate(-10px,-10px);
         -o-transform: translate(-10px,-10px);
         -ms-transform: translate(-10px, -10px);
         transform: translate(-10px,-10px);
      }
      .menu ul li.translate-x a:hover {
        -moz-transform: translateX(-10px);
        -webkit-transform: translateX(-10px);
        -o-transform: translateX(-10px);
        -ms-transform: translateX(-10px);
        transform: translateX(-10px);          
      }
      .menu ul li.translate-y a:hover {
         -moz-transform: translateY(-10px);
         -webkit-transform: translateY(-10px);
         -o-transform: translateY(-10px);
         -ms-transform: translateY(-10px);
         transform: translateY(-10px);          
      }
     .menu ul li.rotate a:hover {
       -moz-transform: rotate(45deg);
       -webkit-transform: rotate(45deg);
       -o-transform: rotate(45deg);
       -ms-transform: rotate(45deg);
       transform: rotate(45deg);          
     }
     .menu ul li.scale a:hover {
       -moz-transform: scale(0.8,0.8);
       -webkit-transform: scale(0.8,0.8);
       -o-transform: scale(0.8,0.8);
       -ms-transform: scale(0.8,0.8);
       transform: scale(0.8,0.8);          
     }
      .menu ul li.scale-x a:hover {
        -moz-transform: scaleX(0.8);
        -webkit-transform: scaleX(0.8);
        -o-transform: scaleX(0.8);
        -ms-transform: scaleX(0.8);
        transform: scaleX(0.8);          
     }
      .menu ul li.scale-y a:hover {
         -moz-transform: scaleY(1.2);
         -webkit-transform: scaleY(1.2);
         -o-transform: scaleY(1.2);
         -ms-transform: scaleY(1.2);
         transform: scaleY(1.2);          
     }
      .menu ul li.skew a:hover {
         -moz-transform: skew(45deg,15deg);
         -webkit-transform: skew(45deg,15deg);
         -o-transform: skew(45deg,15deg);
         -ms-transform: skew(45deg,15deg);
         transform: skew(45deg,15deg);          
      }
      .menu ul li.skew-x a:hover {
        -moz-transform: skewX(-30deg);
        -webkit-transform: skewX(-30deg);
        -o-transform: skewX(-30deg);
        -ms-transform: skewX(-30deg);
        transform: skewX(-30deg);          
     }
      .menu ul li.skew-y a:hover {
        -moz-transform: skewY(30deg);
        -webkit-transform: skewY(30deg);
        -o-transform: skewY(30deg);
        -ms-transform: skewY(30deg);
        transform: skewY(30deg);          
     }
      .menu ul li.matrix a:hover {
        -moz-transform: matrix(1,1,-1,0,0,0);
        -webkit-transform: matrix(1,1,-1,0,0,0);
        -o-transform: matrix(1,1,-1,0,0,0);
        -ms-transform: matrix(1,1,-1,0,0,0);
        transform: matrix(1,1,-1,0,0,0);          
      }
    

      

     做出来就是这个效果。

    加上Hover后的效果:

     

     多个属性一起写的示例:

     .demo a{
        100px;
       padding: 5px;
       background: red;
       display: block;
     }
     .demo a:hover {  
       -moz-transform: rotate(45deg) scale(0.8,1.2) skew(60deg,-30deg);
       -webkit-transform: rotate(45deg) scale(0.8,1.2) skew(60deg,-30deg);
       -o-transform: rotate(45deg) scale(0.8,1.2) skew(60deg,-30deg);
       -ms-transform: rotate(45deg) scale(0.8,1.2) skew(60deg,-30deg);
       transform: rotate(45deg) scale(0.8,1.2) skew(60deg,-30deg);
     }
    著作权归作者所有。
    商业转载请联系作者获得授权,非商业转载请注明出处。
    原文: https://www.w3cplus.com/content/css3-transform © w3cplus.com
    

      *****!多个属性一起写的时候需要注意不能用逗号隔开,需要使用空格隔开。而且transform只能应用于块元素。

      

     

     

  • 相关阅读:
    PHP识别二维码功能,php-zbarcode 安装
    《架构即未来》读后感(三)
    MVC设计模式案例分析
    SOA
    《架构即未来》读后感(二)
    基于网络拓扑及告警的故障根因定位系统实现及算法研究赛题需求分析
    《架构即未来》读后感(一)
    《大型网站技术架构》读后感(二)
    《一线架构师实践指南》读后感(三)
    《大型网站技术架构》读后感(三)
  • 原文地址:https://www.cnblogs.com/potato-lee/p/8513450.html
Copyright © 2011-2022 走看看