当前位置:首页 > CSS

css日历制作

2026-02-27 03:10:54CSS

基础日历结构

使用HTML创建一个简单的日历结构,包含星期标题和日期格子。以下是一个基础的HTML框架:

<div class="calendar">
  <div class="header">
    <span class="month">January 2023</span>
  </div>
  <div class="weekdays">
    <div>Sun</div>
    <div>Mon</div>
    <div>Tue</div>
    <div>Wed</div>
    <div>Thu</div>
    <div>Fri</div>
    <div>Sat</div>
  </div>
  <div class="days">
    <!-- 日期格子将通过JavaScript动态生成 -->
  </div>
</div>

CSS样式设计

为日历添加基本样式,使其具备视觉吸引力:

.calendar {
  font-family: Arial, sans-serif;
  width: 300px;
  border: 1px solid #ddd;
  box-shadow: 0 0 10px rgba(0,0,0,0.1);
}

.header {
  background: #4285f4;
  color: white;
  padding: 10px;
  text-align: center;
  font-weight: bold;
}

.weekdays {
  display: grid;
  grid-template-columns: repeat(7, 1fr);
  background: #f1f1f1;
  padding: 5px 0;
  text-align: center;
}

.days {
  display: grid;
  grid-template-columns: repeat(7, 1fr);
  grid-gap: 1px;
  background: #ddd;
}

.days div {
  padding: 10px;
  min-height: 30px;
  background: white;
  text-align: center;
  cursor: pointer;
}

.days div:hover {
  background: #f1f1f1;
}

.days .prev-month,
.days .next-month {
  color: #aaa;
}

.days .today {
  background: #e6f2ff;
  font-weight: bold;
}

动态生成日期

使用JavaScript动态填充日期格子,处理月份切换:

document.addEventListener('DOMContentLoaded', function() {
  const monthDisplay = document.querySelector('.month');
  const daysContainer = document.querySelector('.days');
  let currentDate = new Date();

  function renderCalendar() {
    const year = currentDate.getFullYear();
    const month = currentDate.getMonth();

    monthDisplay.textContent = 
      new Date(year, month).toLocaleString('default', { month: 'long', year: 'numeric' });

    daysContainer.innerHTML = '';

    const firstDay = new Date(year, month, 1).getDay();
    const daysInMonth = new Date(year, month + 1, 0).getDate();
    const daysInPrevMonth = new Date(year, month, 0).getDate();

    // 上个月的最后几天
    for (let i = firstDay - 1; i >= 0; i--) {
      const dayElement = document.createElement('div');
      dayElement.textContent = daysInPrevMonth - i;
      dayElement.classList.add('prev-month');
      daysContainer.appendChild(dayElement);
    }

    // 当前月的日期
    const today = new Date();
    for (let i = 1; i <= daysInMonth; i++) {
      const dayElement = document.createElement('div');
      dayElement.textContent = i;

      if (month === today.getMonth() && 
          year === today.getFullYear() && 
          i === today.getDate()) {
        dayElement.classList.add('today');
      }

      daysContainer.appendChild(dayElement);
    }

    // 下个月的前几天
    const totalCells = firstDay + daysInMonth;
    const remainingCells = 42 - totalCells; // 6行x7天

    for (let i = 1; i <= remainingCells; i++) {
      const dayElement = document.createElement('div');
      dayElement.textContent = i;
      dayElement.classList.add('next-month');
      daysContainer.appendChild(dayElement);
    }
  }

  renderCalendar();
});

响应式设计

添加媒体查询使日历适应不同屏幕尺寸:

@media (max-width: 600px) {
  .calendar {
    width: 100%;
  }

  .days div {
    padding: 5px;
    min-height: 20px;
  }
}

高级功能扩展

为日历添加月份导航功能:

// 在HTML中添加导航按钮
<div class="navigation">
  <button class="prev">❮</button>
  <button class="next">❯</button>
</div>

// 在CSS中添加样式
.navigation {
  display: flex;
  justify-content: space-between;
  padding: 5px 10px;
  background: #f1f1f1;
}

.navigation button {
  background: none;
  border: none;
  cursor: pointer;
  font-size: 16px;
}

// 在JavaScript中添加事件监听
document.querySelector('.prev').addEventListener('click', () => {
  currentDate.setMonth(currentDate.getMonth() - 1);
  renderCalendar();
});

document.querySelector('.next').addEventListener('click', () => {
  currentDate.setMonth(currentDate.getMonth() + 1);
  renderCalendar();
});

日期选择功能

实现点击日期时的交互效果:

daysContainer.addEventListener('click', (e) => {
  if (e.target.tagName === 'DIV' && !e.target.classList.contains('prev-month') && 
      !e.target.classList.contains('next-month')) {
    // 移除之前选中的样式
    document.querySelectorAll('.days div.selected').forEach(el => {
      el.classList.remove('selected');
    });

    // 添加选中样式
    e.target.classList.add('selected');

    // 可以在这里添加处理选中日期的逻辑
    const selectedDate = new Date(
      currentDate.getFullYear(),
      currentDate.getMonth(),
      parseInt(e.target.textContent)
    );
    console.log('Selected date:', selectedDate);
  }
});

// 在CSS中添加选中样式
.days div.selected {
  background: #4285f4;
  color: white;
}

css日历制作

标签: 日历css
分享给朋友:

相关文章

css表单制作

css表单制作

基础表单结构 使用HTML创建表单的基本结构,包含<form>标签及输入字段。表单通常需要action(提交地址)和method(提交方法)属性。 <form action="/s…

css制作春季踏青

css制作春季踏青

使用CSS制作春季踏青主题效果 背景设计 通过渐变背景模拟春日天空,使用柔和的色调如浅蓝、淡绿和粉色。可以添加云朵或小鸟的剪影作为装饰元素。 body { background: linear…

css立体相册制作

css立体相册制作

制作CSS立体相册 使用CSS3的3D变换和过渡效果可以创建一个立体相册。以下是一个基本的实现方法。 HTML结构 <div class="photo-album"> <…

友情链接css制作

友情链接css制作

友情链接CSS制作 友情链接是网站之间互相推广的一种方式,通常以文字或图片形式展示。通过CSS可以美化友情链接的样式,使其更符合网站整体设计风格。 文字链接样式 设置文字链接的基础样式,包括颜…

css怎么制作个人主页

css怎么制作个人主页

设计布局结构 使用CSS的Flexbox或Grid布局创建响应式结构。Flexbox适合一维排列(如导航栏),Grid适合二维布局(如整体页面分区)。例如: .container { displ…

css制作雪花

css制作雪花

CSS 制作雪花效果 使用纯CSS可以创建简单的雪花动画效果,主要通过伪元素、动画和变换实现。 基础雪花结构 <div class="snowflake"></div>…