变换中心

Frontend SELF ZH
第 23 级 , 课程 1
可用

2.1 属性 transform-origin

CSS 中的 transform-origin 属性定义了进行变换时的参考点,比如 rotatescaleskewtranslate。默认情况下,这个点在元素的中心,但你可以改变它的位置,来实现想要的视觉效果。

transform-origin 基础

属性 transform-origin 的语法:

    
      element {
        transform-origin:  x-axis y-axis z-axis;
      }
    
  

其中:

  • x-axis: 定义点在水平轴上的位置
  • y-axis: 定义点在竖直轴上的位置
  • z-axis: 定义点在 Z 轴上的位置(用于 3D 变换)

可能的值:

  • 关键字: top, right, bottom, left, center
  • 百分比值: 用百分比表示的元素大小的起始点
  • 绝对值: 用像素或其他单位表示的起始点

值的示例:

  • transform-origin: 50% 50%; — 元素的中心(默认值)
  • transform-origin: 0 0; — 元素的左上角
  • transform-origin: 100% 100%; — 元素的右下角
  • transform-origin: 50px 100px; — 从左上角偏移 50 像素向右和 100 像素向下

中心起始点(默认)

在这个例子中,旋转变换将围绕元素的中心进行。

HTML
    
      <!DOCTYPE html>
      <html lang="en">
        <head>
          <meta charset="UTF-8">
          <meta name="viewport" content="width=device-width, initial-scale=1.0">
          <title>中心起始点</title>
          <style>
            .box {
              width: 100px;
              height: 100px;
              background-color: #3498db;
              transform: rotate(45deg);
            }
          </style>
        </head>
        <body>
          <div class="box"></div>
        </body>
      </html>
    
  

2.2 改变起始点

将起始点移到左上角

在这个例子中,变换起始点被移动到元素的左上角。

HTML
    
      <!DOCTYPE html>
      <html lang="en">
        <head>
          <meta charset="UTF-8">
          <meta name="viewport" content="width=device-width, initial-scale=1.0">
          <title>左上角起始点</title>
          <style>
            .box {
              width: 100px;
              height: 100px;
              background-color: #e74c3c;
              transform: rotate(45deg);
              transform-origin: top left;
            }
          </style>
        </head>
        <body>
          <div class="box"></div>
        </body>
      </html>
    
  

将起始点移到右下角

在这个例子中,变换起始点被移到元素的右下角。

HTML
    
      <!DOCTYPE html>
      <html lang="en">
        <head>
          <meta charset="UTF-8">
          <meta name="viewport" content="width=device-width, initial-scale=1.0">
          <title>右下角起始点</title>
          <style>
            .box {
              width: 100px;
              height: 100px;
              background-color: #2ecc71;
              transform: rotate(45deg);
              transform-origin: bottom right;
            }
          </style>
        </head>
        <body>
          <div class="box"></div>
        </body>
      </html>
    
  

2.3 指定值

使用百分比值

在这个例子中,变换起始点在水平为 25% 和垂直为 75%。

HTML
    
      <!DOCTYPE html>
      <html lang="en">
        <head>
          <meta charset="UTF-8">
          <meta name="viewport" content="width=device-width, initial-scale=1.0">
          <title>带有百分比值的起始点</title>
          <style>
            .box {
              width: 100px;
              height: 100px;
              background-color: #9b59b6;
              transform: rotate(45deg);
              transform-origin: 25% 75%;
            }
          </style>
        </head>
        <body>
          <div class="box"></div>
        </body>
      </html>
    
  

使用绝对值

在这个例子中,变换起始点在水平偏移了 50 像素,垂直偏移了 20 像素。

HTML
    
      <!DOCTYPE html>
      <html lang="en">
        <head>
          <meta charset="UTF-8">
          <meta name="viewport" content="width=device-width, initial-scale=1.0">
          <title>带有绝对值的起始点</title>
          <style>
            .box {
              width: 100px;
              height: 100px;
              background-color: #f1c40f;
              transform: rotate(45deg);
              transform-origin: 50px 20px;
            }
          </style>
        </head>
        <body>
          <div class="box"></div>
        </body>
      </html>
    
  

2.4 实际应用

围绕特定点旋转元素

使用 transform-origin 对于创建绕特定点旋转的元素非常有用。比如做个钟表的指针。

HTML
    
      <!DOCTYPE html>
      <html lang="en">
        <head>
          <meta charset="UTF-8">
          <meta name="viewport" content="width=device-width, initial-scale=1.0">
          <title>钟表指针旋转</title>
          <style>
            .clock {
              position: relative;
              width: 200px;
              height: 200px;
              border: 5px solid #333;
              border-radius: 50%;
              margin: 50px auto;
            }

            .hand {
              position: absolute;
              bottom: 50%;
              left: 50%;
              width: 5px;
              height: 50%;
              background-color: #333;
              transform-origin: bottom center;
            }

            .hour-hand {
              transform: rotate(30deg); /* 例如指针指向1点 */
            }
          </style>
        </head>
        <body>
          <div class="clock">
            <div class="hand hour-hand"></div>
          </div>
        </body>
      </html>
    
  

创建可缩放元素

改变起始点对于相对不同点来缩放元素也很有用,比如创建动态界面。

HTML
    
      <!DOCTYPE html>
      <html lang="en">
        <head>
          <meta charset="UTF-8">
          <meta name="viewport" content="width=device-width, initial-scale=1.0">
          <title>可缩放元素</title>
          <style>
            .box {
              width: 100px;
              height: 100px;
              background-color: #1abc9c;
              transition: transform 0.5s;
              transform-origin: top left;
            }

            .box:hover {
              transform: scale(1.5);
            }
          </style>
        </head>
        <body>
          <div class="box"></div>
        </body>
      </html>
    
  
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION