…">
当前位置:首页 > CSS

制作日历js css

2026-03-12 15:04:41CSS

基础HTML结构

日历需要一个容器元素,通常使用<div>,并为其分配ID以便JavaScript操作。

<div id="calendar"></div>

CSS样式设计

日历的视觉样式可以通过CSS自定义,以下是一个简约风格的示例:

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

.calendar-header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  background: #4285f4;
  color: white;
  padding: 10px;
}

.calendar-body {
  display: grid;
  grid-template-columns: repeat(7, 1fr);
  gap: 5px;
  padding: 10px;
}

.day-header {
  text-align: center;
  font-weight: bold;
  padding: 5px;
}

.day-cell {
  text-align: center;
  padding: 10px;
  cursor: pointer;
  border-radius: 3px;
}

.day-cell:hover {
  background: #e6e6e6;
}

.day-cell.today {
  background: #4285f4;
  color: white;
}

JavaScript动态生成

使用JavaScript动态生成日历内容,包括月份、日期和导航功能。

document.addEventListener('DOMContentLoaded', function() {
  const calendarEl = document.getElementById('calendar');
  let currentDate = new Date();

  function renderCalendar(date) {
    const year = date.getFullYear();
    const month = date.getMonth();
    const firstDay = new Date(year, month, 1).getDay();
    const daysInMonth = new Date(year, month + 1, 0).getDate();

    const monthNames = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
    const dayNames = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];

    let html = `
      <div class="calendar-header">
        <button id="prev-month">←</button>
        <h3>${monthNames[month]} ${year}</h3>
        <button id="next-month">→</button>
      </div>
      <div class="calendar-body">
    `;

    // 添加星期标题
    dayNames.forEach(day => {
      html += `<div class="day-header">${day}</div>`;
    });

    // 填充空白(上个月的日期)
    for (let i = 0; i < firstDay; i++) {
      html += `<div class="day-cell"></div>`;
    }

    // 填充当前月的日期
    const today = new Date();
    for (let i = 1; i <= daysInMonth; i++) {
      const isToday = i === today.getDate() && month === today.getMonth() && year === today.getFullYear();
      html += `<div class="day-cell ${isToday ? 'today' : ''}">${i}</div>`;
    }

    html += `</div>`;
    calendarEl.innerHTML = html;

    // 添加事件监听器
    document.getElementById('prev-month').addEventListener('click', () => {
      currentDate.setMonth(currentDate.getMonth() - 1);
      renderCalendar(currentDate);
    });

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

  renderCalendar(currentDate);
});

功能扩展

  1. 日期点击事件:为day-cell添加点击事件,触发自定义逻辑(如显示详情)。

    document.querySelectorAll('.day-cell').forEach(cell => {
      cell.addEventListener('click', () => {
        if (cell.textContent) alert(`Selected date: ${currentDate.getMonth() + 1}/${cell.textContent}/${currentDate.getFullYear()}`);
      });
    });
  2. 国际化支持:替换monthNamesdayNames为其他语言的数组。

  3. 主题切换:通过CSS变量实现动态主题。

    制作日历js css

    :root {
      --primary-color: #4285f4;
    }
    .calendar-header {
      background: var(--primary-color);
    }

注意事项

  • 确保CSS和JavaScript文件正确链接到HTML。
  • 移动端适配可通过媒体查询调整宽度和字体大小。
  • 如需更复杂功能(如事件标记),需结合后端数据或本地存储。

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

相关文章

js 进度条的实现

js 进度条的实现

使用 HTML 和 CSS 创建基础进度条 HTML 结构可以简单使用一个 div 元素作为容器,内部嵌套另一个 div 表示进度: <div class="progress-containe…

js实现图片放大缩小

js实现图片放大缩小

实现图片放大缩小的基础方法 使用CSS的transform: scale()属性可以快速实现图片的放大缩小效果。通过JavaScript动态修改该属性值: const img = document.…

js实现防洪

js实现防洪

防抖(Debounce)实现 防抖的核心思想是在事件触发后延迟执行回调函数,若在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口调整等场景。 function debounce(func,…

js实现游标

js实现游标

使用JavaScript实现游标 在JavaScript中,可以通过操作DOM元素的cursor样式属性来实现自定义游标效果。以下是几种常见的实现方法: 修改默认鼠标指针样式 通过CSS的curso…

js实现跑马灯

js实现跑马灯

实现跑马灯效果 使用HTML和JavaScript可以轻松实现跑马灯效果。以下是两种常见的实现方式: HTML结构 <div id="marquee"> <span>…

js计算器的实现

js计算器的实现

实现基础结构 HTML部分需要创建计算器的基本框架,包含显示区域和按钮。使用<div>容器包裹整个计算器,内部设置一个显示屏和多个按钮。 <div class="calculato…