CSS3中 transform 和 transition


transform: 變形。改變

語法:transform: none|transform-functions;

旋轉 rotate

  • 2D 旋轉:rotate(angle) 順時針旋轉給定的角度,允許負值 rotate(30deg)
  • 3D 旋轉:rotate3d(x,y,z,angle)
  • 沿着 X 軸的 3D 旋轉:rotateX(angle)
  • 定義沿着 Y 軸的 3D 旋轉:rotateY(angle)
  • 定義沿着 Z 軸的 3D 旋轉:rotateZ(angle)

拉伸 skew

  • 沿着 X 和 Y 軸的 2D 傾斜轉換:skew(x-angle,y-angle)。舉例:skew(30deg,20deg)
  • 沿着 X 軸的 2D 傾斜轉換:skewX(angle)
  • 沿着 Y 軸的 2D 傾斜轉換:skewY(angle)

縮放 scale

  • 2D 縮放轉換:scale(x,y)
  • 通過設置 X 軸的值來定義縮放轉換:scaleX(x)。舉例:scaleX(1),實際效果相當於盒子被拉寬x倍,1的話就沒有改變。
  • 通過設置 Y 軸的值來定義縮放轉換:scaleX(y)。
  • 3D 縮放轉換:scale3d(x,y,z)
  • 通過設置 Z 軸的值來定義 3D 縮放轉換:scaleZ(z)
開發中遇到的問題以及解決:
  1. 在開發中發現,畫一個圓點,設置的寬高數值比較小時 width: 0.15rem; height: 0.15rem; border-radius: 50%;發現圓形並沒有那么圓
    猜想問題原因:個人認為是 js 對浮點數計算不精確,導致的。
    解決辦法1:調整寬高,比如:width:0.14rem; height: 0.14rem; (有時候能起作用,治標不治本)
    解決辦法2:設置 width: 15rem; height: 15rem; transform: scale(0.1); transform-origin: center center; (先放大,再縮小,比較好)

  2. 突破瀏覽器限制字體大小不能低於12px的限制

p: {
  font-size: 12px;
  -webkit-transform: scale(0.75);  /* 縮小至原的0.75倍 */
}

偏移 translate

  • 2D 偏移:translate(x,y)
  • 延 X 軸移動 translateX(x)
  • 延 Y 軸移動 translateX(y)
  • 3D 偏移:translate3d(x,y,z)
  • 延 Z 軸移動 translateX(z)
    各個瀏覽器兼容寫法舉例:
.box{
  transform: translate(50px, 100px);
  -ms-transform: translate(50px, 100px); /* IE 9 */
  -webkit-transform: translate(50px, 100px); /* Safari游獵 和 Chrome谷歌 */
  -o-transform: translate(50px, 100px); /* Opera */
  -moz-transform: translate(50px, 100px);} /* Firefox */

矩陣 matrix

  • 2D 轉換,使用六個值的矩陣:matrix(n,n,n,n,n,n),同做矩陣的方式實現所有的2D轉換方法
  • 3D 轉換,使用 16 個值的 4x4 矩陣:matrix3d(n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n)
    矩陣解釋起來有點長,它的作用也完全能被更好理解的其它方式代替,這里不展開介紹。

透視 perspective

  • 為 3D 轉換元素定義透視視圖:perspective(n)
    作用:perspective 屬性定義 3D 元素距視圖的距離,以像素計。該屬性允許您改變 3D 元素查看 3D 元素的視圖。當為元素定義 perspective 屬性時,其子元素會獲得透視效果,而不是元素本身。

注:perspective 屬性只影響 3D 轉換元素。

例子:

    #father {
      width: 100vw;
      height: 100vh;
    border: 1px solid #000;
      position: relative;
      display: flex;
      justify-content: center;
      align-items: center;
      perspective: 100px;
      perspective-origin: center center;
    }

    #child {
      height: 100px;
      width: 100px;
      cursor: pointer;
      position: absolute;
      animation: mymove 3s linear 0s 1 normal;
      background-color: aqua;
      transform: 
        rotate3d(1, 0, 0, 360deg) 
        scale3d(1, 1, 2)
        translate3d(0px, 0px, 10px);
    }

-------------------------------------------
    <div id="father">
      <div id="child">看效果</div>
    </div>

起點位置 transform-origin

改變起點位置 transform-origin: x-axis y-axis z-axis; 分別定義了,x軸、y軸、z軸的偏移量,允許負數。

  • x-axis、y-axis 的值:
    1. 關鍵字[keyword]:top、left、center、right、bottom。
    2. 具體值:%、em、px等
  • z-axis 的值:[length]

下面例子中的三種寫法都是相等的,也是 transform-origin 的默認值:

#app {
  transform-origin: center
  transform-origin: center center 0
  transform-origin: 50% 50% 0
}

關鍵字和百分比之間的對應關系:

  • top = top center = center top = 50% 0
  • right = right center = center right = 100%或(100% 50%)
  • bottom = bottom center = center bottom = 50% 100%
  • left = left center = center left = 0或(0 50%)
  • center = center center = 50%或(50% 50%)
  • top left = left top = 0 0
  • right top = top right = 100% 0
  • bottom right = right bottom = 100% 100%
  • bottom left = left bottom = 0 100%

transition:允許CSS屬性值在一定的時間區間內平滑的過渡,

需要事件的觸發,例如單擊、獲取焦點、失去焦點等
transition:property duration timing-function delay;

  • property: CSS的屬性,例如:width|height|all 為 none 時停止所有的運動,可以為 transform
  • duration: 持續時間
  • 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 之間的數值。
  • delay: 延遲

注意:當 property 為 all 的時候,為所有變動添加過渡
例如:transition: all 2s ease 0s;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM