纯css实现钢琴自动弹奏效果
代码语言:html
所属分类:布局界面
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title> Piano keyboard</title>
<style>
/* Variables */
/* Reset */
*, *::after, *::before {
margin: 0;
padding: 0;
box-sizing: border-box;
transform-style: preserve-3d;
}
/* Generic */
body {
width: 100%;
height: 100vh;
display: flex;
justify-content: center;
align-items: center;
background-color: #B8ACFB;
}
.main {
width: 800px;
height: 600px;
position: relative;
}
/*Base*/
.face-keyboard,
.face-key {
position: absolute;
}
.keyboard {
position: relative;
left: 27%;
top: 33%;
transform-origin: bottom left;
transform: perspective(10000px) rotateY(-16deg) rotateX(66deg) rotateZ(37deg);
/**/
/**/
}
.keyboard__front {
width: 800px;
height: 220px;
transform: rotateY(0deg) translateZ(15px);
background-color: #3F3B43;
}
.keyboard__back {
width: 800px;
height: 220px;
transform: rotateY(180deg) translateZ(15px);
background-color: #151514;
box-shadow: 0px 25px 0 #6E68C5, -40px 5px 0 #6E68C5, -40px 25px 0 #6E68C5;
}
.keyboard__right {
width: 30px;
height: 220px;
transform: rotateY(90deg) translateZ(785px);
background-image: linear-gradient(to right, #1A191C 50%, #151514 50%);
}
.keyboard__left {
width: 30px;
height: 220px;
transform: rotateY(-90deg) translateZ(15px);
background-image: linear-gradient(to right, #1A191C 50%, #151514 50%);
}
.keyboard__top {
width: 800px;
height: 30px;
transform: rotateX(90deg) translateZ(15px);
background-color: #3F3B43;
}
.keyboard__bottom {
width: 800px;
height: 30px;
transform: rotateX(-90deg) translateZ(205px);
background-image: linear-gradient(to bottom, #1A191C 50%, #151514 50%);
}
.keyboard__f-top {
display: flex;
justify-content: center;
align-items: flex-end;
flex-wrap: nowrap;
width: 803px;
height: 100px;
margin-top: 10px;
border-bottom: 20px solid #2A2631;
transform: translateZ(5px) rotateX(-6deg) rotateZ(0.9deg);
background-color: #3F3B43;
}
.keyboard__led {
position: relative;
display: flex;
justify-content: center;
align-items: flex-end;
width: 110px;
height: 42px;
background-color: #3CFBFE;
border-top: 10px solid #151514;
border-left: 10px solid #151514;
box-shadow: inset 8px 8px 0 #00A6D1;
}
.keyboard__line {
display: flex;
flex-direction: column;
justify-content: flex-end;
align-items: center;
height: 25px;
padding: 0 1px;
transform: rotateZ(180deg);
overflow: hidden;
}
.keyboard__line:nth-of-type(1) {
animation: line 1s ease-in alternate infinite 0.1s;
}
.keyboard__line:nth-of-type(2) {
animation: line 1s ease-in alternate infinite 0.2s;
}
.keyboard__line:nth-of-type(3) {
animation: line 1s ease-in alternate infinite 0.3s;
}
.keyboard__line:nth-of-type(4) {
animation: line 1s ease-in alternate infinite 0.4s;
}
.keyboard__line:nth-of-type(5) {
animation: line 1s ease-in alternate infinite 0.5s;
}
.keyboard__line:nth-of-type(6) {
animation: line 1s ease-in alternate infinite 0.6s;
}
.keyboard__line:nth-of-type(7) {
animation: line 1s ease-in alternate infinite 0.7s;
}
.keyboard__line:nth-of-type(8) {
animation: line 1s ease-in alternate infinite 0.8s;
}
.keyboard__line:nth-of-type(9) {
animation: line 1s ease-in alternate infinite 0.9s;
}
.keyboard__line:nth-of-type(10) {
animation: line 1s ease-in alternate infinite 1s;
}
.keyboard__dot {
height: 6px;
width: 6px;
flex-shrink: 0;
background-color: rgba(21, 21, 20, 0.3);
}
.keyboard__buttons {
display: flex;
justify-content: center;
align-items: center;
flex-wrap: wrap;
width: 60px;
height: 80px;
margin: 0 40px;
padding: 5px 0;
}
.keyboard__button {
height: 20px;
width: 20px;
margin: 0 3px;
box-shadow: 4px 4px 0 #151514;
background-color: #3CFBFE;
}
.keyboard__button:nth-of-type(2) {
animation: button-1 1s infinite;
}
.keyboard__button:nth-of-type(3) {
animation: button-1 2s infinite reverse;
}
.keyboard__button:nth-of-type(5) {
animation: button-2 2s infinite;
}
.keyboard__button:nth-of-type(6) {
animation: button-3 1.5s infinite;
}
.keyboard__speaker {
width: 70px;
height: 70px;
background-color: #1A191C;
border-radius: 50%;
margin-bottom: 5px;
background-image: radial-gradient(#1A191C 3px, transparent 3px);
background-color: #3F3B43;
background-position: 0 0, 4px 4px;
background-size: 10px 10px;
}
.keyboard__f-bottom {
position: relative;
display: flex;
justify-content: flex-start;
align-items: flex-start;
flex-wrap: nowrap;
width: 630px;
height: 120px;
margin: 0 auto;
padding-top: 1px;
background-color: #FFFFFF;
}
.key {
position: relative;
width: 30px;
z-index: 1000;
}
.key:nth-of-type(1) {
animation: key-down-white 0.5s infinite alternate 0.0666666667s;
}
.key:nth-of-type(2) {
animation: key-down-white 0.5s infinite alternate 0.1333333333s;
}
.key:nth-of-type(3) {
animation: key-down-white 0.5s infinite alternate 0.2s;
}
.key:nth-of-type(4) {
animation: key-down-white 0.5s infinite alternate 0.2666666667s;
}
.key:nth-of-type(5) {
animation: key-down-white 0.5s infinite alternate 0.3333333333s;
}
.key:nth-of-type(6) {
animation: key-down-white 0.5s infinite alternate 0.4s;
}
.key:nth-of-type(7) {
animation: key-down-white 0.5s infinite alternate 0.4666666667s;
}
.key:nth-of-type(8) {
animation: key-down-white 0.5s infinite alternate 0.5333333333s;
}
.key:nth-of-type(9) {
.........完整代码请登录后点击上方下载按钮下载查看
网友评论0