14. Geburtstagssale 33 % Rabatt + 1 GRATIS MONAT LIMITIERTES ANGEBOT Jetzt Angebot sichern
33 % Rabatt + 1 GRATIS MONAT Jetzt Angebot sichern
Sprache:

Wie man einen einfachen HTML-Kalender erstellt (Code- und No-Code-Optionen)

Vier Wege, einen Kalender auf Ihrer Website zu integrieren – von Copy-and-Paste-HTML- und CSS-Code bis zur Google Calendar-Einbettung zu einem vollständig konfigurierten Veranstaltungs-Kalender-Widget. Jede Methode enthält praxisnahe Beispiele, ehrliche Trade-offs und eine Entscheidungsgrundlage, damit Sie die richtige Lösung für Ihre Situation auswählen.
Sehen Sie, was ChatGPT denkt Öffnen Sie den Live-Widget-Editor
How to Make a Simple HTML Calendar (Code and No-Code Options)

Viele HTML‑Kalender-Tutorials konzentrieren sich auf die Grundlagen: ein statisches Monatsraster, das mit einfachem Markup und Styling aufgebaut wird. Für einen Live‑Website‑Kalender benötigst du in der Regel Funktionen wie Navigation, Reaktionsfähigkeit und Terminunterstützung, damit Besucher tatsächlich interagieren können und immer auf dem neuesten Stand bleiben.

Dieser Artikel stellt vier Ansätze vor, wie Sie einen HTML-Kalender in Ihre Website integrieren können: eine statische Monatsanzeige mit CSS Grid erstellen, JavaScript für dynamische Navigation hinzufügen, Google Calendar als iframe einbetten und ein No‑Code-Kalender-Widget verwenden. Jede Methode passt zu einer anderen Situation, und der Entscheidungsrahmen am Ende hilft Ihnen, die passende Lösung zu finden.

Was Sie lernen werden:
  • Kopierfertiger HTML-Kalender-Code mit CSS Grid – statische und dynamische Versionen
  • So fügen Sie Monatsnavigation und heutige Hervorhebung mit reinem JavaScript hinzu.
  • Google Calendar-Einbettung einrichten, einschließlich der Einschränkungen auf Mobilgeräten
  • Kalender-Widget ohne Code mit Veranstaltungsverwaltung und Filterfunktionen
  • Ein Entscheidungsrahmen, der Kalender-Methoden auf konkrete Anwendungsfälle abstimmt

Methodenvergleich

Bevor Sie sich für einen Ansatz entscheiden, hilft ein kurzer Vergleich, Ihre Optionen einzugrenzen. Die vier Methoden unterscheiden sich darin, was sie leisten, wie viel Einrichtung sie benötigen und für wen sie gedacht sind:

MethodeAm besten geeignet fürSchwierigkeitsgradAnpassungDynamische VeranstaltungenKosten
Statisches HTML/CSSMonatsraster zur AnzeigeBasis (Kopieren & Einfügen)Vollständige Anpassung (Ihr CSS)NeinKostenlos
Dynamischer JS-KalenderNavigierbarer MonatskalenderFortgeschrittenVollständiger Code (Ihr Code)MonatsnavigationKostenlos
Google Kalender-EinbettungOrganisationen, die Google Kalender verwendenEinfach (iframe)Very limitedJa (mit Google synchronisiert)Kostenlos
Code-freies WidgetVeranstaltungen, Filterfunktionen, RSVP-LinksEinfach (ohne Code)Vollständige Ansicht (visueller Editor)Ja (manuell + Google-Synchronisierung)Kostenlos – Bezahlbar

Fazit: Ein statischer HTML/CSS-Kalender eignet sich gut für einfache visuelle Layouts, z. B. Portfolios, Zeitpläne oder Designelemente. Durch JavaScript lassen sich die Monatsnavigation ermöglichen und das Datum automatisch darstellen. Eine Google-Kalender-Einbettung passt gut, wenn Sie bereits Ereignisse in Google verwalten und eine schnelle, wartungsarme Anzeige wünschen. Ein HTML-Kalender-Widget ohne Code bietet mehr Flexibilität – mit Veranstaltungsverwaltung, wiederkehrenden Terminen, Filteroptionen und visueller Anpassung ganz ohne Programmieraufwand.

