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

制作日历js css

2026-03-12 15:04:41CSS

基础HTML结构

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

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

CSS样式设计

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

制作日历js 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添加点击事件,触发自定义逻辑(如显示详情)。

    制作日历js css

    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变量实现动态主题。

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

注意事项

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

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

相关文章

vue日历实现

vue日历实现

实现基础日历布局 使用Vue的模板语法构建日历的基本HTML结构。一个典型的日历包含星期标题和日期格子,可以通过v-for循环生成。月份切换功能通过计算属性动态更新日期数组。 <templat…

js 实现vue模板

js 实现vue模板

实现 Vue 模板的 JavaScript 方法 通过原生 JavaScript 可以实现类似 Vue 的模板渲染功能,主要包括数据绑定、指令处理和模板解析。以下是核心实现思路: 数据绑定与…

js实现倒计时

js实现倒计时

使用 setInterval 实现倒计时 通过 setInterval 定时器每秒更新剩余时间,适用于简单倒计时场景。 function countdown(seconds, callbac…

vue VUE实现日历组件功能

vue VUE实现日历组件功能

Vue 日历组件实现方法 基础日历结构 使用Vue的模板语法构建日历的HTML结构,通常包含头部(年月显示、切换按钮)和日历表格(星期标题和日期格子)。 <template> <…

js实现自举

js实现自举

实现 JavaScript 自举的方法 JavaScript 自举(Bootstrap)通常指通过 JavaScript 动态加载自身或依赖的脚本,实现运行时环境的初始化或扩展。以下是几种常见实现方式…

js实现交换

js实现交换

交换变量的方法 在JavaScript中,交换两个变量的值有多种方法。以下是常见的几种实现方式: 使用临时变量 通过引入一个临时变量来存储其中一个变量的值,实现交换: let a = 1; le…