Krok 12: siatka CSS zamiast liczenia wierszy

Kalendarz na stronie: HTML składany w napisie - Kalendarz w JavaScript krok po kroku (HTML/CSS/JS)

Siatka CSS (`display: grid` z siedmioma kolumnami) sama łamie wiersze co siedem pól, więc znikają klasa `clear` i jej liczenie, a tytuł zajmuje wszystkie kolumny (`grid-column: span 7`). Zaznaczone są też linie usunięte: kod zrobił się krótszy, a wygląd się nie zmienił.

<!DOCTYPE html>
<html lang="pl">
<head>
  <meta charset="utf-8">
  <title>Kalendarz</title>
  <style>
    body { font-family: sans-serif; max-width: 36em; line-height: 1.4; }
    input, select, button, textarea { font: inherit; padding: 0.2em 0.4em; }
    table { border-collapse: collapse; }
    th, td { border: 1px solid #94a3b8; padding: 0.2em 0.6em; }

    #calendar { display: grid; grid-template-columns: repeat(7, 40px); gap: 6px; }
    #calendar div { height: 40px; line-height: 40px; text-align: center; background: lightgrey; }
    #calendar .day-name { background: darkgrey; color: white; }
    #calendar .saturday { background: lightblue; color: white; }
    #calendar .sunday { background: steelblue; color: white; }
    #calendar .none { background: white; }
    #calendar .month-year { grid-column: span 7; background: darkgrey; color: white; }
    #calendar .today { background: crimson; color: white; }
    #calendar .other { background: white; color: #94a3b8; }
  </style>
</head>
<body>
  <div id="calendar"></div>
  <script>
    const MONTHS = ['styczeń', 'luty', 'marzec', 'kwiecień', 'maj', 'czerwiec',
      'lipiec', 'sierpień', 'wrzesień', 'październik', 'listopad', 'grudzień'];
    const DAY_NAMES = ['Pn', 'Wt', 'Śr', 'Cz', 'Pt', 'So', 'Nd'];
    const today = new Date();
    const year = today.getFullYear();
    const month = today.getMonth() + 1;
    const firstDay = (new Date(year, month - 1, 1).getDay() + 6) % 7;
    const days = new Date(year, month, 0).getDate();

    let html = `<div class="month-year">${MONTHS[month - 1]} ${year}</div>`;
    DAY_NAMES.forEach((name, k) => {
      const weekend = k === 5 ? ' saturday' : k === 6 ? ' sunday' : '';
      html += `<div class="day-name${weekend}">${name}</div>`;
    });
    for (let k = 0; k < firstDay; k++) {
      html += '<div class="none"></div>';
    }
    for (let i = 1; i <= days; i++) {
      const p = firstDay + i;
      const classes = [];
      if (i === today.getDate()) classes.push('today');
      else if (p % 7 === 6) classes.push('saturday');
      else if (p % 7 === 0) classes.push('sunday');
      html += `<div class="${classes.join(' ')}">${i}</div>`;
    }
    document.getElementById('calendar').innerHTML = html;
  </script>
</body>
</html>

Ładowanie interaktywnego edytora... Jeśli się nie pojawi, włącz JavaScript.

Wszystkie lekcje kursu Kalendarz w JavaScript krok po kroku·Zaloguj się, aby zapisać postęp na koncie.