<div id="app">
<keyboard/>
</div>
* {
box-sizing: border-box;
}
#app {
width: 100vw;
height: 100vh;
background: black;
display: flex;
justify-content: center;
align-items: center;
}
.keyboard {
width: 900px;
height: 300px;
background: white;
display: grid;
gap: 2px;
}
.keyboard__row {
display: grid;
gap: 2px;
grid-template-columns: repeat(60, 1fr);
grid-template-rows: 1fr 1fr;
}
.keyboard__key {
height: 100%;
width: 100%;
grid-column: span 4;
grid-row:span 2;
border-radius: 3px;
border: 1px solid gray;
transition: .05s background ease-in;
}
.keyboard__key--h0-5 {
grid-row: span 1;
}
.keyboard__key-arrow-up {
grid-row: 1;
grid-column-end: -5;
}
.keyboard__key-arrow-down {
grid-column-end: -5;
grid-row: 2;
}
.keyboard__key-arrow-left {
grid-column-end: -9;
grid-row: 2;
}
.keyboard__key-arrow-right {
grid-column-end: -1;
grid-row: 2;
}
.keyboard__key--w1-25 {
grid-column: span 5;
}
.keyboard__key--w1-5 {
grid-column: span 6;
}
.keyboard__key--w1-75 {
grid-column: span 7;
}
.keyboard__key--w2 {
grid-column: span 8;
}
.keyboard__key--w2-25 {
grid-column: span 9;
}
.keyboard__key--w2-75 {
grid-column: span 11;
}
.keyboard__key--space {
grid-column: span 22;
}
.keyboard__key--pressed {
background: lightblue;
}
View Compiled
Vue.component("keyboard", {
template: `
<div id="kbd" class="keyboard">
<div class="keyboard__row">
<div id="Backquote" class="keyboard__key"></div>
<div id="Digit1" class="keyboard__key"></div>
<div id="Digit2" class="keyboard__key"></div>
<div id="Digit3" class="keyboard__key"></div>
<div id="Digit4" class="keyboard__key"></div>
<div id="Digit5" class="keyboard__key"></div>
<div id="Digit6" class="keyboard__key"></div>
<div id="Digit7" class="keyboard__key"></div>
<div id="Digit8" class="keyboard__key"></div>
<div id="Digit9" class="keyboard__key"></div>
<div id="Digit0" class="keyboard__key"></div>
<div id="Minus" class="keyboard__key"></div>
<div id="Equal" class="keyboard__key"></div>
<div id="Backspace" class="keyboard__key keyboard__key--w2"></div>
</div>
<div class="keyboard__row">
<div class="keyboard__key keyboard__key--w1-5"></div>
<div id="KeyQ" class="keyboard__key"></div>
<div id="KeyW" class="keyboard__key"></div>
<div id="KeyE" class="keyboard__key"></div>
<div id="KeyR" class="keyboard__key"></div>
<div id="KeyT" class="keyboard__key"></div>
<div id="KeyY" class="keyboard__key"></div>
<div id="KeyU" class="keyboard__key"></div>
<div id="KeyI" class="keyboard__key"></div>
<div id="KeyO" class="keyboard__key"></div>
<div id="KeyP" class="keyboard__key"></div>
<div class="keyboard__key"></div>
<div class="keyboard__key"></div>
<div class="keyboard__key keyboard__key--w1-5"></div>
</div>
<div class="keyboard__row">
<div id="CapsLock" class="keyboard__key keyboard__key--w1-75"></div>
<div id="KeyA" class="keyboard__key"></div>
<div id="KeyS" class="keyboard__key"></div>
<div id="KeyD" class="keyboard__key"></div>
<div id="KeyF" class="keyboard__key"></div>
<div id="KeyG" class="keyboard__key"></div>
<div id="KeyH" class="keyboard__key"></div>
<div id="KeyJ" class="keyboard__key"></div>
<div id="KeyK" class="keyboard__key"></div>
<div id="KeyL" class="keyboard__key"></div>
<div class="keyboard__key"></div>
<div class="keyboard__key"></div>
<div id="Enter" class="keyboard__key keyboard__key--w2-25"></div>
</div>
<div class="keyboard__row">
<div id="ShiftLeft" class="keyboard__key keyboard__key--w1-25"></div>
<div class="keyboard__key"></div>
<div id="KeyZ" class="keyboard__key"></div>
<div id="KeyX" class="keyboard__key"></div>
<div id="KeyC" class="keyboard__key"></div>
<div id="KeyV" class="keyboard__key"></div>
<div id="KeyB" class="keyboard__key"></div>
<div id="KeyN" class="keyboard__key"></div>
<div id="KeyM" class="keyboard__key"></div>
<div class="keyboard__key"></div>
<div class="keyboard__key"></div>
<div class="keyboard__key"></div>
<div id="ShiftRight" class="keyboard__key keyboard__key--w2-75"></div>
</div>
<div class="keyboard__row">
<div class="keyboard__key"></div>
<div id="ControlLeft" class="keyboard__key"></div>
<div id="AltLeft" class="keyboard__key"></div>
<div id="MetaLeft" class="keyboard__key keyboard__key--w1-25"></div>
<div id="Space" class="keyboard__key keyboard__key--space"></div>
<div id="MetaRight" class="keyboard__key keyboard__key--w1-25"></div>
<div id="AltRight" class="keyboard__key"></div>
<div id="ArrowLeft" class="keyboard__key keyboard__key--h0-5 keyboard__key-arrow-left"></div>
<div id="ArrowUp" class="keyboard__key keyboard__key--h0-5 keyboard__key-arrow-up"></div>
<div id="ArrowDown" class="keyboard__key keyboard__key--h0-5 keyboard__key-arrow-down"></div>
<div id="ArrowRight" class="keyboard__key keyboard__key--h0-5 keyboard__key-arrow-right"></div>
</div>
</div>`
})
const app = new Vue ({
el: "#app",
methods: {
keyDown: e => {
console.log(e)
let k = event.code
try {
document.getElementById(k).classList.add("keyboard__key--pressed")
} catch(err) {
console.log(err)
}
},
keyUp: e => {
let k = event.code
try {
document.getElementById(k).classList.remove("keyboard__key--pressed")
} catch(err) {
console.log(err)
}
}
},
mounted() {
document.addEventListener("keydown", this.keyDown)
document.addEventListener("keyup", this.keyUp)
},
})
let test = e => {
let k = event.keyboard__key
console.log(k)
}
Vue.config.devtools = true
This Pen doesn't use any external CSS resources.