Как сделать календарь в html и css
Самый простой и быстрый способ как вывести готовый календарь на странице, является применение тега input с аттрибутом date . Давайте посмотрим на его возможности.
type="date">
Такой вариант создает поле на странице как на рисунке ниже, при нажатии на mm/dd/yyyy можно будет отредактировать значения, а при нажатии на иконку календаря — выбрать нужное.
type="date" value="2023-01-01">
Здесь мы дополнительно передаем значение которое сразу будет установлено в виде текущего. Это может быть удобно в некоторых случаях.

type="date" value="2022-05-05" min="2022-01-01" max="2022-12-31">
Тут мы задаем диапазон значение из которых можно выбрать дату, например чтобы пользователь не смог ошибиться при выборе даты. Как видно на примере ниже, выбрать месяц из 2021 года нет возможности
Календарь с помощью CSS-grid в несколько строк кода
Сетка календаря выглядит, как идеальный кандидат для использования CSS-grid. Ниже рассмотрим пример, как можно сделать разметку для календарика с помощью всего нескольких строк кода. В итоге должно получиться так:

Начать следует с HTML-разметки:
Mo Su 1 31
В нормальных условиях обычно не приходится вручную писать все числа
. Эта часть легко может быть сгенерирована с помощью Javascript в браузере или сервером, поэтому для примера будет использоваться только HTML и CSS.
В разметке будут две части: контейнер для дней недели .days-of-week-container и контейнер для чисел месяца .calendar-container . Оба будут реализованы с помощью CSS-grid, а текст будет выравниваться по правому краю:
.days-of-week-container, .calendar-container
Теперь, если посмотреть на сетку, станет ясно, что здесь будет 7 колонок, поэтому первое, что приходит в голову, написать как-то вроде:
grid-template-columns: 30px 30px 30px 30px 30px 30px 30px;
Но это слишком примитивно и некрасиво, поэтому для настройки наших колонок будем использовать repeat :
grid-template-columns: repeat(7, 30px);
Теперь, дни недели и сам календарь на месяц будут располагаться в макете сетки, состоящей из 7 колонок.
Что делать, если месяц должен начинаться не в понедельник, а например, в пятницу? Достаточно использовать CSS-свойство grid-column и переместить первый день месяца в колонку любого дня недели в календаре, а автоматическое размещение позаботится обо всем остальном.
.calendar-container div:first-child
Для установки значения grid-column можно использовать настраиваемые CSS-свойства и управлять расположением первого дня месяца из Javascript. Как это сделать, можно посмотреть на странице о передаче данных между CSS и JavaScript с помощью CSS-переменных.
Это всё, что требуется для реализации простого макета календаря: CSS-grid и всего несколько строк кода.
Делаем красивый календарь на HTML и CSS: несколько примеров
В этой статье мы покажем, как создать красивые календари на HTML и CSS. Это простой, но интересный проект, который поможет улучшить дизайн вашего веб-приложения или сайта. Мы рассмотрим несколько способов создания календаря и предоставим примеры.

C помощью таблицы
Для начала давайте создадим простой календарь с помощью таблицы. Этот способ очень простой, и вам не потребуется особых знаний программирования.
Как сделать календарь в css
Календари также содержат табличные данные. Пример календаря, взятый из настольного приложения, показан на рис. 5.14. В качестве заголовков столбцов выступают расположенные сверху названия дней недели. Поэтому для создания календарей целесообразно использовать таблицы; при этом объем HTML-кода можно свести к минимуму, применив CSS для задания внешнего вида календаря.

