Ta sama logika w tabeli
Kalendarz z elementów DOM - Kalendarz w JavaScript krok po kroku (HTML/CSS/JS)
Inny widok tych samych danych: tabela, w której każdy tydzień to wiersz. Zamiast siatki CSS liczymy tygodnie sami: `insertRow` dodaje wiersz do `tbody`, `insertCell` komórkę, a nowy wiersz zaczyna się, gdy poprzedni ma już 7 komórek. Logika miesiąca (pierwszy dzień, liczba dni, weekend, dzisiaj) jest identyczna; zmieniło się tylko rysowanie. To zapowiedź następnej lekcji, w której logika i widok się rozdzielą.
<!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 .today { background: crimson; color: white; }
#calendar .day { cursor: pointer; }
#calendar .selected { outline: 3px solid #f59e0b; }
.bar { display: flex; align-items: center; gap: 0.5em; width: 316px; }
.bar strong { flex: 1; text-align: center; }
table.cal td, table.cal th { width: 2.2em; text-align: center; }
table.cal .saturday, table.cal .sunday { color: steelblue; }
table.cal .today { background: crimson; color: white; }
</style>
</head>
<body>
<table class="cal">
<caption id="title"></caption>
<thead><tr><th>Pn</th><th>Wt</th><th>Śr</th><th>Cz</th><th>Pt</th><th>So</th><th>Nd</th></tr></thead>
<tbody id="weeks"></tbody>
</table>
<script>
const MONTHS = ['styczeń', 'luty', 'marzec', 'kwiecień', 'maj', 'czerwiec',
'lipiec', 'sierpień', 'wrzesień', 'październik', 'listopad', 'grudzień'];
const WEEKEND = ['', '', '', '', '', 'saturday', 'sunday'];
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();
document.getElementById('title').textContent = `${MONTHS[month - 1]} ${year}`;
const tbody = document.getElementById('weeks');
let row = tbody.insertRow();
for (let k = 0; k < firstDay; k++) row.insertCell();
for (let i = 1; i <= days; i++) {
if (row.cells.length === 7) row = tbody.insertRow();
const td = row.insertCell();
td.textContent = i;
const weekend = WEEKEND[(firstDay + i - 1) % 7];
if (weekend) td.classList.add(weekend);
if (i === today.getDate()) td.classList.add('today');
}
while (row.cells.length < 7) row.insertCell();
</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.