transform
åºçº¿
广æ³å¯ç¨
èª 2015å¹´9æ èµ·ï¼æ¤ç¹æ§å·²å¨ä¸»æµæµè§å¨ä¸å¾å°æ¯æï¼å¯å¨å¤§å¤æ°è®¾å¤åæµè§å¨çæ¬ä¸æ£å¸¸ä½¿ç¨ã
CSS transform 屿§å
è®¸ä½ æè½¬ã缩æ¾ã徿æå¹³ç§»ç»å®å
ç´ ãè¿æ¯éè¿ä¿®æ¹ CSS è§è§æ ¼å¼å模åçåæ ç©ºé´å®ç°çã
å°è¯ä¸ä¸
transform: matrix(1, 2, 3, 4, 5, 6);
transform: translate(120px, 50%);
transform: scale(2, 0.5);
transform: rotate(0.5turn);
transform: skew(30deg, 20deg);
transform: scale(0.5) translate(-100%, -100%);
<section id="default-example">
<img
class="transition-all"
id="example-element"
src="/proxy/developer.mozilla.org/shared-assets/images/examples/firefox-logo.svg"
width="200" />
</section>
妿屿§çå¼ä¸æ¯ noneï¼åå°å建ä¸ä¸ªå±å ä¸ä¸æãå¨è¿ç§æ
åµä¸ï¼è¯¥å
ç´ å°ä½ä¸ºä»»ä½å
å«ç position: fixed; æ position: absolute; å
ç´ çå
å«åã
è¦åï¼åªè½ transform ç±ç模åå®ä½çå
ç´ ï¼ä¹å°±æ¯ææå¸å±ç± CSS çæ¨¡å管ççå
ç´ ï¼é¤äºï¼éæ¿æ¢çè¡å
çåãè¡¨æ ¼ååè¡¨æ ¼åç»ã
è¯æ³
/* å
³é®åå¼ */
transform: none;
/* 彿°å¼ */
transform: matrix(1, 2, 3, 4, 5, 6);
transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
transform: perspective(17px);
transform: rotate(0.5turn);
transform: rotate3d(1, 2, 3, 10deg);
transform: rotateX(10deg);
transform: rotateY(10deg);
transform: rotateZ(10deg);
transform: translate(12px, 50%);
transform: translate3d(12px, 50%, 3em);
transform: translateX(2em);
transform: translateY(3in);
transform: translateZ(2px);
transform: scale(2, 0.5);
transform: scale3d(2.5, 1.2, 0.3);
transform: scaleX(2);
transform: scaleY(0.5);
transform: scaleZ(0.3);
transform: skew(30deg, 20deg);
transform: skewX(30deg);
transform: skewY(1.07rad);
/* å¤ä¸ªå½æ°å¼ */
transform: translateX(10px) rotate(10deg) translateY(5px);
transform: perspective(500px) translate(10px, 0, 20px) rotateY(3deg);
/* å
¨å±å¼ */
transform: inherit;
transform: initial;
transform: revert;
transform: revert-layer;
transform: unset;
transform 屿§å¯ä»¥æå®ä¸ºå
³é®åå¼ noneï¼æè
æ¯ä¸ä¸ª/å¤ä¸ª <transform-function> å¼ã
å¼
<transform-function>-
è¦åºç¨çä¸ä¸ªæå¤ä¸ª CSS 忢彿°ã忢彿°æä»å·¦å°å³ç顺åºç¸ä¹ï¼ä¹å°±æ¯è¯´å¤å忢æä»å³å°å·¦çé¡ºåºææå°åºç¨ã
none-
ä¸åºç¨ä»»ä½åæ¢ã
æ éç¢èè
缩æ¾å¨ç»å卿 éç¢çé®é¢ï¼å 为å®ä»¬æ¯æäºç±»åçå头çç常è§è§¦åå ç´ ãå¦æä½ éè¦å¨ç½ç«ä¸å å«è¿ç§å¨ç»ï¼ä½ åºè¯¥æä¾ä¸ä¸ªæ§ä»¶ï¼å è®¸ç¨æ·å¨ç½ç«å±é¢å ³éææå¨ç»ã
å¦å¤ï¼èèå©ç¨ prefers-reduced-motion åªä½ç¹æ§ââ使ç¨å®ç¼åä¸ä¸ªåªä½æ¥è¯¢ï¼ä»¥ä¾¿å¨ç¨æ·å¨å
¶ç³»ç»é¦é项䏿å®åå°å¨ç»æ¶å
³éå¨ç»ã
äºè§£æ´å¤ä¿¡æ¯ï¼
å½¢å¼å®ä¹
| åå§å¼ | none |
|---|---|
| éç¨å ç´ | å¯åæ¢å ç´ |
| æ¯å¦æ¯ç»§æ¿å±æ§ | å¦ |
| Percentages | refer to the size of bounding box |
| 计ç®å¼ | as specified, but with relative lengths converted into absolute lengths |
| å¨ç»ç±»å | a transform |
| Creates stacking context | æ¯ |
å½¢å¼è¯æ³
transform =
none |
<transform-list>
<transform-list> =
<transform-function>+
<transform-function> =
<scale3d()> |
<scale()> |
<scaleX()> |
<scaleY()> |
<scaleZ()> |
<translate3d()> |
<translate()> |
<translateX()> |
<translateY()> |
<translateZ()> |
<rotate3d()> |
<rotate()> |
<rotateX()> |
<rotateY()> |
<rotateZ()> |
<skew()> |
<skewX()> |
<skewY()> |
<matrix3d()> |
<matrix()> |
<perspective()>
<scale3d()> =
scale3d( [ <number> | <percentage> ]#{3} )
<scale()> =
scale( <number> , <number>? )
<scaleX()> =
scaleX( <number> )
<scaleY()> =
scaleY( <number> )
<scaleZ()> =
scaleZ( [ <number> | <percentage> ] )
<translate3d()> =
translate3d( <length-percentage> , <length-percentage> , <length> )
<translate()> =
translate( <length-percentage> , <length-percentage>? )
<translateX()> =
translateX( <length-percentage> )
<translateY()> =
translateY( <length-percentage> )
<translateZ()> =
translateZ( <length> )
<rotate3d()> =
rotate3d( <number> , <number> , <number> , [ <angle> | <zero> ] )
<rotate()> =
rotate( [ <angle> | <zero> ] )
<rotateX()> =
rotateX( [ <angle> | <zero> ] )
<rotateY()> =
rotateY( [ <angle> | <zero> ] )
<rotateZ()> =
rotateZ( [ <angle> | <zero> ] )
<skew()> =
skew( [ <angle> | <zero> ] , [ <angle> | <zero> ]? )
<skewX()> =
skewX( [ <angle> | <zero> ] )
<skewY()> =
skewY( [ <angle> | <zero> ] )
<matrix3d()> =
matrix3d( <number>#{16} )
<matrix()> =
matrix( <number>#{6} )
<perspective()> =
perspective( [ <length [0,â]> | none ] )
<length-percentage> =
<length> |
<percentage>
示ä¾
>平移æè½¬ä¸ä¸ªå ç´
HTML
<div>è¢«åæ¢çå
ç´ </div>
CSS
div {
border: solid red;
transform: translate(30px, 20px) rotate(20deg);
width: 140px;
height: 60px;
}
ç»æ
åæ¢é¡ºåº
忢彿°ç顺åºå¾éè¦ãå¨è¿ä¸ªä¾åä¸ï¼ä½¿ç¨ç¸åçå¼å¯¹ä¸¤ä¸ªçåè¿è¡äºæè½¬å平移ï¼åªä¸è¿ï¼åæ¢å½æ°ç顺åºä¸åã
HTML
<div class="original"></div>
<div class="one">1</div>
<div class="two">2</div>
CSS
.one {
transform: translateX(200px) rotate(135deg);
}
.two {
transform: rotate(135deg) translateX(200px);
}
ç»æ
å½ä¸ä¸ªå ç´ å¨è¢«å¹³ç§»ä¹å被æè½¬ï¼å®ç平移æ¹åæ¯ç¸å¯¹äºæè½¬åçåæ ç³»çãä¾åä¸çè¿ä¸ªåæ ç³»ç±ä¸æ¡ç¹ç¶ç´çº¿è¡¨ç¤ºã
æ´å¤ç¤ºä¾
请æ¥é
ä½¿ç¨ CSS 忢以å <transform-function> è·åæ´å¤ç¤ºä¾ã
è§è
| è§è |
|---|
| CSS Transforms Module Level 2> # transform-functions> |
| CSS Transforms Module Level 1> # transform-property> |
| Scalable Vector Graphics (SVG) 2> # TransformProperty> |
æµè§å¨å ¼å®¹æ§
åè§
- ä½¿ç¨ CSS 忢
<transform-function>æ°æ®ç±»åï¼å å«äºææç忢彿°- åç¬ç CSS 屿§ï¼
translateãrotateåscaleï¼ä¸åå¨skew屿§ï¼ã - å¨çº¿ç´è§æå CSS Transform 彿°çå·¥å ·ï¼CSS Transform æ¼ç»åº