Methode 1: Statisches HTML/CSS-Kalender

Dies ist der einfachste HTML-Kalendercode, den Sie erstellen können — eine Monatsanzeige mit CSS Grid. Es bildet die Grundlage, auf der Methode 2 aufbaut, und funktioniert als eigenständige Vorlage, wenn Sie nur eine visuelle Monatsansicht benötigen.

CSS Grid calendar example

Kopieren Sie den untenstehenden Code und fügen Sie ihn in eine HTML-Datei oder CMS-Codeblock ein. Er zeigt einen Kalender für Juni 2026 an — ändern Sie die Monatsüberschrift und die Tageszahlen, um einen anderen Monat anzuzeigen.

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Static HTML Calendar</title>
<style>
  .calendar {
    --accent: #2563eb;          /* change this to match your brand */
    max-width: 480px;
    margin: 0 auto;
    font-family: system-ui, sans-serif;
  }
  .calendar-header {
    display: flex;
    justify-content: center;
    align-items: center;
    padding: 0.75rem 0;
    font-size: 1.2rem;
    font-weight: 600;
    color: var(--accent);
  }
  .calendar-grid {
    display: grid;
    grid-template-columns: repeat(7, 1fr);  /* 7 equal columns */
    gap: 2px;
    text-align: center;
  }
  .day-name {
    padding: 0.5rem 0;
    font-size: 0.8rem;
    font-weight: 600;
    color: #64748b;
  }
  .day {
    padding: 0.6rem 0;
    font-size: 0.95rem;
    border-radius: 6px;
  }
  .day:hover { background: #f1f5f9; }
  .today {
    background: var(--accent);
    color: #fff;
    font-weight: 600;
  }
  .today:hover { background: var(--accent); }
</style>
</head>
<body>

<div class="calendar">
  <div class="calendar-header">June 2026</div>
  <div class="calendar-grid">
    <span class="day-name">Mon</span>
    <span class="day-name">Tue</span>
    <span class="day-name">Wed</span>
    <span class="day-name">Thu</span>
    <span class="day-name">Fri</span>
    <span class="day-name">Sat</span>
    <span class="day-name">Sun</span>
    <!-- June 2026 starts on Monday — no offset needed -->
    <span class="day today">1</span>
    <span class="day">2</span><span class="day">3</span><span class="day">4</span>
    <span class="day">5</span><span class="day">6</span><span class="day">7</span>
    <span class="day">8</span><span class="day">9</span><span class="day">10</span>
    <span class="day">11</span><span class="day">12</span><span class="day">13</span>
    <span class="day">14</span><span class="day">15</span><span class="day">16</span>
    <span class="day">17</span><span class="day">18</span><span class="day">19</span>
    <span class="day">20</span><span class="day">21</span><span class="day">22</span>
    <span class="day">23</span><span class="day">24</span><span class="day">25</span>
    <span class="day">26</span><span class="day">27</span><span class="day">28</span>
    <span class="day">29</span><span class="day">30</span>
  </div>
</div>

</body>
</html>'></html>

Die CSS-Eigenschaft oben, --accent, steuert die Hervorhebungsfarbe — ändern Sie sie einmal, und Kopfzeile sowie Heute-Marker aktualisieren sich. Das Layout ist standardmäßig responsiv, weil 1fr-Einheiten den verfügbaren Raum gleichmäßig aufteilen, statt feste Pixelbreiten zu verwenden. Auf kleineren Bildschirmen schrumpfen die Zellen proportional, ohne zu brechen.

Falls der Monat, den Sie anzeigen, nicht am Montag beginnt, verwenden Sie grid-column-start auf der ersten Tageszelle, um ihn in die richtige Spalte zu verschieben. Wenn der Monat beispielsweise an einem Mittwoch beginnt, fügen Sie style="grid-column-start: 3" der ersten <span class="day"> hinzu. Dadurch befindet sich der erste Tag in der dritten Spalte, ohne leere Platzhalterzellen zu benötigen — eines der Vorteile von CSS Grid gegenüber einer tabellenbasierten Anordnung.

Hinweis: Um diesen einfachen Kalender-HTML-Code in eine wiederverwendbare HTML-Kalender-Vorlage zu verwandeln, speichern Sie die Datei und tauschen Sie Monatstitel und Tageszahlen aus, wann immer Sie einen anderen Monat benötigen. Für alles, was über eine statische Anzeige hinausgeht, erledigt Methode 2 das automatisch.

Methode 2: Dynamischer JavaScript-Kalender

Die statische Version dient als Schnappschuss, doch die meisten praktischen Anwendungsfälle benötigen eine Monatsnavigation und ein automatisch gerendertes aktuelles Datum. Diese Version baut auf derselben CSS-Grid-Struktur auf und fügt etwa 50 Zeilen reines JavaScript (Vanilla JS) für die dynamische Darstellung hinzu.

Dynamic JavaScript Calendar example

Der untenstehende Kalender-HTML-Code ermittelt den aktuellen Monat und das Jahr, zeigt die korrekte Anzahl der Tage an, positioniert den ersten Tag in der richtigen Spalte, hebt heute hervor und ermöglicht Besuchern das Vor- und Zurückblättern zwischen Monaten. Der Jahreswechsel (Dezember zu Januar bzw. Januar zu Dezember) erfolgt automatisch.

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Dynamischer HTML-Kalender</title>
<style>
  .calendar {
    --accent: #2563eb;
    max-width: 480px;
    margin: 0 auto;
    font-family: system-ui, sans-serif;
  }
  .calendar-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: 0.75rem 0;
  }
  .calendar-header button {
    background: none;
    border: 1px solid #e2e8f0;
    border-radius: 6px;
    padding: 0.4rem 0.8rem;
    cursor: pointer;
    font-size: 0.9rem;
  }
  .calendar-header button:hover { background: #f1f5f9; }
  .month-year {
    font-size: 1.2rem;
    font-weight: 600;
    color: var(--accent);
  }
  .calendar-grid {
    display: grid;
    grid-template-columns: repeat(7, 1fr);
    gap: 2px;
    text-align: center;
  }
  .day-name {
    padding: 0.5rem 0;
    font-size: 0.8rem;
    font-weight: 600;
    color: #64748b;
  }
  .day {
    padding: 0.6rem 0;
    font-size: 0.95rem;
    border-radius: 6px;
  }
  .day:hover { background: #f1f5f9; }
  .today {
    background: var(--accent);
    color: #fff;
    font-weight: 600;
  }
  .today:hover { background: var(--accent); }
</style>
</head>
<body>

<div class="calendar">
  <div class="calendar-header">
    <button id="prev">&larr; Zurück</button>
    <span class="month-year" id="monthYear"></span>
    <button id="next">Weiter &rarr;</button>
  </div>
  <div class="calendar-grid" id="grid">
    <span class="day-name">Mo</span>
    <span class="day-name">Di</span>
    <span class="day-name">Mi</span>
    <span class="day-name">Do</span>
    <span class="day-name">Fr</span>
    <span class="day-name">Sa</span>
    <span class="day-name">So</span>
  </div>
</div>

<script>
  const grid = document.getElementById("grid");
  const monthYear = document.getElementById("monthYear");
  const now = new Date();
  let currentMonth = now.getMonth();   // 0-based: 0 = January
  let currentYear = now.getFullYear();

  const monthNames = [
    "Januar","Februar","März","April","Mai","Juni",
    "Juli","August","September","Oktober","November","Dezember"
  ];

  function renderCalendar() {
    // Clear previous day cells, keep the 7 day-name headers
    grid.querySelectorAll(".day").forEach(d => d.remove());

    // monthYear will show German month name + year
    monthYear.textContent = monthNames[currentMonth] + " " + currentYear;

    // Day of week for the 1st (0=Sun). Convert to Mon-start: Mon=0 … Sun=6
    let firstDay = new Date(currentYear, currentMonth, 1).getDay();
    firstDay = (firstDay + 6) % 7;

    const daysInMonth = new Date(currentYear, currentMonth + 1, 0).getDate();
    const today = new Date();

    // Blank cells before the first day
    for (let i = 0; i < firstDay; i++) {
      const blank = document.createElement("span");
      blank.className = "day";
      grid.appendChild(blank);
    }

    // Day cells
    for (let d = 1; d <= daysInMonth; d++) {
      const cell = document.createElement("span");
      cell.className = "day";
      cell.textContent = d;

      if (
        d === today.getDate() &&
        currentMonth === today.getMonth() &&
        currentYear === today.getFullYear()
      ) {
        cell.classList.add("today");
      }
      grid.appendChild(cell);
    }
  }

  document.getElementById("prev").addEventListener("click", () => {
    currentMonth--;
    if (currentMonth < 0) { currentMonth = 11; currentYear--; }
    renderCalendar();
  });

  document.getElementById("next").addEventListener("click", () => {
    currentMonth++;
    if (currentMonth > 11) { currentMonth = 0; currentYear++; }
    renderCalendar();
  });

  renderCalendar();
</script>

</body>
</html>

Zwei JavaScript-Details, die es zu beachten gilt. Erstens, new Date(year, month, 1).getDay() gibt den Wochentag des ersten Tages zurück, wobei JavaScript Sonntag als 0 verwendet. Die Umrechnung (firstDay + 6) % 7 verschiebt den Index so, dass Montag 0 und Sonntag 6 ist, was dem Grid-Layout entspricht, das Montag als Start verwendet. Zweitens ist new Date(year, month + 1, 0).getDate() eine Kurzform, um die Anzahl der Tage in einem Monat zu ermitteln — Tag 0 des nächsten Monats ergibt den letzten Tag des aktuellen Monats.

Ein häufiger Fehler in Kalender-JavaScript ist das Vergessen, dass Monate nullbasiert sind. Januar ist 0, nicht 1. Wenn der Kalender den falschen Monat anzeigt, ist dies fast immer der Grund. Die Navigations-Handler müssen den Jahreswechsel explizit berücksichtigen — ein Rückschreiten über Januar hinaus sollte den Monat auf Dezember setzen und ein Jahr abziehen.

Beschränkung: Diese dynamische Kalenderfunktion kümmert sich um Anzeige und Navigation, bietet jedoch keine Ereignisse, wiederkehrende Termine oder Kalender-Synchronisation. Funktionen wie Ereignisdetails, Filterung oder gespeicherte Termine erfordern zusätzliche Infrastruktur und Code. Wenn Sie eine Terminverwaltung benötigen, ist Methode 3 oder 4 oder eine JavaScript-Kalenderbibliothek in der Regel eine praktischere Option.

Methode 3: Google Kalender-Einbettung

Wenn Ihre Organisation ihren Terminplan bereits im Google Kalender verwaltet, entfällt das Codieren vollständig, wenn Sie ihn als iframe einbetten. Das Ergebnis ist ein interaktiver HTML-Veranstaltungskalender, der sich automatisch aktualisiert, sobald Sie Termine im Google Kalender hinzufügen oder ändern.

Einrichtungsprozess

  1. Stelle den Kalender auf öffentlich. In Google Kalender öffnest du die Einstellungen des Kalenders, den du einbetten möchtest. Unter „Zugriffsberechtigungen für Ereignisse“ wählst du „Für die Öffentlichkeit freigeben“. Nur öffentliche Kalender werden in einem Embed angezeigt – private oder freigegebene Kalender werden nicht dargestellt.
  2. Öffnen Sie die Einbettungseinstellungen. Im gleichen Einstellungsfenster scrollen Sie zu „Kalender integrieren“. Klicken Sie auf die Schaltfläche „Anpassen“, um das Anpassungstool zu öffnen.
  3. Anzeige konfigurieren. Das Anpassungstool ermöglicht es Ihnen, den Titel festzulegen, die Standardansicht (Monat, Woche oder Agenda), Breite und Höhe in Pixeln, Startdatum, Zeitzone sowie einzelne Elemente wie Navigationsschaltflächen, Datumsüberschrift, Drucksymbol und Kalender-Registerkarten ein- oder auszuschalten. Sie können außerdem mehrere öffentliche Kalender zu einer einzigen Einbettung zusammenführen.
  4. Iframe-Code kopieren. Klicken Sie auf „Kopieren“, um den <iframe> Einbettungscode zu erhalten. So sieht er aus: <iframe src="https://calendar.google.com/calendar/embed?src=..." width="800" height="600"></iframe>
  5. Auf Ihrer Website einfügen. Fügen Sie das iframe in jede HTML-Seite oder CMS-Custom-HTML-Block ein. Für eine detailliertere Anleitung, einschließlich plattform-spezifischer Einfügehinweise, sehen Sie sich diese Anleitung zum Hinzufügen des Google-Kalenders zu jeder Website an.

Kompromisse

Die Einbettung eines Google-Kalenders funktioniert gut für eine schnelle, kostenlose Kalenderanzeige, hat jedoch Einschränkungen. Das iframe verwendet feste Abmessungen und ist nicht vollständig responsive, was die mobile Ansicht erschwert.

Da es von Googles Domain geladen wird, lässt sich das Design nicht vollständig mit eigenem CSS oder JavaScript anpassen, daher sieht es immer wie ein eingebettetes Google-Produkt aus. Besucher können Veranstaltungen ansehen und Details öffnen, die Interaktion ist jedoch auf das Betrachten beschränkt – direkte Buchung oder Anmeldung ist nicht möglich.

Hinweis: Diese Kompromisse eignen sich gut für interne Seiten, Community-Websites oder jeden Kontext, in dem visuelles Branding nicht kritisch ist und Ihr Publikum überwiegend Desktop nutzt. Für alles Öffentlich zugängliche, bei dem mobile Erfahrung und konsistentes Design wichtig sind, bietet Ihnen ein Widget ohne Code mehr Kontrolle.

Methode 4: No-Code-Kalender-Widget

Wenn Sie Ereignisverwaltung, visuelle Anpassung und responsives Design benötigen, ohne Code zu schreiben, füllt ein dediziertes Kalender-Widget die Lücke zwischen einem einfachen HTML-Kalender und einer vollständigen Kalenderanwendung. Das Elfsight Event Calendar ist eine Option in dieser Kategorie – und es dauert nur 5 Minuten, um es einzurichten. Hier ist der Ablauf auf einen Blick:

  1. Öffnen Sie den Kalender-Editor Editorund wählen Sie eine Vorlage.
  2. Fügen Sie Ihre Veranstaltungen hinzu und konfigurieren Sie das Styling.
  3. Klicken Sie auf „Zur Website hinzufügen“ und kopieren Sie den Einbettungscode.
  4. Fügen Sie den Code in das Backend Ihrer Website ein und veröffentlichen Sie ihn.

Erstellen Sie Ihren eigenen Kalender direkt hier im interaktiven visuellen Editor ↓

Herausragende Funktionen

Alles darunter ist Funktionalität, die ein handkodierter HTML/JS-Kalender nicht von Haus aus bietet — und die erheblichen Entwicklungsaufwand erfordern würde, um sie von Grund auf neu zu erstellen.

  • Sieben Layouttypen — Listen-, Raster-, Masonry-, Slider- und Kalenderansichten für Monat, Woche und Tag. Ein einzelnes Widget kann auf verschiedenen Seiten unterschiedliche Layouts anzeigen.
  • Drei Event-Quellen — Fügen Sie Veranstaltungen manuell über einen visuellen Editor hinzu, importieren Sie sie in großen Mengen per CSV oder synchronisieren Sie sie einseitig aus Google Kalender (mit Unterstützung von Ort, Veranstalter, Tags, Veranstaltungsart usw.).
  • Wiederkehrende Ereignisse — tägliche, wöchentliche, monatliche, jährliche und benutzerdefinierte Frequenzen mit Ausnahmen für einzelne Vorkommnisse.
  • Termin-Popups — Besucher klicken auf einen Termin, um vollständige Details, eine Standortkarte, eine CTA-Schaltfläche und eine Option „Zum Kalender hinzufügen“ zu sehen, die eine universelle .ics-Datei erzeugt.
  • Fünf Filter + Suche – Datum, Veranstaltungstyp, Ort, Gastgeber und Tags, plus eine Stichwortsuche. Filter werden inline angezeigt oder in einem Dropdown.
  • Besucher-Zeitzonenanpassung — Die Zeiten von Veranstaltungen passen sich automatisch der lokalen Zeitzone jedes Besuchers an, was insbesondere bei virtuellen oder zeitzonenübergreifenden Veranstaltungen relevant ist.
Profi-Tipp: Das Widget verweist auf externe Seiten für Ticketing oder Registrierung, verarbeitet jedoch keine Zahlungen und verwaltet RSVP-Anmeldungen intern nicht. Elfsight bietet ein eigenständiges Online-Terminbuchung-Widget für Terminplanung

Es funktioniert mit WordPress, Shopify, Squarespace, Wix, Webflow und jeder Plattform, die einen benutzerdefinierten HTML-Block unterstützt. Für den vollständigen Schritt-für-Schritt-Einrichtungsprozess bietet der Leitfaden zur Erstellung eines Veranstaltungskalenders für Ihre Website eine detaillierte Anleitung. Leitfaden zur Erstellung eines Veranstaltungskalenders für Ihre Website

Welche Methode passt zu Ihrer Situation?

Die richtige Methode hängt davon ab, was Ihr Kalender tun soll, nicht davon, wie technisch Sie sind. Die folgende Tabelle ordnet gängige Szenarien der jeweils passenden Vorgehensweise zu.

SituationBeste MethodeWarum
Portfolio- oder persönliche Website, die eine Monatsanzeige benötigtStatisches HTML/CSSUmfassende Designkontrolle, keine Abhängigkeiten, wenig Code
Website, die einen navigierbaren Kalender ohne Termine benötigtDynamischer JS-KalenderMonatsnavigation und Hervorhebung des heutigen Datums – ganz ohne Backend
Organisation nutzt bereits Google Kalender zur Terminplanung.Google Kalender-EinbettungSynchronisiert sich automatisch, kein Code nötig, kein Wartungsaufwand.
Veranstaltungsorte, Fitnessstudio, Schule oder Kirche: Veranstaltungseinträge veröffentlichen.Code-freies WidgetVeranstaltungsmanagement, Filterung, wiederkehrende Events, CTA-Buttons
Entwickler baut eine benutzerdefinierte KalenderanwendungJS-Bibliothek (FullCalendar usw.)Drag-and-Drop, wiederkehrende Ereignisregeln, API-Unterstützung
E-Commerce-Website mit Verkaufs- oder MarkteinführungsterminenStatisches HTML/CSS- oder Countdown-WidgetEin vollständiger Kalender ist oft übertrieben – eine einfache Datumsanzeige genügt.
Freelancer oder Berater mit VerfügbarkeitsanzeigeOhne-Code-Widget oder BuchungstoolDie Verfügbarkeitsanzeige benötigt Terminlogik, nicht nur ein Raster.

Der markante Unterschied zwischen eigenem Kalender-Code und der Nutzung eines Tools liegt oft im Terminmanagement. Ein simples JavaScript-Kalender mit Monatsnavigation ist relativ unkompliziert; Funktionen wie wiederkehrende Termine, Google Calendar-Synchronisation, Zeitzonenverwaltung, Filtern oder RSVP-Links erweitern den Umfang jedoch rasch. In diesem Fall ist ein Widget oder eine Kalender-Bibliothek oft die praktischere und zeitsparendere Lösung.

Vorlagenkatalog

Entdecken Sie 30+ Eventkalender-Vorlagen

Schauen Sie sich weitere fertige Vorlagen für jeden Anwendungsfall an oder erstellen Sie Ihre eigene Vorlage!
HTML Interactive Calendar template
Integrieren Sie einen ansprechenden Kalender in Ihre Website, damit Besucher gerne zurückkehren.
Erstellen Sie einen praktischen Kalender für Ihre Website, um den Terminplanungsprozess zu optimieren.
HTML Conference Agenda template
Fügen Sie Ihrer Website eine Agenda hinzu, um die Zeitpläne der Referenten und die Sitzungszeiten anzuzeigen.
Integrieren Sie den Kalender einer Kirche in Ihre Website, um über kommende Veranstaltungen und Gottesdienste zu informieren.
Binden Sie einen Kalender in Ihre Website ein, damit Besucher über alle regelmäßig stattfindenden Veranstaltungen Ihres Unternehmens informiert bleiben.
Kein passendes Template?
Sie können ganz einfach das Widget zusammenstellen, das Sie benötigen, mit unserem einfach zu bedienenden Konfigurator.

JavaScript-Kalenderbibliotheken

Wenn reines JavaScript nicht ausreicht, aber ein Ohne-Code-Widget nicht in deinen Tech-Stack passt, gibt es eine Handvoll Open-Source-Bibliotheken dazwischen. Diese liefern vorkonfigurierte Kalenderkomponenten mit Event-Unterstützung, und du steuerst die Integration.

BibliothekKernstärkeGröße / NutzungLizenz
FullCalendarVollständiges Veranstaltungsmanagement, Drag-and-Drop, Plugin-System19k+ GitHub-Sterne, über 1 Mio. npm-Downloads pro WocheMIT (Standard)
TUI CalendarUnterstützung mehrerer Kalender, erstklassige Lokalisierung für asiatische Sprachen8,2k GitHub-SterneMIT
Vanilla Calendar ProLeichtgewichtig, ohne Abhängigkeiten, mit integrierter BarrierefreiheitLeichtgewichtig / wachsendMIT
Veranstaltungskalender (vkurko)FullCalendar-ähnliche API – komprimiert auf 37 KBSvelte-basiert, framework-unabhängigMIT

FullCalendar ist die Standardempfehlung für Entwickler, die eine produktionsreife calendar API mit Terminverwaltung, wiederkehrenden Terminen und Framework-Unterstützung (React, Vue, Angular) benötigen. Für einfachere Anforderungen bietet Vanilla Calendar Pro integrierte ARIA-Beschriftungen, Tastaturnavigation und eine kompaktere Lösung.

Barrierefreiheit und Mobile-Tipps

Die meisten Anleitungen zur Erstellung eines Kalenders in HTML ignorieren die Barrierefreiheit völlig. Indem Sie Ihrem Kalender-Code ein paar Attribute hinzufügen, machen Sie ihn für Bildschirmleser und Tastaturnutzer nutzbar – der Aufwand ist im Vergleich zur Auswirkung minimal.

Für codebasierte Kalender in Methoden 1 und 2 decken diese Ergänzungen die Grundlagen ab:

  • Fügen Sie dem Kalender-Gitter-Container ein aria-label=”June 2026″ (oder dem aktuellen Monat/Jahr) hinzu, damit Screen-Reader ankündigen, was der Kalender anzeigt
  • Verwenden Sie das abbr-Attribut in den Wochentag-Headern: <span class=”day-name” abbr=”Wednesday”>Wed</span>. Bildschirmleser geben dann den vollständigen Wochentag statt der Abkürzung aus.
  • W3C APG date picker pattern defines the full interaction model, including arrow-key navigation between days and Page Up/Down for month changes”>Für den interaktiven JavaScript-Kalender fügen Sie dem Grid-Container role=”grid” und jeder Tageszelle role=”gridcell” hinzu. Das W3C APG Date-Picker-Muster definiert das vollständige Interaktionsmodell, einschließlich der Pfeil-Tasten-Navigation zwischen Tagen und Page Up/Down für Monatswechsel
  • Markieren Sie das aktuelle Datum mit aria-current=”date” zusätzlich zur visuellen Klasse .today.

ARIA-Hinweis

Eine Warnung zu ARIA: Fügen Sie nur Attribute hinzu, die Sie verstehen. Eine Analyse der Top-Millionen-Webseiten zeigte, dass Seiten mit ARIA durchschnittlich 59,1 erkennbare Barrierefreiheitsfehler aufwiesen, verglichen mit 42 bei Seiten ohne ARIA. Falsches ARIA-Markup schafft mehr Barrieren als gar kein ARIA.

Wenn Sie einen Kalender nur zur Anzeige erstellen, ist eine native HTML-Tabelle (<table>) mit ordnungsgemäßen Kopfzeilen (<th>) standardmäßig die barrierefreieste Option — die erste Regel von ARIA lautet, native HTML-Semantik zu bevorzugen, wenn sie existiert.

CSS-Grid für Mobilgeräte

Für Mobilgeräte ist der CSS Grid-Code in beiden Methoden standardmäßig responsiv, weil fr-Einheiten den verfügbaren Platz proportional aufteilen. Auf sehr kleinen Bildschirmen (unter 360px) helfen zwei Anpassungen: Die Wochentage auf einen Buchstaben verkürzen (M, T, W, T, F, S, S) und den Zellabstand auf 0.35rem reduzieren. Testen Sie es vor der Veröffentlichung auf einem echten Gerät — Emulatoren spiegeln nicht immer wider, wie sich Touch-Ziele bei kleinen Größen anfühlen.

Häufig gestellte Fragen





Kann ich einen HTML-Kalender ohne JavaScript erstellen?

Ja. Methode 1 in diesem Artikel ist ein rein HTML- und CSS-Kalender, der CSS Grid verwendet – kein JavaScript erforderlich. Er zeigt einen einzelnen Monat als statisches Raster an. Sie legen den Monatsnamen und die Tageszahlen im HTML manuell fest. Für die Navigation zwischen Monaten oder automatische Datumsdarstellung wird JavaScript benötigt (Methode 2).




Ist CSS Grid oder eine HTML-Tabelle besser für ein Kalender-Layout?





Wie mache ich einen HTML-Kalender mobil responsive?





Kann ich Termine zu einem HTML-Kalender hinzufügen, ohne Backend?





Was ist der Unterschied zwischen einem HTML-Kalender und einem Kalender-Widget?

Ein HTML-Kalender ist Code, den Sie schreiben und pflegen – Sie kontrollieren alles, bauen aber auch alles. Ein Kalender-Widget ist ein vorkonfiguriertes Tool mit Terminverwaltung, wiederkehrenden Ereignissen, Filtern und Designoptionen, das Sie über einen visuellen Editor anpassen und über einen Code-Snippet in Ihre Website einbetten. Widgets übernehmen die Komplexität, die eine eigenständige Entwicklung von Grund auf erforderlich machen würde.




So geht’s los

Der richtige Ansatz hängt davon ab, was Ihr Kalender leisten soll. Ein reiner Monatskalender zur Anzeige lässt sich mit dem Code in diesem Artikel in 30 Minuten erstellen. Ein navigierbarer Kalender mit Hervorhebung des heutigen Tages dauert etwas länger. Ein Veranstaltungs-Kalender mit Filtern, wiederkehrenden Terminen und RSVP-Links erfordert völlig andere Werkzeuge – und früh zu erkennen, wo diese Grenze liegt, spart mehr Zeit als jede Code-Optimierung.

Starte mit der einfachsten Methode, die deine aktuellen Anforderungen abdeckt. Wenn du darüber hinauswächst, ist der nächste Schritt klar: ein einbettbares Kalender-Widget, das du einbetten kannst, ohne von Grund auf neu zu beginnen, oder eine JavaScript-Bibliothek, wenn du volle programmatische Kontrolle benötigst. So legst du eine Grundlage auf, die passt – statt einen einfachen HTML-Kalender dazu zu zwingen, etwas zu tun, wofür er nicht konzipiert ist.

Artikel von
Content-Manager
Ich bin Content-Manager bei Elfsight und erstelle praxisnahe Leitfäden zu cleveren Website-Lösungen, damit Nutzer ihre Online-Projekte verbessern können. Meine Artikel sind darauf ausgelegt, einfach zu erklären, wie Widgets Webseiten verbessern und sie effektiver machen.