CSS 属性 transform-origin 有助于设置元素转换的原点。它是发生转变的点。例如,旋转中心是 rotate() 函数的变换原点。
默认情况下,transform 的原点是中心。
可能的值
CSS 属性 transform-origin 可以具有以下值:
- x-offset:一个 <length> 或 <percentage>值,用于定义设置转换原点距离框左侧的距离。
- offset-keyword:指定相应偏移值的关键字,即 left, right, top, bottom或 center。
- y-offset:一个 <length> 或 <percentage>值,用于定义设置转换原点距离框的顶部有多远。
- x-offset-keyword:指定相应偏移值的关键字,即左偏移值、偏移右偏移值或居中偏移值。它定义了设置转换原点离框左侧有多远。
- y-offset-keyword:指定相应偏移值的关键字,即顶部、底部或中心。它定义了设置转换原点距离框顶部多远。
- z-offset:一个 <length> 值,用于定义设置 z=0 原点离用户眼睛多远。<percentage>值是不可接受的,因为这会使语句无效。
下表列出了关键字和百分比值的映射:
关键词 | 百分比值 |
---|---|
left | 0% |
center | 50% |
right | 100% |
top | 0% |
bottom | 100% |
适用于
所有可转换的元素。
语法
transform-origin = x-axis y-axis z-axis;
此处的 x 轴、y 轴和 z 轴值分别表示变换原点的水平、垂直和深度位置。它们可以以各种单位指定,例如像素、百分比或关键字。
以下是编写语法的各种方法:
/* one-value syntax */
transform-origin = 20px;
transform-origin = 30%;
transform-origin = left;
/* x-offset-keyword / y-offset-keyword */
transform-origin = left top;
/* y-offset-keyword / x-offset-keyword */
transform-origin = bottom right;
/* x-offset-keyword / y-offset */
transform-origin = left 5px;
/* y-offset-keyword / x-offset-keyword */
transform-origin = bottom 10%;
/* x-offset / y-offset */
transform-origin = 3cm 5px | 25% 30%;
/* x-offset / y-offset / z-offset */
transform-origin = 3cm 5px -5px;
/* x-offset-keyword / y-offset-keyword / z-offset */
transform-origin = left top 3cm;
/* y-offset-keyword / x-offset-keyword / z-offset*/
transform-origin = bottom right 3cm;
CSS 属性 transform-origin 可以通过其中一种方式指定,即使用一个、两个或三个值,其中每个值表示一个偏移值。
1. 单值语法
- 值必须是 <length>、<percentage> 或关键字 left、center、right、top 和 bottom 之一。
- 当指定单个值(如<length>或<percentage>时,它将确定水平偏移量(x 轴)。
2. 双值语法
- 一个值必须是 <length>、<percentage>,或者是关键字 left、center 和 right 之一。
- 第二个值必须是 <length>、<percentage> 或关键字 top、center 和 bottom 之一。
- 如果指定了两个或多个值,并且其中一个值是关键字中心,则第一个值确定水平偏移量,第二个值确定垂直偏移量。
3. 三值语法
- 前两个值与两个值语法的值相同。
- 第三个值必须始终是 <length> 值,表示 Z 偏移量。
注意:对于所有SVG元素,transform-origin的初始值为0 0,但根<svg>元素和<svg>元素除外,它们是外部XML命名空间的直接后代,以及transform-origin为50%的元素。
CSS transform-origin - 示例
以下示例演示了如何使用与转换函数一起使用的各种 transform-origin 值:
<html>
<head>
<style>
#div1 {
position: relative;
height: 50px;
width: 50px;
margin: 30px;
padding: 20px;
border: 1px dotted black;
}
.sec-div {
width: 30px;
height: 30px;
padding: 20px;
position: absolute;
border: 1px solid black;
background-color: lightblue;
}
#initial-val {
transform: rotate(30deg);
transform-origin: 50% 50%;
}
#ykey-xkey-z {
transform: rotate(45deg);
transform-origin: top left 3cm;
}
#xkey-y {
transform: scale(1.2);
transform-origin: right 20%;
}
#x-y {
transform: translate(10px 30px);
transform-origin: 30px 10px;
}
#x-yNeg-percent{
transform: skewX(30deg);
transform-origin: 80% -20%;
}
</style>
</head>
<body>
<h1>The transform-origin Property</h1>
<div id="div1">
<div class="sec-div" id="initial-val">50% 50%</div>
</div>
<p>transform: rotate(30deg);
transform-origin: 50% 50%;</p>
<div id="div1">
<div class="sec-div" id="ykey-xkey-z">top left 3cm</div>
</div>
<p>transform: rotate(45deg);
transform-origin: top left 3cm;</p>
<div id="div1">
<div class="sec-div" id="xkey-y">right 20%</div>
</div>
<p>transform: scale(1.2);
transform-origin: right 20%;</p>
<div id="div1">
<div class="sec-div" id="x-y">30px 10px</div>
</div>
<p>transform: translate(10px 30px);
transform-origin: 30px 10px;</p>
<div id="div1">
<div class="sec-div" id="x-yNeg-percent">100% -30%</div>
</div>
<p>transform: skewX(30deg);
transform-origin: 80% -20%;</p>
</body>
</html>