メモログ

塵が積もって山とならないメモのログ

CSS Transforms: transform-origin

CSS Transforms (2D) - メモログの続きで、transform-originについて。回転などtransformの変換はデフォルトでは要素の中心(50% 50%)を軸に行われる。たとえば、rotate(45deg)の場合は以下のような感じ

サンプル

サンプル

transform-originのプロパティではその軸の場所を変更することができる。transform-originを100% 100%に設定すると、下記のような感じになる。要素の右下を中心に回転する。

サンプル

サンプル

transform-originを150% 150%などに設定することで、要素の外側に軸を設定することもできる。ので、たとえば下記のようなアニメーションをすることもできる

@-moz-keyframes rotate { from { -moz-transform: rotate(0deg); } to { -moz-transform: rotate(360deg); } } @-webkit-keyframes rotate { from { -webkit-transform: rotate(0deg); } to { -webkit-transform: rotate(360deg); } } @-o-keyframes rotate { from { -o-transform: rotate(0deg); } to { -o-transform: rotate(360deg); } } @keyframes rotate { from { -o-transform: rotate(0deg); } to { -o-transform: rotate(360deg); } } .sample { font-size: 0.5em; width: 40px; height: 40px; border: 1px solid #ddd; background: #f0f0f0; -moz-transform-origin: 150% 150%; -moz-animation-duration: 2s; -moz-animation-name: rotate; -moz-animation-iteration-count: infinite; -moz-animation-timing-function: linear; -webkit-transform-origin: 150% 150%; -webkit-animation-duration: 2s; -webkit-animation-name: rotate; -webkit-animation-iteration-count: infinite; -webkit-animation-timing-function: linear; -ms-transform-origin: 150% 150%; -ms-animation-duration: 2s; -ms-animation-name: rotate; -ms-animation-iteration-count: infinite; -ms-animation-timing-function: linear; -o-transform-origin: 150% 150%; -o-animation-duration: 2s; -o-animation-name: rotate; -o-animation-iteration-count: infinite; -o-animation-timing-function: linear; transform-origin: 150% 150%; animation-duration: 2s; animation-name: rotate; animation-iteration-count: infinite; animation-timing-function: linear; }

サンプル

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
@-moz-keyframes rotate {
from { -moz-transform: rotate(0deg); }
to { -moz-transform: rotate(360deg); }
}

@-webkit-keyframes rotate {
from { -webkit-transform: rotate(0deg); }
to { -webkit-transform: rotate(360deg); }
}

@-o-keyframes rotate {
from { -o-transform: rotate(0deg); }
to { -o-transform: rotate(360deg); }
}

@keyframes rotate {
from { -o-transform: rotate(0deg); }
to { -o-transform: rotate(360deg); }
}

.sample {
font-size: 0.5em;
width: 40px;
height: 40px;
border: 1px solid #ddd;
background: #f0f0f0;
-moz-transform-origin: 150% 150%;
-moz-animation-duration: 2s;
-moz-animation-name: rotate;
-moz-animation-iteration-count: infinite;
-moz-animation-timing-function: linear;
-webkit-transform-origin: 150% 150%;
-webkit-animation-duration: 2s;
-webkit-animation-name: rotate;
-webkit-animation-iteration-count: infinite;
-webkit-animation-timing-function: linear;
-ms-transform-origin: 150% 150%;
-ms-animation-duration: 2s;
-ms-animation-name: rotate;
-ms-animation-iteration-count: infinite;
-ms-animation-timing-function: linear;
-o-transform-origin: 150% 150%;
-o-animation-duration: 2s;
-o-animation-name: rotate;
-o-animation-iteration-count: infinite;
-o-animation-timing-function: linear;
transform-origin: 150% 150%;
animation-duration: 2s;
animation-name: rotate;
animation-iteration-count: infinite;
animation-timing-function: linear;
}

CSS Transforms 関連記事