<div class="container">
<div class="wrapper">
<h2>CSS Transform Level 1: rotateZ(angle)</h2>
<div class="camera">
<div class="space">
<div class="box old"></div>
</div>
</div>
</div>
<div class="wrapper">
<h2>CSS Transform Level 2: rotate: z angle </h2>
<div class="camera">
<div class="space">
<div class="box new"></div>
</div>
</div>
</div>
<aside>
<div class="control">
<label for="angle">Angle:</label>
<input type="range" id="angle" value="45" min="-360" max="350"/>
<output id="outputAngle">45deg</output>
</div>
</aside>
</div>
<footer>
<p>请使用Firefox 72+浏览器查看Demo效果(^_^)!</p>
</footer>
@import url('https://fonts.googleapis.com/css?family=Gochi+Hand');
* {
box-sizing: border-box;
margin: 0;
padding: 0;
}
body {
margin: 0;
padding: 0;
background-color: #291642;
font-family: 'Gochi Hand', sans-serif;
color: #fff;
font-size: 130%;
letter-spacing: 0.1rem;
display: flex;
flex-direction: column;
align-items: center;
width: 100vw;
min-height: 100vh;
.container {
flex: 1;
display: flex;
width: 100vw;
justify-content: center;
align-items: center;
padding-top: 20vh;
padding-bottom: 40vh;
}
footer {
display: flex;
justify-content: center;
align-items: center;
background: rgba(#000, .75);
width: 100vw;
padding: 20px;
}
}
.wrapper {
display: flex;
flex-direction: column;
align-items: center;
margin: 0 4vh;
}
.camera {
width: 40vh;
height: 40vh;
margin: 2vh 6vh;
border: 1px dashed #f36;
position: relative;
display: flex;
justify-content: center;
align-items: center;
perspective-origin:center center;
perspective:500px;
padding: 2px;
}
.space{
width:100%; height:100%;
border:1px dashed #fa90ef;
transform-style:3d;
display: flex;
justify-content: center;
align-items: center;
}
.box {
width: 100%;
height: 100%;
transform-origin: left bottom;
display: flex;
justify-content: center;
align-items: center;
background: hsla(343,100%,58%,.3);
&::after {
content:'';
position: absolute;
width: 6px;
height: 6px;
background: #fff;
border-radius: 100%;
left: 0;
bottom: 0;
}
}
:root {
--angle: 45deg;
}
.old {
transform: rotateZ(var(--angle));
}
.new {
rotate: z var(--angle);
}
h2 {
font-size: 1em;
}
aside {
display: flex;
flex-direction: column;
align-items: center;
padding-left: 20vh;
.item {
margin: 2vh 0;
}
}
View Compiled
const angleVal = document.getElementById('angle')
const angleOutputVal = document.getElementById('outputAngle')
const rootEle = document.documentElement
angleVal.addEventListener('input', (e) => {
console.log(e.currentTarget.value)
rootEle.style.setProperty('--angle', `${e.currentTarget.value}deg`);
angleOutputVal.textContent = `${e.currentTarget.value}deg`;
})
View Compiled
This Pen doesn't use any external CSS resources.
This Pen doesn't use any external JavaScript resources.