2017-06-14 20 views

回答

3

var vis = false; 
 
var container = document.getElementById("c"); 
 
container.onclick = toggleVisibility; 
 

 
function toggleVisibility() { 
 
\t container.className = vis ? 
 
\t \t "container" : "container vis"; 
 
\t vis = !vis; 
 
}
img { 
 
    width: 100%; 
 
} 
 

 
.container { 
 
    position: absolute; 
 
    top: 100px; 
 
    left: 100px; 
 
    perspective: 2000px; 
 
    transform-style: preserve-3d; 
 
    transform: rotateX(40deg) rotateZ(25deg); 
 
} 
 

 
.box { 
 
    cursor: pointer; 
 
    position: absolute; 
 
    width: 160px; 
 
    height: 160px; 
 
    transform-style: preserve-3d; 
 
} 
 

 
.side { 
 
    position: absolute; 
 
    width: 160px; 
 
    height: 160px; 
 
    border: 1px solid rgba(0,0,0,.2); 
 
} 
 

 
.side-vert { 
 
    position: absolute; 
 
    width: 30px; 
 
    height: 160px; 
 
    border: 1px solid rgba(0,0,0,.2); 
 
} 
 

 
.side-hor { 
 
    position: absolute; 
 
    width: 160px; 
 
    height: 30px; 
 
    border: 1px solid rgba(0,0,0,.2); 
 
} 
 

 
.back { 
 
    transform: translateZ(-15px); 
 
} 
 

 
.left { 
 
    transform: translateX(-15px) rotateY(90deg); 
 
} 
 

 
.right { 
 
    transform: translateX(145px) rotateY(90deg); 
 
} 
 

 
.top { 
 
    transform: translateY(-15px) rotateX(90deg); 
 
} 
 

 
.bottom { 
 
    transform: translateY(145px) rotateX(90deg); 
 
} 
 

 
.front { 
 
    transform: translateZ(15px); 
 
} 
 

 
.r { 
 
    transform: translateZ(45px); 
 
} 
 

 
.g { 
 
    visibility: hidden; 
 
    transform: translateZ(0); 
 
} 
 

 
.b { 
 
    visibility: hidden; 
 
    transform: translateZ(-45px); 
 
} 
 

 
.r > * { 
 
    background-color: rgba(255, 0, 0, 0.2); 
 
} 
 

 
.g > * { 
 
    background-color: rgba(0, 255, 0, 0.2); 
 
} 
 

 
.b > * { 
 
    background-color: rgba(0, 0, 255, 0.2); 
 
} 
 

 
.vis > * { 
 
    visibility: visible; 
 
}
<div id="c" class="container"> 
 
    <div class="box r"> 
 
    <div class="side back"></div> 
 
    <div class="side-vert left"></div> 
 
    <div class="side-vert right"></div> 
 
    <div class="side-hor top"></div> 
 
    <div class="side-hor bottom"></div> 
 
    <div class="side front"> 
 
\t \t <img src="https://bmdinteractive.com/wp-content/uploads/2017/01/stack-overflow-logo.png"> 
 
\t </div> 
 
    </div> 
 
\t 
 
    <div class="box g"> 
 
    <div class="side back"></div> 
 
    <div class="side-vert left"></div> 
 
    <div class="side-vert right"></div> 
 
    <div class="side-hor top"></div> 
 
    <div class="side-hor bottom"></div> 
 
    <div class="side front"> 
 
\t \t <img src="https://bmdinteractive.com/wp-content/uploads/2017/01/stack-overflow-logo.png"> 
 
\t </div> 
 
    </div> 
 
\t 
 
    <div class="box b"> 
 
    <div class="side back"></div> 
 
    <div class="side-vert left"></div> 
 
    <div class="side-vert right"></div> 
 
    <div class="side-hor top"></div> 
 
    <div class="side-hor bottom"></div> 
 
    <div class="side front"> 
 
\t  <img src="https://bmdinteractive.com/wp-content/uploads/2017/01/stack-overflow-logo.png"> 
 
\t </div> 
 
    </div> 
 
</div>

我希望這有助於!

PS:由this article主要是啓發,也here's a jsfiddle我SCSS樣式表,看$之間的相關性變得暗淡,而且$深度和不同的變換

+0

感謝@halim這是真正有用的....我想在你的代碼中進行小小的調整,將矩形向x軸方向稍微傾斜一些,就像這樣http://i.imgur.com/ZsOb8l8.jpg所以前臉向後傾斜更多...是否有一個簡單的方法來做到這一點 – whippits

+1

嘿@whippits你可以在'.container'CSS中將'rotateX(40deg)'改爲60deg,然後通過改變.r.g中的'translateZ'參數來增加矩形之間的差距。 b班。我更新了[jsfiddle](https://jsfiddle.net/unhalium/jk1ekmwu/)來做到這一點 – Halim