transform-function
åºçº¿
广æ³å¯ç¨
èª 2015å¹´7æ èµ·ï¼æ¤ç¹æ§å·²å¨ä¸»æµæµè§å¨ä¸å¾å°æ¯æï¼å¯å¨å¤§å¤æ°è®¾å¤åæµè§å¨çæ¬ä¸æ£å¸¸ä½¿ç¨ã
<transform-function> CSS æ°æ®ç±»åç¨äºå¯¹å
ç´ çæ¾ç¤ºå忢ãé常ï¼è¿ç§åæ¢å¯ä»¥ç±ç©éµè¡¨ç¤ºï¼å¹¶ä¸å¯ä»¥ä½¿ç¨æ¯ä¸ªç¹ä¸çç©éµä¹æ³æ¥ç¡®å®æå¾å°çå¾åã
2D å¾å½¢ çåæ ç³»ç»
ç®åæå¤ç§ç¨æ¥æè¿°è½¬æ¢åæ æ¨¡åï¼æå¸¸ç¨çæ¯ ç¬å¡å°åæ ç³»ç» å 齿¬¡åæ ã
ç¬å¡å°åæ
å¨ç¬å¡å°åæ ç³»ä¸ï¼æ¯ä¸ª 欧æ°ç©ºé´ éçç¹é½ç±æ¨ªåæ åçºµåæ è¿ä¸¤ä¸ªå¼æ¥ç¡®å®ãå¨ CSSï¼å大é¨åçè®¡ç®æºå¾å½¢å¦ï¼ä¸ï¼åç¹ (0, 0) å¨å
ç´ çå·¦ä¸è§ãæ¯ä¸ªç¹é½ä½¿ç¨æ°å¦ä¸çåéç¬¦å· (x,y) æ¥æè¿°ã

示ä¾
>忢彿°å¯¹æ¯
以ä¸ç¤ºä¾æä¾äºä¸ä¸ªç± DOM å ç´ å忢å建ç 3D ç«æ¹ä½ï¼ä»¥åä¸ä¸ªéæ©èåï¼å è®¸ä½ éæ©ä¸åç忢彿°æ¥åæ¢ç«æ¹ä½ãå æ¤ï¼ä½ å¯ä»¥æ¯è¾ä¸ååæ¢ç±»åçææã
éæ©ä¸ä¸ªé项ï¼å°åæ¢åºç¨å°ç«æ¹ä½ä¸ï¼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: #fff;
}
.front {
background: rgba(90, 90, 90, 0.7);
transform: translateZ(50px);
}
.back {
background: rgba(0, 210, 0, 0.7);
transform: rotateY(180deg) translateZ(50px);
}
.right {
background: rgba(210, 0, 0, 0.7);
transform: rotateY(90deg) translateZ(50px);
}
.left {
background: rgba(0, 0, 210, 0.7);
transform: rotateY(-90deg) translateZ(50px);
}
.top {
background: rgba(210, 210, 0, 0.7);
transform: rotateX(90deg) translateZ(50px);
}
.bottom {
background: rgba(210, 0, 210, 0.7);
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 === "Choose a function") {
return;
} else {
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> |