aboutsummaryrefslogtreecommitdiff
path: root/files/zh-cn/web/css/css_transforms/using_css_transforms/index.html
blob: 488091901f8fa8f315d46e79cc6a48273e713200 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
---
title: 使用 CSS 变形
slug: Web/CSS/CSS_Transforms/Using_CSS_transforms
tags:
  - 3D
  - CSS
  - 变换
  - 教程
translation_of: Web/CSS/CSS_Transforms/Using_CSS_transforms
---
<div>{{CSSRef}}</div>

<p>通过改变坐标空间,<strong>CSS transforms</strong> 可以在不影响正常文档流的情况下改变作用内容的位置。这篇指南提供了有关使用CSS变形(CSS transforms)的介绍。</p>

<p>CSS transforms 通过一系列 CSS 属性实现,通过使用这些属性,可以对 HTML 元素进行线性仿射变形(affine linear transformations)。可以进行的变形包括旋转,倾斜,缩放以及位移,这些变形同时适用于平面与三维空间。</p>

<div class="warning">
<p>只有使用<a href="/zh-CN/docs/Web/CSS/CSS_Box_Model">盒模型</a>(Box Model)来定位的元素可以<em>被变换</em><code>transform</code>ed)。根据一般经验(原文:As a rule of thumb),拥有 <code>display: block</code> 的元素是由盒模型定位的。</p>
</div>

<h2 id="CSS_transforms_属性">CSS transforms 属性</h2>

<p>有两个主要的属性被用来定义 CSS transforms:{{cssxref("transform")}}{{cssxref("transform-origin")}}</p>

<dl>
 <dt>{{cssxref("transform-origin")}}</dt>
 <dd>指定原点的位置。默认值为元素的中心,可以被移动。很多变形需要用到这个属性,比如旋转,缩放和倾斜,他们都需要一个指定的点作为参数。</dd>
 <dt>{{cssxref("transform")}}</dt>
 <dd>指定作用在元素上的变形。取值为空格分隔的一系列变形的列表,他们会像被组合操作请求一样被分别执行。</dd>
</dl>

<h2 id="示例">示例</h2>

<p>这是一个未经任何变换的 MDN 标志:</p>

<p><img alt="MDN Logo" src="https://mdn.mozillademos.org/files/12539/Screen%20Shot%202016-02-16%20at%2015.53.54.png" style="height: 106px; width: 110px;"></p>

<h3 id="旋转">旋转</h3>

<p>这是一个在 iframe 中的 MDN 的标志,从左下角开始,旋转了 90 度。</p>

<pre class="brush: html">&lt;img style="transform: rotate(90deg);
            transform-origin: bottom left;"
     src="https://mdn.mozillademos.org/files/12539/Screen%20Shot%202016-02-16%20at%2015.53.54.png"&gt;
</pre>

<p>{{EmbedLiveSample('Rotating', 'auto', 240) }}</p>

<h3 id="倾斜与位移">倾斜与位移</h3>

<p>还是 MDN 的标志,倾斜了 10 度,并从 X 轴位移了 150 个像素。</p>

<pre class="brush: html">&lt;img style="transform: skewx(10deg) translatex(150px);
            transform-origin: bottom left;"
     src="https://mdn.mozillademos.org/files/12539/Screen%20Shot%202016-02-16%20at%2015.53.54.png"&gt;
</pre>

<p>{{EmbedLiveSample('Skewing_and_translating') }}</p>

<h2 id="适用于三维的属性">适用于三维的属性</h2>

<p>在三维空间中使用 CSS 变形会稍微复杂一点。你必须先设置一个透视点(perspective)以便配置 3D 空间,再去定义 2D 元素在空间中的行为。</p>

<h3 id="透视">透视</h3>

<p>首先需要设置的属性是透视值({{cssxref("perspective")}})。透视正是三维空间的立体感的源泉。元素与观察者之间的距离越远,他们就越小。</p>

<p>{{page("/en-US/docs/Web/CSS/perspective", "Setting perspective", 0, 0, 3)}}</p>

<p>第二个需要设置的是观察者的位置,可通过 {{cssxref("perspective-origin")}} 属性来设置。默认透视值中,为观察者被置于中心,但是这并不总是适当的。</p>

<p>{{page("/en-US/docs/Web/CSS/perspective-origin", "Changing the perspective origin", 0, 0, 3)}}</p>

<p>完成这些之后,你就可以折腾被置于三维空间之中的元素了。</p>

<h2 id="参见">参见</h2>

<ul>
 <li><a href="/en-US/docs/DOM/Using_device_orientation_with_3D_transforms">Using deviceorientation with 3D Transforms</a></li>
 <li><a href="http://desandro.github.com/3dtransforms/">Intro to CSS 3D transforms</a>(由 David DeSandro 撰写的博客)</li>
</ul>