Рис. 5.14. Календарь из настольного приложения
Решение
Решение основано на использовании простой и доступной таблицы, которая средствами CSS преображается в привлекательный календарь, изображенный на рис. 5.15. Учитывая его несложную структуру, он
идеально подходит для приложения, связанного с базой данных, в котором таблица создается кодом на стороне сервера:
html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> Календарь http-equiv="content-type" content="text/html; charset=utf-8" /> rel="stylesheet" type="text/css" href="cal.css" /> class="clmonth" summary="Календарь на август 2012"> Август 2012 scope="col">Понедельник scope="col">Вторник scope="col">Среда scope="col">Четверг scope="col">Пятница scope="col">Суббота scope="col">Воскресенье class="previous">30 class="previous">31 class="active">1 модуль News модуль TDMDownloads 2 3 4 5 class="active">6 Модуль инструкций 7 8 9 10 11 12 13 14 15 16 class="active">17 XOOPS 2.5.5-ru class="active">18 Отладчик XOOPS Firebug 1.7 19 20 21 22 23 class="active">24 Xoops Partners 25 26 27 28 29 30 class="active">31 редактор TinyMce class="next">1 class="next">2
body background-color: #FFFFFF; color: #000000; font-size: 90%; > .clmonth border-collapse: collapse; width: 780px; > .clmonth caption text-align: left; font: bold 110% Georgia, “Times New Roman”, Times, serif; padding-bottom: 0.4em; > .clmonth th border: 1px solid #AAAAAA; border-bottom: none; padding: 0.2em 0.6em 0.2em 0.6em; background-color: #CCCCCC; color: #3F3F3F; font: 80% Verdana, Geneva, Arial, Helvetica, sans-serif; width: 110px; > .clmonth td border: 1px solid #EAEAEA; font: 80% Verdana, Geneva, Arial, Helvetica, sans-serif; padding: 0.2em 0.6em 0.2em 0.6em; vertical-align: top; > .clmonth td.previous, .clmonth td.next background-color: #F6F6F6; color: #C6C6C6; > .clmonth td.active background-color: #B1CBE1; color: #2B5070; border: 2px solid #4682B4; > .clmonth ul list-style-type: none; margin: 0; padding-left: 1em; padding-right: 0.6em; > .clmonth li margin-bottom: 1em; >

Рис. 5.15. Окончательный вид календаря, оформленного с помощью CSS (DEMO)
Обсуждение
Решение поставленной задачи начнем с создания самой простой таблицы. У нее есть заголовок (текущий месяц), а названия дней недели выступают в качестве заголовков колонок, определенных с помощью тега :
class="clmonth" summary="Календарь на август 2012"> Август 2012 scope="col">Понедельник scope="col">Вторник scope="col">Среда scope="col">Четверг scope="col">Пятница scope="col">Суббота scope="col">Воскресенье
Таблице присвоено имя класса clmonth. Использование класса вместо ID объясняется тем, что в некоторых случаях может возникнуть необходимость отображения сразу нескольких месяцев на одной странице.
Если потом выяснится, что таблице необходимо присвоить ID – например, для создания функции скрытия и отображения страницы с помощью JavaScript, – то можно кроме класса добавить и идентификатор.
Числа содержатся в отдельных ячейках, а мероприятия представлены в виде списка в соответствующей ячейке.
В приведенной ниже разметке видно, что двум ячейкам таблицы добавлены классы. Класс previous отмечает ячейки, содержащие дни, которые относятся к предыдущему месяцу (для выделения дней, относящихся к следующему месяцу, будет использоваться класс next); ячейкам, содержащим информацию о событиях, присваивается класс active:
class="previous">30 class="previous">31 class="active">1 модуль News модуль TDMDownloads 2 3 4 5
Вид таблицы без использования CSS представлен на рис. 5.16.

