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