<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

External CSS

This Pen doesn't use any external CSS resources.

External JavaScript

This Pen doesn't use any external JavaScript resources.