éè¿æ¹ååæ ç©ºé´ï¼CSS 忢ï¼CSS transformï¼å¯ä»¥å¨ä¸å½±åæ£å¸¸ææ¡£æµçæ åµä¸æ¹åä½ç¨å 容çä½ç½®ãè¿ç¯æåæä¾äºæå ³ä½¿ç¨ CSS 忢çä»ç»ã
CSS 忢éè¿ä¸ç³»å CSS 屿§å®ç°ï¼éè¿ä½¿ç¨è¿äºå±æ§ï¼å¯ä»¥å¯¹ HTML å ç´ è¿è¡çº¿æ§ä»¿å°åæ¢ï¼affine linear transformationï¼ãå¯ä»¥è¿è¡çåæ¢å æ¬æè½¬ã徿ã缩æ¾ä»¥åä½ç§»ï¼è¿äºåæ¢åæ¶éç¨äºå¹³é¢ä¸ä¸ç»´ç©ºé´ã
è¦åï¼ åªæä½¿ç¨ç模åï¼Box Modelï¼æ¥å®ä½çå
ç´ å¯ä»¥è¢«åæ¢ï¼transform
edï¼ãæ¥æ display: block
çå
ç´ æ¯ç±ç模åå®ä½çã
æä¸¤ä¸ªä¸»è¦ç屿§è¢«ç¨æ¥å®ä¹ CSS 忢ï¼transform
ï¼æåç¬ç translate
ãrotate
以å scale
屿§ï¼å transform-origin
ã
transform-origin
æå®åç¹çä½ç½®ãé»è®¤å¼ä¸ºå ç´ çä¸å¿ï¼å¯ä»¥è¢«ç§»å¨ãå¾å¤åæ¢éè¦ç¨å°è¿ä¸ªå±æ§ï¼æ¯å¦æè½¬ã缩æ¾å徿ï¼å®ä»¬é½éè¦ä¸ä¸ªæå®çç¹ä½ä¸ºåæ°ã
transform
æå®ä½ç¨å¨å ç´ ä¸ç忢ãåå¼ä¸ºç©ºæ ¼åéçä¸ç³»å忢çå表ï¼å®ä»¬ä¼å被ç»åæä½è¯·æ±ä¸æ ·è¢«å嫿§è¡ãå¤å忢æä»å³å°å·¦ç顺åºé«æå°åºç¨ã
è¿æ¯ä¸ä¸ªæªç»ä»»ä½åæ¢ç MDN æ å¿ï¼
æè½¬è¿æ¯ä»å·¦ä¸è§å¼å§æè½¬ 90 度åç MDN å¾½æ ã
<img
style="rotate: 90deg;
transform-origin: bottom left;"
src="logo.png"
alt="MDN Logo" />
徿ä¸ä½ç§»
è¿æ¯ MDN çæ å¿ï¼å¾æäº 10 度ï¼å¹¶ä» X è½´ä½ç§»äº 150 个åç´ ã
<img
style="transform: skewx(10deg) translatex(150px);
transform-origin: bottom left;"
src="logo.png"
alt="MDN logo" />
éç¨äºä¸ç»´ç屿§
å¨ä¸ç»´ç©ºé´ä¸ä½¿ç¨ CSS 忢ä¼ç¨å¾®å¤æä¸ç¹ãä½ å¿ é¡»å 设置ä¸ä¸ªéè§ç¹ï¼perspectiveï¼ä»¥ä¾¿é ç½® 3D 空é´ï¼åå»å®ä¹ 2D å ç´ å¨ç©ºé´ä¸çè¡ä¸ºã
éè§é¦å
éè¦è®¾ç½®ç屿§æ¯éè§å¼ï¼perspective
ï¼ãéè§æ£æ¯ä¸ç»´ç©ºé´çç«ä½æçæºæ³ãå
ç´ ä¸è§å¯è
ä¹é´çè·ç¦»è¶è¿ï¼å®ä»¬å°±è¶å°ã
该å®ä¾å±ç¤ºäºä¸ä¸ªä»¥ä¸åçä½ç½®è¿è¡éè§çç«æ¹ä½ãç«æ¹ä½æ¶ç¼©çéåº¦ç± perspective
屿§å®ä¹ãå
¶å¼è¶å°ï¼è§è§è¶æ·±ã
ä¸é¢ç HTML å建äºåä¸ä¸ªæ¡çåä¸ªå¯æ¬ï¼è®¾å®ä¸åçéè§å¼ã
<table>
<tbody>
<tr>
<th><code>perspective: 250px;</code></th>
<th><code>perspective: 350px;</code></th>
</tr>
<tr>
<td>
<div class="container">
<div class="cube pers250">
<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>
</div>
</div>
</td>
<td>
<div class="container">
<div class="cube pers350">
<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>
</div>
</div>
</td>
</tr>
<tr>
<th><code>perspective: 500px;</code></th>
<th><code>perspective: 650px;</code></th>
</tr>
<tr>
<td>
<div class="container">
<div class="cube pers500">
<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>
</div>
</div>
</td>
<td>
<div class="container">
<div class="cube pers650">
<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>
</div>
</div>
</td>
</tr>
</tbody>
</table>
CSS
CSS 设å®äºå¯ç¨äºå°éè§å¼è®¾å®ä¸ºä¸åè·ç¦»çç±»ãå®è¿å æ¬å®¹å¨åä¸ç«æ¹ä½æ¬èº«ï¼ä»¥åå®çæ¯ä¸ä¸ªé¢ï¼çç±»ã
/* Shorthand classes for different perspective values */
.pers250 {
perspective: 250px;
}
.pers350 {
perspective: 350px;
}
.pers500 {
perspective: 500px;
}
.pers650 {
perspective: 650px;
}
/* Define the container div, the cube div, and a generic face */
.container {
width: 200px;
height: 200px;
margin: 75px 0 0 75px;
border: none;
}
.cube {
width: 100%;
height: 100%;
backface-visibility: visible;
perspective-origin: 150% 150%;
transform-style: preserve-3d;
}
.face {
display: block;
position: absolute;
width: 100px;
height: 100px;
border: none;
line-height: 100px;
font-family: sans-serif;
font-size: 60px;
color: white;
text-align: center;
}
/* Define each face based on direction */
.front {
background: rgba(0, 0, 0, 0.3);
transform: translateZ(50px);
}
.back {
background: rgba(0, 255, 0, 1);
color: black;
transform: rotateY(180deg) translateZ(50px);
}
.right {
background: rgba(196, 0, 0, 0.7);
transform: rotateY(90deg) translateZ(50px);
}
.left {
background: rgba(0, 0, 196, 0.7);
transform: rotateY(-90deg) translateZ(50px);
}
.top {
background: rgba(196, 196, 0, 0.7);
transform: rotateX(90deg) translateZ(50px);
}
.bottom {
background: rgba(196, 0, 196, 0.7);
transform: rotateX(-90deg) translateZ(50px);
}
/* Make the table a little nicer */
th,
p,
td {
background-color: #eeeeee;
padding: 10px;
font-family: sans-serif;
text-align: left;
}
ç»æ
è¦é
ç½®ç第äºä¸ªå
ç´ æ¯è§å¯è
ï¼viewerï¼çä½ç½®ï¼å¸¦æ perspective-origin
屿§ãé»è®¤æ
åµä¸ï¼è§è§ä»¥è§å¯è
为ä¸å¿ï¼ä½è¿å¹¶ä¸æ»æ¯è¶³å¤çã
该å®ä¾å±ç¤ºäºå¸¦ææµè¡ç perspective-origin
å¼çç«æ¹ä½ã
<section>
<figure>
<figcaption><code>perspective-origin: top left;</code></figcaption>
<div class="container">
<div class="cube potl">
<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>
</div>
</div>
</figure>
<figure>
<figcaption><code>perspective-origin: top;</code></figcaption>
<div class="container">
<div class="cube potm">
<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>
</div>
</div>
</figure>
<figure>
<figcaption><code>perspective-origin: top right;</code></figcaption>
<div class="container">
<div class="cube potr">
<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>
</div>
</div>
</figure>
<figure>
<figcaption><code>perspective-origin: left;</code></figcaption>
<div class="container">
<div class="cube poml">
<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>
</div>
</div>
</figure>
<figure>
<figcaption><code>perspective-origin: 50% 50%;</code></figcaption>
<div class="container">
<div class="cube pomm">
<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>
</div>
</div>
</figure>
<figure>
<figcaption><code>perspective-origin: right;</code></figcaption>
<div class="container">
<div class="cube pomr">
<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>
</div>
</div>
</figure>
<figure>
<figcaption><code>perspective-origin: bottom left;</code></figcaption>
<div class="container">
<div class="cube pobl">
<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>
</div>
</div>
</figure>
<figure>
<figcaption><code>perspective-origin: bottom;</code></figcaption>
<div class="container">
<div class="cube pobm">
<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>
</div>
</div>
</figure>
<figure>
<figcaption><code>perspective-origin: bottom right;</code></figcaption>
<div class="container">
<div class="cube pobr">
<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>
</div>
</div>
</figure>
<figure>
<figcaption><code>perspective-origin: -200% -200%;</code></figcaption>
<div class="container">
<div class="cube po200200neg">
<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>
</div>
</div>
</figure>
<figure>
<figcaption><code>perspective-origin: 200% 200%;</code></figcaption>
<div class="container">
<div class="cube po200200pos">
<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>
</div>
</div>
</figure>
<figure>
<figcaption><code>perspective-origin: 200% -200%;</code></figcaption>
<div class="container">
<div class="cube po200200">
<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>
</div>
</div>
</figure>
</section>
CSS
/* perspective-origin values (unique per example) */
.potl {
perspective-origin: top left;
}
.potm {
perspective-origin: top;
}
.potr {
perspective-origin: top right;
}
.poml {
perspective-origin: left;
}
.pomm {
perspective-origin: 50% 50%;
}
.pomr {
perspective-origin: right;
}
.pobl {
perspective-origin: bottom left;
}
.pobm {
perspective-origin: bottom;
}
.pobr {
perspective-origin: bottom right;
}
.po200200neg {
perspective-origin: -200% -200%;
}
.po200200pos {
perspective-origin: 200% 200%;
}
.po200200 {
perspective-origin: 200% -200%;
}
/* Define the container div, the cube div, and a generic face */
.container {
width: 100px;
height: 100px;
margin: 24px;
border: none;
}
.cube {
width: 100%;
height: 100%;
backface-visibility: visible;
perspective: 300px;
transform-style: preserve-3d;
}
.face {
display: block;
position: absolute;
width: 100px;
height: 100px;
border: none;
line-height: 100px;
font-family: sans-serif;
font-size: 60px;
color: white;
text-align: center;
}
/* Define each face based on direction */
.front {
background: rgba(0, 0, 0, 0.3);
transform: translateZ(50px);
}
.back {
background: rgba(0, 255, 0, 1);
color: black;
transform: rotateY(180deg) translateZ(50px);
}
.right {
background: rgba(196, 0, 0, 0.7);
transform: rotateY(90deg) translateZ(50px);
}
.left {
background: rgba(0, 0, 196, 0.7);
transform: rotateY(-90deg) translateZ(50px);
}
.top {
background: rgba(196, 196, 0, 0.7);
transform: rotateX(90deg) translateZ(50px);
}
.bottom {
background: rgba(196, 0, 196, 0.7);
transform: rotateX(-90deg) translateZ(50px);
}
/* Make the layout a little nicer */
section {
background-color: #eee;
padding: 10px;
font-family: sans-serif;
text-align: left;
display: grid;
grid-template-columns: repeat(3, 1fr);
}
Result
å®ææ¤æä½åï¼ä½ å¯ä»¥å¨ 3D 空é´ä¸å¤çå ç´ ã
åè§RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4