Calendar Widget

Advanced

Interactive calendar widget with event management, date selection, and multiple view modes for scheduling and planning.

Live Preview

Code Implementation

HTML
<div class="calendar-container">
  <div class="calendar-header">
    <h1 class="calendar-title">Interactive Calendar Widget</h1>
    <p class="calendar-subtitle">Full-featured calendar with event management and multiple view modes</p>
  </div>
  
  <div class="calendar-widget">
    <div class="calendar-controls">
      <div class="calendar-nav">
        <button class="nav-btn" id="prevMonth">
          <svg viewBox="0 0 24 24" fill="currentColor">
            <path d="M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z"/>
          </svg>
        </button>
        
        <div class="current-month">
          <h2 id="currentMonth">January 2025</h2>
          <button class="today-btn" id="todayBtn">Today</button>
        </div>
        
        <button class="nav-btn" id="nextMonth">
          <svg viewBox="0 0 24 24" fill="currentColor">
            <path d="M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z"/>
          </svg>
        </button>
      </div>
      
      <div class="view-controls">
        <div class="view-buttons">
          <button class="view-btn active" data-view="month">Month</button>
          <button class="view-btn" data-view="week">Week</button>
          <button class="view-btn" data-view="day">Day</button>
        </div>
        
        <button class="add-event-btn" id="addEventBtn">
          <svg viewBox="0 0 24 24" fill="currentColor">
            <path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"/>
          </svg>
          Add Event
        </button>
      </div>
    </div>
    
    <div class="calendar-main">
      <div class="calendar-grid" id="calendarGrid">
        <div class="weekdays">
          <div class="weekday">Sun</div>
          <div class="weekday">Mon</div>
          <div class="weekday">Tue</div>
          <div class="weekday">Wed</div>
          <div class="weekday">Thu</div>
          <div class="weekday">Fri</div>
          <div class="weekday">Sat</div>
        </div>
        
        <div class="calendar-days" id="calendarDays">
          <!-- Days will be generated by JavaScript -->
        </div>
      </div>
      
      <div class="calendar-sidebar">
        <div class="mini-calendar">
          <h3>Quick Navigation</h3>
          <div class="mini-months" id="miniMonths">
            <!-- Mini months will be generated -->
          </div>
        </div>
        
        <div class="upcoming-events">
          <h3>Upcoming Events</h3>
          <div class="events-list" id="eventsList">
            <!-- Events will be populated -->
          </div>
        </div>
        
        <div class="calendar-stats">
          <h3>Statistics</h3>
          <div class="stats-grid">
            <div class="stat-item">
              <span class="stat-number" id="totalEvents">0</span>
              <span class="stat-label">Total Events</span>
            </div>
            <div class="stat-item">
              <span class="stat-number" id="thisMonth">0</span>
              <span class="stat-label">This Month</span>
            </div>
            <div class="stat-item">
              <span class="stat-number" id="todayEvents">0</span>
              <span class="stat-label">Today</span>
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
  
  <!-- Event Modal -->
  <div class="modal-overlay" id="eventModal">
    <div class="modal-content">
      <div class="modal-header">
        <h3 id="modalTitle">Add New Event</h3>
        <button class="modal-close" id="modalClose">
          <svg viewBox="0 0 24 24" fill="currentColor">
            <path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/>
          </svg>
        </button>
      </div>
      
      <form class="event-form" id="eventForm">
        <div class="form-group">
          <label for="eventTitle">Event Title</label>
          <input type="text" id="eventTitle" required placeholder="Enter event title">
        </div>
        
        <div class="form-row">
          <div class="form-group">
            <label for="eventDate">Date</label>
            <input type="date" id="eventDate" required>
          </div>
          
          <div class="form-group">
            <label for="eventTime">Time</label>
            <input type="time" id="eventTime">
          </div>
        </div>
        
        <div class="form-group">
          <label for="eventDescription">Description</label>
          <textarea id="eventDescription" placeholder="Event description (optional)"></textarea>
        </div>
        
        <div class="form-row">
          <div class="form-group">
            <label for="eventCategory">Category</label>
            <select id="eventCategory">
              <option value="work">Work</option>
              <option value="personal">Personal</option>
              <option value="meeting">Meeting</option>
              <option value="reminder">Reminder</option>
              <option value="holiday">Holiday</option>
            </select>
          </div>
          
          <div class="form-group">
            <label for="eventPriority">Priority</label>
            <select id="eventPriority">
              <option value="low">Low</option>
              <option value="medium" selected>Medium</option>
              <option value="high">High</option>
            </select>
          </div>
        </div>
        
        <div class="form-actions">
          <button type="button" class="btn-secondary" id="cancelBtn">Cancel</button>
          <button type="submit" class="btn-primary" id="saveBtn">Save Event</button>
          <button type="button" class="btn-danger" id="deleteBtn" style="display: none;">Delete</button>
        </div>
      </form>
    </div>
  </div>
</div>

Snippet Features

Responsive Design: Yes
Dark Mode Support: No
Category: widgets
Difficulty Level: Advanced

Browser Compatibility

🟢
chrome 60+
🟠
firefox 55+
🔵
safari 10+
🟦
edge 15+