本文へスキップ

週カレンダー

8〜19 時の時間帯グリッドに色分けした予定ブロックを置く週表示。現在時刻の赤線が引かれ、空いている枠をクリックすると 1 時間の仮予定が置かれる(もう一度クリックで取り消し)。

プレビュー

クリック

操作クリック/タップで動きます。

仕様書

向く場面
  • 8〜20 時の予定を週で俯瞰する業務カレンダー
  • 空き枠から仮予定を置かせる予約・調整
  • カレンダー種別が 3 色以内の場面
避ける場面
  • 終日予定や月単位の把握が主の用途
  • 予定の種類が 4 つ以上あり色で区別できないとき
構成要素
  • ヘッダー(週送り/今日/凡例)
  • 曜日ヘッダー
  • 時間軸
  • 時間枠のグリッド
  • 予定ブロック・仮予定
  • 現在時刻線
持っている状態
  • 通常
  • ホバー
  • フォーカス
キーボード

Tab で前週・次週・今日→時間枠(1 つだけ Tab 停止)→仮予定の順。枠は ←→ で曜日、↑↓ で時間、Home/End で端へ移動し Enter/Space で仮予定を置く/取り消す

支援技術

各枠は button+aria-label「月 9:00 に仮予定を置く」で、Tab 停止は 1 つ(roving tabindex)。予定と現在時刻線は隠し文で種別・時刻を補う。週送りと結果は role=status で通知。凡例は色+文字

動き

なし

デザインの要点

  • 予定の色はカレンダー(仕事/私用/チーム)ごとに 3 色まで。色が増えるほど凡例が要る
  • 現在時刻の赤線は「今」を探す手間を消す。今日の列だけ背景をわずかに変えて重ねる
  • 空き枠のクリックで仮予定を置き、確定は別ダイアログに任せる。置く操作と書く操作を分ける
  • スマホは 7 列を縮めず横スクロール+スナップにする。時間軸は左に sticky で固定する
実装メモ

現在時刻の赤線はデモのため 10:40 固定です。実装では new Date() から (時 + 分/60 − 開始時) × 行の高さ で top を求め、1 分ごとに更新してください。

コード(コピーして使えます)

<div class="cw-app">
  <header class="cw-head">
    <div class="cw-nav">
      <button type="button" class="cw-icon-btn" id="cw-prev" aria-label="前の週"><svg viewBox="0 0 20 20" width="16" height="16" aria-hidden="true"><path d="M12.5 4 6.5 10l6 6" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"/></svg></button>
      <button type="button" class="cw-icon-btn" id="cw-next" aria-label="次の週"><svg viewBox="0 0 20 20" width="16" height="16" aria-hidden="true"><path d="m7.5 4 6 6-6 6" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"/></svg></button>
      <button type="button" class="cw-today-btn" id="cw-today">今日</button>
    </div>
    <h1 class="cw-h1" id="cw-title">2026年4月 20日 – 26日</h1>
    <div class="cw-legend" aria-label="凡例"><span class="cw-dot cw-dot-work"></span>仕事<span class="cw-dot cw-dot-team"></span>チーム<span class="cw-dot cw-dot-private"></span>私用</div>
  </header>
  <div class="cw-scroll" id="cw-scroll">
    <div class="cw-grid" id="cw-grid">
      <div class="cw-corner"></div>
      <div class="cw-days" id="cw-days"></div>
      <div class="cw-times" id="cw-times"></div>
      <div class="cw-cols" id="cw-cols"></div>
    </div>
  </div>
  <p class="cw-hint" id="cw-hint" role="status">空いている枠をクリックすると仮予定を置けます</p>
</div>

タグ

同じカテゴリ「実用サンプル: アプリ画面」のほかのパーツ

関連パーツ