About this snippet

Track user activity with a visual heatmap grid. We use simple JavaScript to build the blocks, which helps you show data just like popular developer tools do.

Size
2.0 KB
Uses
HTML, CSS, JavaScript
Loads
Nothing external
Views
228
<div class="heatmap-card">
  <h3>Contribution Activity</h3>
  <div class="heatmap-grid" id="heatmap-grid"></div>
  <div class="heatmap-legend">
    <span>Less</span>
    <div class="legend-box level-0"></div>
    <div class="legend-box level-1"></div>
    <div class="legend-box level-2"></div>
    <div class="legend-box level-3"></div>
    <div class="legend-box level-4"></div>
    <span>More</span>
  </div>
</div>
*, *::before, *::after {
  box-sizing: border-box;
}

body {
  font-family: system-ui, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
  background: #f9fafb;
  display: flex;
  justify-content: center;
  align-items: center;
  min-height: 100vh;
  margin: 0;
  padding: 20px;
}

.heatmap-card {
  background: #ffffff;
  padding: 30px;
  border-radius: 12px;
  box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1);
  overflow-x: auto;
}

.heatmap-card h3 {
  margin-top: 0;
  margin-bottom: 20px;
  color: #111827;
  font-size: 1.125rem;
}

.heatmap-grid {
  display: grid;
  grid-auto-flow: column;
  grid-template-rows: repeat(7, 1fr);
  gap: 4px;
}

.heat-box, .legend-box {
  width: 14px;
  height: 14px;
  border-radius: 3px;
  background-color: #ebedf0;
}

.level-1 { background-color: #9be9a8; }
.level-2 { background-color: #40c463; }
.level-3 { background-color: #30a14e; }
.level-4 { background-color: #216e39; }

.heatmap-legend {
  display: flex;
  align-items: center;
  justify-content: flex-end;
  gap: 6px;
  margin-top: 20px;
  font-size: 0.875rem;
  color: #6b7280;
}
const grid = document.getElementById("heatmap-grid");

for (let i = 0; i < 365; i++) {
  const box = document.createElement("div");
  box.className = "heat-box";
  
  const randomValue = Math.random();
  
  if (randomValue > 0.9) {
    box.classList.add("level-4");
  } else if (randomValue > 0.7) {
    box.classList.add("level-3");
  } else if (randomValue > 0.4) {
    box.classList.add("level-2");
  } else if (randomValue > 0.2) {
    box.classList.add("level-1");
  }
  
  grid.appendChild(box);
}
Esc
↑↓ moveEnter select

Start from a template

Open an .html file, or HTML, CSS, JS, Markdown, Less or TypeScript files. You can also drop them here. Styles and scripts go into their panes.

Share

Source

Keyboard shortcuts

Save