CSS transform 屬性詳解:打造多樣化的元素變形效果

更新日期: 2024 年 11 月 4 日

在現代網頁設計中,靜態的元素常常無法滿足視覺效果的需求,而 CSS 提供的 transform 屬性讓我們可以輕鬆地實現各種視覺變化,例如旋轉、縮放、移動和傾斜。

transform 為元素添加了維度感與動態效果,使頁面更具吸引力。

本文將介紹 transform 屬性的用法和常見的變形功能,並通過範例來幫助您,了解如何靈活應用這個屬性。


transform 屬性介紹

transform 是 CSS 中的一個強大屬性,可以對元素進行多種變形操作,如移動、旋轉、縮放和傾斜等。

這些變形效果不會影響到元素的實際位置,僅僅是視覺上的變化,適合用於動畫和動態效果。

基本語法

transform: function(value);

transform 可以使用多種函數來實現不同的變形效果,例如 translaterotatescaleskew 等。多個函數可以組合使用,創建複雜的效果。


常見的 transform 函數

translate:移動

translate 函數用於移動元素的位置,根據指定的 xy 軸偏移量進行平移。

translateX 只會影響水平位移,translateY 只會影響垂直位移。

transform: translate(50px, 100px);  /* 移動元素 50px 到右方,100px 到下方 */
transform: translateX(50px);        /* 僅水平方向移動 */
transform: translateY(100px);       /* 僅垂直方向移動 */

這種平移效果適合用於元素移動動畫,或在不同情境下改變元素位置。

rotate:旋轉

rotate 用於旋轉元素,根據指定的角度進行順時針或逆時針旋轉,單位為 deg(度數)。

transform: rotate(45deg);    /* 順時針旋轉 45 度 */
transform: rotate(-45deg);   /* 逆時針旋轉 45 度 */

旋轉效果通常搭配過渡動畫,創建旋轉圖標、按鈕或圖片的視覺效果。

scale:縮放

scale 函數用於縮放元素的大小。

scaleX 影響寬度,scaleY 影響高度,而 scale 會同時影響寬度和高度。

1 表示原始大小,大於 1 則放大,介於 01 則縮小。

transform: scale(1.5);       /* 放大 1.5 倍 */
transform: scaleX(2);        /* 僅寬度放大 2 倍 */
transform: scaleY(0.5);      /* 僅高度縮小至 0.5 倍 */

縮放效果常用於按鈕或圖片的懸停(hover)效果,讓使用者操作時有更直觀的視覺反饋。

skew:傾斜

skew 用於傾斜元素,通過指定 xy 軸的角度進行傾斜變形。skewX 影響水平方向,skewY 影響垂直方向。

transform: skew(20deg, 10deg);   /* 水平傾斜 20 度,垂直傾斜 10 度 */
transform: skewX(20deg);         /* 僅水平傾斜 20 度 */
transform: skewY(10deg);         /* 僅垂直傾斜 10 度 */

傾斜效果適用於創造錯視效果,或增添卡片和按鈕的視覺趣味。


多重變形

transform 屬性支持多重變形函數的連續使用,可以實現更複雜的效果。

例如,將元素移動、旋轉和縮放同時應用:

transform: translate(50px, 50px) rotate(30deg) scale(1.2);

這段代碼將元素移動到右下方 50px、順時針旋轉 30 度 並放大 1.2 倍

多重變形效果可以根據需求排列組合,從而創建出豐富的動畫效果。


3D 變形

transform 還支持 3D 變形效果,例如 rotateXrotateYtranslateZ 等。

這些 3D 變形函數讓元素具有三維空間的視覺效果,但需搭配 perspective 屬性才能更好地展示 3D 效果。

例子:旋轉元素在 3D 空間中

transform: rotateX(45deg) rotateY(30deg);

這段代碼會使元素在 X 軸上旋轉 45 度,在 Y 軸上旋轉 30 度,從而產生 3D 視覺效果。3D 變形可以用來創建翻轉卡片、旋轉圖片等特殊動畫。


使用範例

例子 1:按鈕的放大效果

使用 scale 來放大按鈕,增加懸停時的視覺效果:

.button {
    width: 100px;
    height: 100px;
    background: #007bff;
    color: white;
    transition: transform 0.3s;
}

.button:hover {
    transform: scale(1.1);
}

當使用者懸停在按鈕上時,按鈕會放大 10%,創造出輕微的彈跳感。

例子 2:旋轉圖標效果

在圖標懸停時,使用 rotate 進行旋轉動畫:

.icon {
    display: inline-block;
    transition: transform 0.3s;
}

.icon:hover {
    transform: rotate(180deg); /* 懸停時旋轉 180 度 */
}

這段代碼將圖標設置為懸停時旋轉 180 度的效果,適合用於導航按鈕或操作提示圖標。

例子 3:3D 翻轉卡片效果

在卡片懸停時使用 rotateYperspective 屬性創建 3D 翻轉效果:

<div class="card">
    <div class="card-inner">
        <div class="card-front">Front Side</div>
        <div class="card-back">Back Side</div>
    </div>
</div>
* {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
}

body {
    display: flex;
    justify-content: center;
    align-items: center;
    min-height: 100vh;
    background-color: #f0f0f0;
}

.card {
    width: 200px;
    height: 300px;
    perspective: 1000px;
    margin: 20px;
}

.card-inner {
    width: 100%;
    height: 100%;
    position: relative;
    transform-style: preserve-3d;
    transition: transform 0.6s ease-in-out;
    box-shadow: 0 8px 16px rgba(0, 0, 0, 0.3); /* 增加陰影效果 */
    border-radius: 10px; /* 加入圓角 */
}

.card:hover .card-inner {
    transform: rotateY(180deg);
}

.card-front, .card-back {
    position: absolute;
    width: 100%;
    height: 100%;
    display: flex;
    justify-content: center;
    align-items: center;
    font-size: 1.5em;
    color: #fff;
    border-radius: 10px; /* 與內部的圓角保持一致 */
    backface-visibility: hidden;
}

.card-front {
    background-color: #4a90e2;
}

.card-back {
    background-color: #e94e77;
    transform: rotateY(180deg);
}

在此例中,卡片懸停時會翻轉 180 度,從而顯示背面。這種 3D 翻轉效果適合於展示卡片背面資訊或產品詳情。


使用注意事項

  • 過渡效果:為了讓變形效果更平滑,可以搭配 transition 屬性實現過渡動畫,提升使用者體驗。
  • 性能考量transform 屬性經常使用於動畫,但過多的變形操作可能會影響頁面性能,建議適當控制效果的使用。
  • 3D 變形與透視:在進行 3D 變形時,需要搭配 perspective 屬性設置透視距離,否則 3D 效果不明顯。

結論

CSS transform 是一個強大的屬性,能夠實現移動、旋轉、縮放和傾斜等多種變形效果,並支持創建豐富的 3D 效果。

透過靈活應用 transform 屬性,可以提升頁面的動態感,增強用戶的交互體驗。

無論是按鈕放大、圖標旋轉,還是卡片翻轉,transform 為網頁設計提供了無限的可能性。

Similar Posts