CSS <transform-function> ãã¼ã¿å
Baseline
åºãå©ç¨å¯è½
ãã®æ©è½ã¯åºãå®è£ ããã¦ãããå¤ãã®ãã¼ã¸ã§ã³ã®ç«¯æ«ããã©ã¦ã¶ã¼ã§åä½ãã¾ãã2015å¹´7æä»¥éããã¹ã¦ã®ãã©ã¦ã¶ã¼ã§å©ç¨å¯è½ã§ãã
<transform-function> 㯠CSS ã®ãã¼ã¿åã§ãè¦ç´ ã®å¤è¦ã«å½±é¿ãã座æ¨å¤æã表ãã¾ãã座æ¨å¤æé¢æ°ã¯ãäºæ¬¡å
ã¾ãã¯ä¸æ¬¡å
空éã§è¦ç´ ãåè»¢ãæ¡å¤§ç¸®å°ãæªæ²ãç§»åããããã¨ãã§ãã¾ãããã㯠transform ããããã£ã®ä¸ã§ä½¿ç¨ããã¾ãã
æ§æ
<transform-function> ãã¼ã¿åã¯ã以ä¸ã«ç¤ºãã夿颿°ã®ãã¡ã®ä¸ã¤ã使ç¨ãã¦æå®ãã¾ããå颿°ã¯äºæ¬¡å
ã¾ãã¯ä¸æ¬¡å
ã®åº§æ¨æä½ãé©ç¨ãã¾ãã
è¡å夿
matrix()-
äºæ¬¡å ã®åæ¬¡å¤æè¡åãè¨è¿°ãã¾ãã
matrix3d()-
䏿¬¡å ã®å¤æã 4Ã4 ã®å次è¡åã§è¨è¿°ãã¾ãã
è¦ç¹è·é¢
perspective()-
ã¦ã¼ã¶ã¼ã¨ z=0 å¹³é¢ã¨ã®éã®è·é¢ãè¨å®ãã¾ãã
å転
rotate()-
è¦ç´ ãäºæ¬¡å å¹³é¢ä¸ã§ç¹å®ã®ç¹ãä¸å¿ã«å転ãã¾ãã
rotate3d()-
è¦ç´ ã䏿¬¡å 空éã§ç¹å®ã®è»¸ãä¸å¿ã«å転ãã¾ãã
rotateX()-
è¦ç´ ãæ°´å¹³è»¸ãä¸å¿ã«å転ãã¾ãã
rotateY()-
è¦ç´ ãåç´è»¸ãä¸å¿ã«å転ãã¾ãã
rotateZ()-
è¦ç´ ã Z 軸ãä¸å¿ã«å転ãã¾ãã
æ¡å¤§ç¸®å°ï¼ãªãµã¤ãºï¼
scale()-
è¦ç´ ãäºæ¬¡å å¹³é¢ä¸ã§æ¡å¤§ã¾ãã¯ç¸®å°ãã¾ãã
scale3d()-
è¦ç´ ã䏿¬¡å 空éã§æ¡å¤§ã¾ãã¯ç¸®å°ãã¾ãã
scaleX()-
è¦ç´ ãæ°´å¹³ã«æ¡å¤§ã¾ãã¯ç¸®å°ãã¾ãã
scaleY()-
è¦ç´ ãåç´ã«æ¡å¤§ã¾ãã¯ç¸®å°ãã¾ãã
scaleZ()-
è¦ç´ ã Z 軸æ¹åã«æ¡å¤§ã¾ãã¯ç¸®å°ãã¾ãã
æªã
å¹³è¡ç§»å
translate()-
è¦ç´ ãäºæ¬¡å å¹³é¢ä¸ã§å¹³è¡ç§»åããã¾ãã
translate3d()-
è¦ç´ ã䏿¬¡å 空éã§å¹³è¡ç§»åããã¾ãã
translateX()-
è¦ç´ ãæ°´å¹³æ¹åã«å¹³è¡ç§»åããã¾ãã
translateY()-
è¦ç´ ãåç´æ¹åã«å¹³è¡ç§»åããã¾ãã
translateZ()-
è¦ç´ ã Z 軸æ¹åã«å¹³è¡ç§»åããã¾ãã
解説
HTML è¦ç´ ã®å¯¸æ³ãå½¢ç¶ãè¨è¿°ããããã«æ§ã ãªåº§æ¨ã¢ãã«ãç¨ãããããã¨ããããåæ§ã«å¤æã«ãé©ç¨ããã¾ããæãä¸è¬çãªãã®ã¯ãç´äº¤åº§æ¨ç³»ã§ããã忬¡åº§æ¨ç³»ãç¨ãããããã¨ãããã¾ãã
ç´äº¤åº§æ¨ç³»
ç´äº¤åº§æ¨ç³»ã§ã¯ãäºæ¬¡å
ã®ç¹ã¯ã X åº§æ¨ (横座æ¨) 㨠Y åº§æ¨ (縦座æ¨) ã®äºã¤ã®å¤ã使ç¨ãã¦è¨è¿°ãã¾ãããã㯠(x, y) ã®ãã¯ãã«è¡¨è¨ã§è¡¨ç¾ããã¾ãã

