본문 바로가기
명함 만들기 캐릭터 모음 16가지 디자인 · PNG / SVG / PDF

사이드바

갈 곳이 열 군데를 넘고, 같은 화면 안에서 계속 옮겨 다녀야 할 때 왼쪽에 세로로 세우는 조각.

내비게이션

실제 미리보기

출처

<nav class="dc-sb" aria-label="설정 메뉴">
  <p class="dc-sb__title" id="dc-sb-h1">계정</p>
  <ul class="dc-sb__list" aria-labelledby="dc-sb-h1">
    <li><a class="dc-sb__item" href="#" aria-current="page"><span class="dc-sb__icon" aria-hidden="true">●</span><span class="dc-sb__text">프로필</span></a></li>
    <li><a class="dc-sb__item" href="#"><span class="dc-sb__icon" aria-hidden="true">◐</span><span class="dc-sb__text">알림</span><span class="dc-sb__badge">3</span></a></li>
    <li><a class="dc-sb__item" href="#"><span class="dc-sb__icon" aria-hidden="true">◆</span><span class="dc-sb__text">보안</span></a></li>
  </ul>
  <details class="dc-sb__group" open>
    <summary class="dc-sb__grouphead"><span class="dc-sb__text">결제</span><span class="dc-sb__caret" aria-hidden="true">▾</span></summary>
    <ul class="dc-sb__list">
      <li><a class="dc-sb__item dc-sb__item--sub" href="#"><span class="dc-sb__text">요금제</span></a></li>
      <li><a class="dc-sb__item dc-sb__item--sub" href="#"><span class="dc-sb__text">영수증</span></a></li>
    </ul>
  </details>
  <hr class="dc-sb__sep">
  <a class="dc-sb__item dc-sb__item--quiet" href="#"><span class="dc-sb__icon" aria-hidden="true">↪</span><span class="dc-sb__text">로그아웃</span></a>
</nav>
.dc-sb {
  width: 248px; padding: var(--dc-3);
  background: var(--dc-surface);
  border-right: 1px solid var(--dc-line);
  font-family: var(--dc-font);
}
.dc-sb__title {
  margin: var(--dc-2) var(--dc-2) var(--dc-1);
  color: var(--dc-text-mute); font-size: 12px; font-weight: 700; letter-spacing: .02em;
}
.dc-sb__list { list-style: none; margin: 0; padding: 0; }
.dc-sb__item {
  display: flex; align-items: center; gap: var(--dc-3);
  min-height: 40px; padding: 0 var(--dc-2);
  border-radius: var(--dc-r-sm);
  color: var(--dc-text-sub); text-decoration: none;
  font-size: 14px; font-weight: 600;
  transition: background var(--dc-fast), color var(--dc-fast);
}
.dc-sb__item:hover { background: var(--dc-sunken); color: var(--dc-text); }
.dc-sb__item[aria-current="page"] {
  background: var(--dc-brand-soft); color: var(--dc-brand-text); font-weight: 700;
}
.dc-sb__icon { flex: 0 0 18px; width: 18px; text-align: center; font-size: 13px; }
.dc-sb__text { flex: 1 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.dc-sb__badge {
  flex: 0 0 auto; min-width: 20px; padding: 0 6px;
  border-radius: var(--dc-r-full);
  background: var(--dc-danger-soft); color: var(--dc-danger);
  font-size: 12px; font-weight: 700; text-align: center; line-height: 20px;
}
.dc-sb__group { margin-top: var(--dc-2); }
.dc-sb__grouphead {
  display: flex; align-items: center; justify-content: space-between;
  min-height: 40px; padding: 0 var(--dc-2);
  border-radius: var(--dc-r-sm);
  color: var(--dc-text); font-size: 14px; font-weight: 700;
  cursor: pointer; list-style: none;
}
.dc-sb__grouphead::-webkit-details-marker { display: none; }
.dc-sb__grouphead:hover { background: var(--dc-sunken); }
.dc-sb__caret { color: var(--dc-text-sub); font-size: 11px; transition: transform var(--dc-fast); }
.dc-sb__group[open] .dc-sb__caret { transform: rotate(180deg); }
.dc-sb__item--sub { padding-left: var(--dc-6); font-weight: 600; }
.dc-sb__item--quiet { color: var(--dc-text-mute); }
.dc-sb__sep { height: 1px; margin: var(--dc-3) 0; border: 0; background: var(--dc-line); }

.dc-sb--rail {
  display: flex; flex-direction: column; align-items: center; gap: var(--dc-1);
  width: 76px; padding: var(--dc-2);
}
.dc-sb__item--rail {
  justify-content: center; width: 44px; height: 44px; min-height: 44px;
  padding: 0; gap: 0; font-size: 15px;
}

.dc-sb-shell {
  display: flex; align-items: stretch;
  border: 1px solid var(--dc-line); border-radius: var(--dc-r-md);
  background: var(--dc-bg); overflow: hidden;
}
.dc-sb-shell__main { flex: 1 1 auto; min-width: 0; padding: var(--dc-5); }
.dc-sb-shell__h { margin: 0 0 var(--dc-2); color: var(--dc-text); font-size: 16px; font-weight: 700; }
.dc-sb-shell__p { margin: 0; color: var(--dc-text-sub); font-size: 14px; line-height: 1.65; }
@media (max-width: 700px) {
  .dc-sb-shell { flex-direction: column; }
  .dc-sb-shell .dc-sb { width: 100%; border-right: 0; border-bottom: 1px solid var(--dc-line); }
}

이렇게 씁니다

  • 묶음이 셋을 넘으면 구획 제목을 붙이고, 한 구획은 다섯 개 이하로 유지한다
  • 지금 항목에 aria-current="page" 를 붙이고 배경으로도 표시한다
  • 접히는 묶음은 details 로 만들어라 — 스크립트 없이 열고 닫힌다

주의할 점

  • 아이콘만 남기는 레일에서는 라벨을 dc-sr 로 꼭 남겨라 — 아이콘만으로는 읽히지 않는다
  • 1024px 아래에서는 사이드바를 서랍으로 바꿔라. 두 칸을 억지로 쥐어짜면 둘 다 못 쓴다

다음에 볼 것