1.less
* {
margin: 0;
padding: 0;
//注意防止页面下来
body {
height: 100%;
overflow: hidden;
#wrap {
position: absolute;
width: 600px;
height: 600px;
background: url(../img/my-logo-2.png) repeat;
background-size: 50px;
border: 1px solid;
border-radius: 50%;
box-shadow: 2px 2px 5px #00CED1;
top: 50%;
left: 50%;
margin-top: -300px;
margin-left: -300px;
perspective: 100px;
//随机旋转角度
// &:hover #n-prism {
// transform: rotateY(270deg);
// }
#n-prism {
position: absolute;
width: 150px;
height: 150px;
top: 50%;
left: 50%;
margin-top: -75px;
margin-left: -75px;
//开启3D
transform-style: preserve-3d;
//避免基点也加入过渡
transition: 1s transform;
//更新基点TODO:js生成-》transform-origin: center center tan内角*150px(邻边)
div {
position: absolute;
width: 150px;
height: 150px;
border: 2px solid white;
background: tomato;
font: 30px/150px "微软雅黑";
color: white;
font-weight: bold;
text-align: center;
top: 50%;
left: 50%;
margin-top: -75px;
margin-left: -75px;
//背面隐藏
backface-visibility: hidden;
//自动生成:&:nth-child(1) {transform: rotateY(240deg);}
}
}
}
}
}
2.css
* {
margin: 0;
padding: 0;
}
* body {
height: 100%;
overflow: hidden;
}
* body #wrap {
position: absolute;
width: 600px;
height: 600px;
background: url(../img/my-logo-2.png) repeat;
background-size: 50px;
border: 1px solid;
border-radius: 50%;
box-shadow: 2px 2px 5px #00CED1;
top: 50%;
left: 50%;
margin-top: -300px;
margin-left: -300px;
perspective: 100px;
}
* body #wrap #n-prism {
position: absolute;
width: 150px;
height: 150px;
top: 50%;
left: 50%;
margin-top: -75px;
margin-left: -75px;
transform-style: preserve-3d;
transition: 1s transform;
}
* body #wrap #n-prism div {
position: absolute;
width: 150px;
height: 150px;
border: 2px solid white;
background: tomato;
font: 30px/150px "微软雅黑";
color: white;
font-weight: bold;
text-align: center;
top: 50%;
left: 50%;
margin-top: -75px;
margin-left: -75px;
backface-visibility: hidden;
}
3.js
window.onload = function() {
createPrism(101);
function createPrism(n) {
var wrapStyle=document.createElement("style");
var wrapStyleCss="#wrap:hover #n-prism{ transform:rotateY("+(Math.random()*100)+"deg);}"
wrapStyle.innerHTML=wrapStyleCss;
document.head.appendChild(wrapStyle);
var outerDeg = 360 / n;
var innerDeg = 180 - 360 / n;
var prismNode = document.querySelector("#wrap > #n-prism");
var prismDiv = "";
var prismStyle = document.createElement("style");
var prismCss = "";
for(var i = 0; i < n; i++) {
prismDiv += "<div>" + (i + 1) + "</div>";
prismCss += "#wrap > #n-prism > div:nth-child(" +
(i + 1) +
"){transform:rotateY(" +
(i * outerDeg) + "deg);}";
}
prismNode.innerHTML = prismDiv;
var divWidth = document.querySelector("#wrap > #n-prism > div");
var prismLength = divWidth.offsetWidth;
prismCss += "#wrap > #n-prism{transform-origin:center center -" + (prismLength / 2 * Math.tan((innerDeg / 2) * Math.PI / 180)) + "px;}";
prismCss += "#wrap > #n-prism > div{transform-origin:center center -" + (prismLength / 2 * Math.tan((innerDeg / 2) * Math.PI / 180)) + "px;}"
prismStyle.innerHTML = prismCss;
document.head.appendChild(prismStyle);
}
}
4.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>N棱柱module</title>
</head>
<body>
<div id="wrap">
<div id="n-prism">
cevent
</div>
</div>
</body>
<link rel="stylesheet" href="css/less032.css" />
<script type="text/javascript" src="js/less032.js"></script>
</html>
5.效果图