Рис. 5.16. Вид календаря без использования CSS
Итак, разметка готова, и можно приступить к визуальному оформлению. Зададим основные стили для элемента body, в том числе и параметры шрифта. Затем зададим стиль для класса clmonth, чтобы рамки перекрывали друг друга и между ячейками не оставалось пустого пространства, а также укажем ширину таблицы:
body background-color: #FFFFFF; color: #000000; font-size: 90%; > .clmonth border-collapse: collapse; width: 780px; >
Мы указали стили для элемента caption , являющегося дочерним по отношению к элементу класса clmonth , а затем для заголовков ( th ) и ячеек (td) таблицы:
.clmonth caption text-align: left; font: bold 110% Georgia, “Times New Roman”, Times, serif; padding-bottom: 0.4em; > .clmonth th border: 1px solid #AAAAAA; border-bottom: none; padding: 0.2em 0.6em 0.2em 0.6em; background-color: #CCCCCC; color: #3F3F3F; font: 80% Verdana, Geneva, Arial, Helvetica, sans-serif; width: 110px; > .clmonth td border: 1px solid #EAEAEA; font: 80% Verdana, Geneva, Arial, Helvetica, sans-serif; padding: 0.2em 0.6em 0.2em 0.6em; vertical-align: top; >
Как видно на рис. 5.17, наш календарь начинает приобретать определенные визуальные черты.

Рис. 5.17. Благодаря новому оформлению элементов caption, th и td календарь выглядит привлекательнее
Теперь можно задать оформление для списков событий, расположенных внутри ячеек, удалив маркеры и добавив больше пустого пространства между пунктами списка:
.clmonth ul list-style-type: none; margin: 0; padding-left: 1em; padding-right: 0.6em; > .clmonth li margin-bottom: 1em; >
Наконец, добавим стили классов previous и next, чтобы не относящиеся к текущему месяцу дни отображались в оттенках серого. Кроме того, зададим стиль для класса active, используемого для выделения дней с событиями:
.clmonth td.previous, .clmonth td.next background-color: #F6F6F6; color: #C6C6C6; > .clmonth td.active background-color: #B1CBE1; color: #2B5070; border: 2px solid #4682B4; >
Мы рассмотрели лишь один из немногих способов создания календарей. Календари часто используют в блогах: при щелчке по числу можно перейти к сделанной в этот день записи. Если убрать из нашего HTML- кода все события, оставить только первые буквы названий дней недели и слегка изменить CSS-код, мы получим простой миниатюрный календарь, который вполне можно использовать в этих целях (рис. 5.18).

Рис. 5.18. Создание миниатюрного календаря (DEMO)
Ниже представлены HTML- и CSS-коды этой версии календаря:
html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> Мини календарь http-equiv="content-type" content="text/html; charset=utf-8" /> rel="stylesheet" type="text/css" href="cal_mini.css" /> class="clmonth" summary="Календарь на август 2012"> Август 2012 scope="col">Пн scope="col">Вт scope="col">Ср scope="col">Чт scope="col">Пт scope="col">Сб scope="col">Вс class="previous">30 class="previous">31 class="active">1 2 3 4 5 class="active">6 7 8 9 10 11 12 13 14 15 16 class="active">17 class="active">18 19 20 21 22 23 class="active">24 25 26 27 28 29 30 class="active">31 class="next">1 class="next">2
body background-color: #ffffff; color: #000000; font-size: 90%; > .clmonth border-collapse: collapse; > .clmonth caption text-align: left; font: bold 110% Georgia, "Times New Roman", Times, serif; padding-bottom: 0.4em; > .clmonth th border: 1px solid #AAAAAA; border-bottom: none; padding: 0.2em 0.4em 0.2em 0.4em; background-color: #CCCCCC; color: #3F3F3F; font: 80% Verdana, Geneva, Arial, Helvetica, sans-serif; > .clmonth td border: 1px solid #EAEAEA; font: 80% Verdana, Geneva, Arial, Helvetica, sans-serif; padding: 0.2em 0.4em 0.2em 0.4em; vertical-align: top; > .clmonth td.previous, .clmonth td.next background-color: #F6F6F6; color: #C6C6C6; > .clmonth td.active background-color: #B1CBE1; color: #2B5070; border: 2px solid #4682B4; >
