{ CF }

30 CSS Badges

Scrabble Tile

One letter, one number. The whole game fits in a square. Hover lifts each tile independently — the kind of small detail that makes a word feel played rather than typed.

Pure CSS MIT licensed

Scrabble Tile the 3rd of 30 designs in the 30 CSS Badges collection. The design is implemented in pure CSS — no JavaScript required. Copy the HTML and CSS panels below into your project. Because the demo is pure CSS, it works in any framework or templating engine you happen to use. The design honours prefers-reduced-motion and uses real semantic markup, so it ships accessibility-ready out of the box.

Live preview

Open in playground

The code

<div class="tile-stage">
  <div class="tile-wrap">
    <div class="tile-row">
      <div class="tile-cube"><span class="tile-letter">S</span><span class="tile-points">1</span></div>
      <div class="tile-cube"><span class="tile-letter">I</span><span class="tile-points">1</span></div>
      <div class="tile-cube"><span class="tile-letter">M</span><span class="tile-points">3</span></div>
      <div class="tile-cube"><span class="tile-letter">P</span><span class="tile-points">3</span></div>
      <div class="tile-cube"><span class="tile-letter">L</span><span class="tile-points">1</span></div>
      <div class="tile-cube"><span class="tile-letter">E</span><span class="tile-points">1</span></div>
    </div>
    <div class="tile-word-label">10 points · 6 letters · adjective</div>
  </div>
</div>
.tile-stage {
  background: linear-gradient(145deg, #e8dfc8 0%, #d8d0b4 100%);
  padding: 60px 48px;
  display: flex;
  flex-direction: column;
  gap: 16px;
  justify-content: center;
  align-items: center;
  min-height: 320px;
}
.tile-wrap {
  display: flex;
  flex-direction: column;
  gap: 18px;
  align-items: center;
}
.tile-row {
  display: flex;
  gap: 6px;
  align-items: flex-end;
}
.tile-cube {
  width: 58px;
  height: 58px;
  background: linear-gradient(145deg, #f4e8c2 0%, #e8d8a0 100%);
  border: 1px solid #c8a840;
  border-radius: 4px;
  position: relative;
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: center;
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,0.5),
    2px 3px 0 #b09030,
    3px 4px 4px rgba(80,60,0,0.2);
  transition: transform 0.25s cubic-bezier(0.2, 0.8, 0.2, 1), box-shadow 0.25s;
  user-select: none;
}
.tile-cube:hover {
  transform: translateY(-6px) rotate(-2deg);
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,0.5),
    2px 3px 0 #b09030,
    6px 12px 16px rgba(80,60,0,0.22);
}
@media (prefers-reduced-motion: reduce) {
  .tile-cube { transition: none; }
}
.tile-letter {
  font-family: "Cinzel", Georgia, serif;
  font-size: 30px;
  font-weight: 700;
  color: #2a1e08;
  line-height: 1;
}
.tile-points {
  position: absolute;
  bottom: 4px;
  right: 5px;
  font-family: ui-monospace, "JetBrains Mono", monospace;
  font-size: 10px;
  font-weight: 700;
  color: #4a3818;
  line-height: 1;
}
.tile-word-label {
  font-family: "Cormorant Garamond", Georgia, serif;
  font-style: italic;
  font-size: 13px;
  letter-spacing: 0.08em;
  color: #7a6230;
  text-align: center;
  margin-top: 4px;
}

Search CodeFronts

Loading…