<div class="container">
<div class="wrapper">
<h2>CSS Transform Level 1: tranlateY()</h2>
<div class="camera">
<div class="space">
<div class="box old"></div>
</div>
</div>
</div>
<div class="wrapper">
<h2>CSS Transform Level 2: tranlate: 0 y</h2>
<div class="camera">
<div class="space">
<div class="box new"></div>
</div>
</div>
</div>
<aside>
<div class="control">
<label for="translateY">Y:</label>
<input type="range" id="translateY" value="50" min="-100" max="100"/>
<output id="outputY">50%</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: center center;
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%;
}
}
:root {
--x: 50%;
--y: 50%;
--z: 0px;
}
.old {
transform: translateY(var(--y));
}
.new {
translate: 0 var(--y);
}
h2 {
font-size: 1em;
}
aside {
display: flex;
flex-direction: column;
align-items: center;
padding-left: 20vh;
.item {
margin: 2vh 0;
}
}
View Compiled
const yVal = document.getElementById('translateY')
const yOutputVal = document.getElementById('outputY')
const rootEle = document.documentElement
yVal.addEventListener('input', (e) => {
console.log(e.currentTarget.value)
rootEle.style.setProperty('--y', `${e.currentTarget.value}%`);
yOutputVal.textContent = `${e.currentTarget.value}%`;
})
View Compiled
This Pen doesn't use any external CSS resources.
This Pen doesn't use any external JavaScript resources.