JSFiddle - React, Tailwind, and code Playground

HTML

<body style="background-color: lightgray;">
    <div class="keyboard">
    <textarea name="area" id="" cols="30" rows="10" disabled>texttexttexttexttext</textarea>
        <div class="keyboard__row">
            <div class="btn">`</div>
            <div class="btn">1</div>
            <div class="btn">2</div>
            <div class="btn">3</div>
            <div class="btn">4</div>
            <div class="btn">5</div>
            <div class="btn">6</div>
            <div class="btn">7</div>
            <div class="btn">8</div>
            <div class="btn">9</div>
            <div class="btn">0</div>
            <div class="btn">-</div>
            <div class="btn">=</div>
            <div class="btn btn--backspace">Backspace</div>
        </div>
        <div class="keyboard__row">
            <div class="btn btn--tab" id="tab">Tab</div>
            <div class="btn">q</div>
            <div class="btn">w</div>
            <div class="btn">e</div>
            <div class="btn">r</div>
            <div class="btn">t</div>
            <div class="btn">y</div>
            <div class="btn">u</div>
            <div class="btn">i</div>
            <div class="btn">o</div>
            <div class="btn">p</div>
            <div class="btn">[</div>
            <div class="btn">]</div>
            <div class="btn">\</div>
        </div>
        <div class="keyboard__row">
            <div class="btn btn--capslock">CapsLock</div>
            <div class="btn">a</div>
            <div class="btn">s</div>
            <div class="btn">d</div>
            <div class="btn">f</div>
            <div class="btn">g</div>
            <div class="btn">h</div>
            <div class="btn">j</div>
            <div class="btn">k</div>
            <div class="btn">l</div>
            <div class="btn">;</div>
            <div class="btn">'</div>
            <div class="btn btn--enter">Enter</div>
        </div>
        <div class="keyboard__row">
            <div class="btn...

CSS

*, *::before, *::after {
  -webkit-box-sizing: border-box;
          box-sizing: border-box;
}

html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td,
article, aside, canvas, details, embed,
figure, figcaption, footer, header, hgroup,
menu, nav, output, ruby, section, summary,
time, mark, audio, video {
  margin: 0;
  padding: 0;
  border: 0;
  font-size: 100%;
  font: inherit;
  vertical-align: baseline;
}

/* make sure to set some focus styles for accessibility */
:focus {
  outline: 0;
}

/* HTML5 display-role reset for older browsers */
article, aside, details, figcaption, figure,
footer, header, hgroup, menu, nav, section {
  display: block;
}

body {
  line-height: 1;
}

ol, ul {
  list-style: none;
}

blockquote, q {
  quotes: none;
}

blockquote:before, blockquote:after,
q:before, q:after {
  content: '';
  content: none;
}

table {
  border-collapse: collapse;
  border-spacing: 0;
}

input[type=search]::-webkit-search-cancel-button,
input[type=search]::-webkit-search-decoration,
input[type=search]::-webkit-search-results-button,
input[type=search]::-webkit-search-results-decoration {
  -webkit-appearance: none;
  -moz-appearance: none;
}

input[type=search] {
  -webkit-appearance: none;
  -moz-appearance: none;
  -webkit-box-sizing: content-box;
  box-sizing: content-box;
}

textarea {
  overflow: auto;
  vertical-align: top;
  resize: vertical;
}

/**
 * Correct `inline-block` display not defined in IE 6/7/8/9 and Firefox 3.
 */
audio,
canvas,
video {
  display: inline-block;
  *display: inline;
  *zoom: 1;
  max-width: 100%;
}

/**
 * Prevent modern browsers from displaying `audio` without controls.
 * Remove excess height in iOS 5 devices.
 */
audio:not([controls]) {
 ...

JavaScript

const BTN = document.querySelectorAll('.btn');
const TEXTAREA = document.querySelector('textarea');
let flag = false;
let tab = '&emsp;&emsp;&emsp;&emsp;';

window.addEventListener('keydown', (event) => {
    if (event.key === 'Tab') {
        flag = true;
        event.preventDefault();
        TEXTAREA.value += tab;
    }
    BTN.forEach(index => {
        if (index.textContent === event.key.toLowerCase()) {
            index.style.cssText = 'background-color: gray; color: white;';
            if (event.key !== 'Tab' && event.key !== 'CapsLock' && event.key !== 'Shift' && event.key !== 'Enter' && event.key !== 'Backspace') {
                TEXTAREA.value += `${event.key}`;
            }
        }
    });
});

window.addEventListener('keyup', () => {
    BTN.forEach(index => {
        index.style.cssText = 'background-color: white; color: black;';
    });
});