CSS (ããã³å¤ãã®ã³ã³ãã¥ã¼ã¿ã¼ã°ã©ãã£ãã¯) ã§ã¯ãåç¹ (0, 0) ãåè¦ç´ ã®å·¦ä¸ã表ãã¾ããæ£ã®åº§æ¨ã¯åç¹ããä¸ããã³å³ã«åãããè² ã®åº§æ¨ã¯ä¸ããã³å·¦ã«åããã¾ããå¾ã£ã¦ãå³ã« 2 åä½ãä¸ã« 5 åä½ã§ã¯ (2, 5) ã¨ãªãã左㫠3 åä½ãä¸ã« 12 åä½ã§ã¯ (-3, -12) ã¨ãªãã¾ãã
座æ¨å¤æé¢æ°
座æ¨å¤æé¢æ°ã¯ã座æ¨ã®å¤ãæä½ãããã¨ã«ãã£ã¦è¦ç´ ã®å¤è¦ã夿´ãã¾ããç·å½¢åº§æ¨å¤æé¢æ°ã¯ã次ã®ããã« 2Ã2 ã®è¡åã§è¨è¿°ããã¾ãã
颿°ã¯è¡åã®ä¹ç®ã«ãã£ã¦è¦ç´ ã«é©ç¨ããã¾ããã¤ã¾ããããããã®åº§æ¨ã¯è¡åã®å¤ã«åºã¥ãã¦å¤åãã¾ãã
ä¸è¡ã®ä¸ã§è¤æ°ã®åº§æ¨å¤æãé©ç¨ãããã¨ãã§ãã¾ãã
ãã®è¨æ³ã§ãæããã使ãããåè»¢ãæ¡å¤§ç¸®å°ã徿ã®åº§æ¨å¤æãè¨è¿°ããåæãããã¨ãã§ãã¾ãã (å®éããã¹ã¦ã®åº§æ¨å¤æãè¨è¿°ã§ããç·å½¢é¢æ°ã§ãã) 座æ¨å¤æã®åæã¯å³ããå·¦ã®é ã«å¹æçã«é©ç¨ããã¾ãã
ãããã主è¦ãªåº§æ¨å¤æã®ãã¡å¹³è¡ç§»åã¯ç·å½¢ã§ã¯ãªããå¾ã£ã¦ãã®è¨æ³ã使ç¨ããå ´åã¯ç¹ä¾ã¨ããå¿
è¦ãããã¾ããå¹³è¡ç§»åã®ãã¯ãã« (tx, ty) ã¯ãäºã¤ã®è¿½å ã®å¼æ°ã§å¥ã«è¡¨ç¾ããªããã°ãªãã¾ããã
ã¡ã¢: ç´äº¤åº§æ¨ãããé£è§£ã§ãããå°å½±å¹¾ä½å¦ã®å次座æ¨ã¯ 3 à 3 ã®å¤æè¡åã使ç¨ããã®ã§ãç·å½¢é¢æ°ã¨ãã¦å¹³è¡ç§»åãããç°¡åã«è¡¨ç¾ã§ãã¾ãã
ä¾
>座æ¨å¤æé¢æ°ã®æ¯è¼
次ã®ä¾ã§ã¯ãDOM è¦ç´ ã¨åº§æ¨å¤æã§ä½æããã䏿¬¡å ç«æ¹ä½ã¨ãç«æ¹ä½ã座æ¨å¤æããããã®æ§ã ãªåº§æ¨å¤æé¢æ°ã鏿ããããã®é¸æã¡ãã¥ã¼ãç¨æããã¦ãããæ§ã ãªç¨®é¡ã®å¹æãæ¯è¼ãããã¨ãã§ãã¾ãã
鏿ããã¨ã夿ãç«æ¹ä½ã«é©ç¨ããã2 ç§å¾ã«ç«æ¹ä½ã¯éå§æã®ç¶æ
ã«æ»ãã¾ãããã¹ã¦ã®å¤æã®å¹æãè¦ããã¨ãã§ããããã«ãtransform3d() ã使ã£ã¦ç«æ¹ä½ã®éå§ç¶æ
ããããã«å転ããã¦ãã¾ãã
HTML
<main>
<section id="example-element">
<div class="face front">1</div>
<div class="face back">2</div>
<div class="face right">3</div>
<div class="face left">4</div>
<div class="face top">5</div>
<div class="face bottom">6</div>
</section>
<div class="select-form">
<label for="transfunction">座æ¨å¤æé¢æ°ã鏿ãã¦ãã ãã</label>
<select id="transfunction">
<option selected>座æ¨å¤æé¢æ°ã鏿</option>
<option>rotate(360deg)</option>
<option>rotateX(360deg)</option>
<option>rotateY(360deg)</option>
<option>rotateZ(360deg)</option>
<option>rotate3d(1, 1, 1, 90deg)</option>
<option>scale(1.5)</option>
<option>scaleX(1.5)</option>
<option>scaleY(1.5)</option>
<option>scaleZ(1.5)</option>
<option>scale3d(1, 1.5, 1.5)</option>
<option>skew(17deg, 13deg)</option>
<option>skewX(17deg)</option>
<option>skewY(17deg)</option>
<option>translate(100px, 100px)</option>
<option>translateX(100px)</option>
<option>translateY(100px)</option>
<option>translateZ(100px)</option>
<option>translate3d(50px, 50px, 50px)</option>
<option>perspective(200px)</option>
<option>matrix(1, 2, -1, 1, 80, 80)</option>
<option>matrix3d(1,0,0,0,0,1,3,0,0,0,1,0,50,100,0,1.1)</option>
</select>
</div>
</main>
CSS
main {
width: 400px;
height: 200px;
padding: 50px;
background-image: linear-gradient(135deg, white, cyan, white);
}
#example-element {
width: 100px;
height: 100px;
transform-style: preserve-3d;
transition: transform 1.5s;
transform: rotate3d(1, 1, 1, 30deg);
}
.face {
display: flex;
align-items: center;
justify-content: center;
width: 100%;
height: 100%;
position: absolute;
backface-visibility: inherit;
font-size: 60px;
color: white;
}
.front {
background: rgb(90 90 90 / 70%);
transform: translateZ(50px);
}
.back {
background: rgb(0 210 0 / 70%);
transform: rotateY(180deg) translateZ(50px);
}
.right {
background: rgb(210 0 0 / 70%);
transform: rotateY(90deg) translateZ(50px);
}
.left {
background: rgb(0 0 210 / 70%);
transform: rotateY(-90deg) translateZ(50px);
}
.top {
background: rgb(210 210 0 / 70%);
transform: rotateX(90deg) translateZ(50px);
}
.bottom {
background: rgb(210 0 210 / 70%);
transform: rotateX(-90deg) translateZ(50px);
}
.select-form {
margin-top: 50px;
}
JavaScript
const selectElem = document.querySelector("select");
const example = document.querySelector("#example-element");
selectElem.addEventListener("change", () => {
if (selectElem.value === "座æ¨å¤æé¢æ°ã鏿") {
return;
}
example.style.transform = `rotate3d(1, 1, 1, 30deg) ${selectElem.value}`;
setTimeout(() => {
example.style.transform = "rotate3d(1, 1, 1, 30deg)";
}, 2000);
});
çµæ
仿§æ¸
| 仿§æ¸ |
|---|
| CSS Transforms Module Level 1 > # transform-functions > |
| CSS Transforms Module Level 2 > # transform-functions > |