Files
Aislo/ui_template/ui_template_side_panels.css
T
eomsangdonandClaude Opus 5.5 a3365946fd feat(ui-kit): 틀 부품 셋 — 도구줄 · 떠 있는 판 · 오른쪽 서랍 겉 (PLAN 552-4)
- 도구줄 createToolbar: data-size 24 · 28 · 32 · 나눔선 · 밀기 · 유리 꼴 · 단 없는 단추에 같은 단을 붙임(552-2 setUiSize)
- 떠 있는 판 createFloatPanel: 머리 32 · 닫기 = 아이콘 단추 24(x) · 끌기 머리 · 팝오버
- 오른쪽 서랍: 흰 판 + 1 px 선 · 자리 · 폭 · 열고 닫기 그대로 · 머리 규칙 8
- 부품 모음 틀 아홉 견본 다 참 · 지킴 시험 아홉 부품

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 21:33:32 +09:00

171 lines
4.4 KiB
CSS

/* 오른쪽 서랍(552-4) — 흰 판 + 1 px 선 · 겉만 공통 값 · 자리 · 폭 · 열고 닫기 그대로
본문 오른쪽 접는 패널 여럿 — 왼쪽 가장자리 손잡이(좌측 패널과 같은 꼴) · 편 패널 = 공유 폭(--ui-side-panels-width)
보이는 칸 안에 붙음(JS followView) — 몸만 따로 스크롤 · 메인 스크롤과 따로 */
/* 부르는 쪽 칸 — [본문, 패널 묶음] */
.ui-side-panels-row {
display: flex;
align-items: stretch;
min-width: 0;
}
.ui-side-panels-row[hidden] {
display: none;
}
.ui-side-panels-row > :first-child {
flex: 1 1 auto;
min-width: 0;
}
.ui-side-panels {
position: relative;
display: flex;
flex: none;
align-self: flex-start;
/* 높이 · 붙는 자리 = JS(followView) · 처음 한 번 그릴 때까지 */
height: calc(100dvh - 80px);
/* 손잡이 자리(24) + 틈 */
margin-left: calc(var(--spacing-24) + var(--spacing-8));
}
/* follow:false(85-5) — 부르는 칸(고정 높이) 높이를 채움 · 패널 내용이 칸 높이를 늘리지 않음 */
.ui-side-panels.is-fill {
align-self: stretch;
width: var(--ui-side-panels-width, 420px);
height: auto;
min-height: 240px;
}
.ui-side-panels.is-fill > .ui-side-panels__panel {
position: absolute;
inset: 0;
width: auto;
height: auto;
}
/* 모두 접힘 — 폭 0 · 손잡이만 왼쪽 밖에 남음 */
.ui-side-panels.is-collapsed {
width: 0;
}
/* 손잡이 줄 — 패널 왼쪽 밖 세로 가운데 · 패널 둘이면 위아래로 */
.ui-side-panels__handles {
position: absolute;
z-index: 2;
top: 50%;
left: calc(-1 * var(--spacing-24));
display: flex;
flex-direction: column;
gap: var(--spacing-4);
transform: translateY(-50%);
}
.ui-side-panels__handles > .ui-workflow-overlay__handle--side {
position: static;
transform: none;
border-right: 0;
border-left: 1px solid var(--panel-handle-border, var(--color-border));
border-radius: var(--radius-buttons) 0 0 var(--radius-buttons);
}
.ui-side-panels.is-resizing {
user-select: none;
}
.ui-side-panels__panel {
position: relative;
display: flex;
flex: none;
flex-direction: column;
width: var(--ui-side-panels-width, 420px);
min-width: 0;
height: 100%;
border: 1px solid var(--color-border);
border-radius: var(--radius-cards);
background: var(--color-surface-raised);
}
.ui-side-panels__panel[hidden] {
display: none;
}
/* 왼쪽 경계 — 끌기 · 화살표 키 */
.ui-side-panels__grip {
position: absolute;
top: 0;
bottom: 0;
left: -5px;
width: 8px;
cursor: col-resize;
touch-action: none;
z-index: 1;
}
.ui-side-panels__grip:hover,
.ui-side-panels__grip:focus-visible,
.ui-side-panels.is-resizing .ui-side-panels__grip {
background: var(--color-primary);
opacity: 0.4;
}
.ui-side-panels__head {
display: flex;
align-items: center;
gap: var(--spacing-8);
padding: var(--spacing-8) var(--spacing-12);
border-bottom: 1px solid var(--color-border);
}
.ui-side-panels__title {
flex: 1 1 auto;
min-width: 0;
color: var(--color-text);
}
.ui-side-panels__body {
flex: 1 1 auto;
min-width: 0;
min-height: 0;
padding: var(--spacing-12);
overflow: auto;
overscroll-behavior: contain; /* 몸 끝에서 메인으로 이어 굴리지 않음(85-5) */
}
/* 기기 대응(PLAN_기기대응 2-3) — 폭 840 미만은 오른쪽 패널을 본문 아래로 쌓음(좁으면 보조 칸은 아래) ·
손잡이 줄은 패널 위 가로 · 붙어 따라오기(followView 인라인 높이 · 이동)는 끔 */
html:is([data-size="compact"], [data-size="medium"]) .ui-side-panels-row {
flex-direction: column;
}
html:is([data-size="compact"], [data-size="medium"]) .ui-side-panels,
html:is([data-size="compact"], [data-size="medium"]) .ui-side-panels.is-fill,
html:is([data-size="compact"], [data-size="medium"]) .ui-side-panels.is-collapsed {
flex-direction: column;
align-self: stretch;
width: auto;
height: auto !important;
margin: var(--spacing-8) 0 0;
transform: none !important;
}
html:is([data-size="compact"], [data-size="medium"]) .ui-side-panels__handles {
position: static;
flex-direction: row;
transform: none;
}
html:is([data-size="compact"], [data-size="medium"]) .ui-side-panels__panel,
html:is([data-size="compact"], [data-size="medium"])
.ui-side-panels.is-fill
> .ui-side-panels__panel {
position: relative;
inset: auto;
width: auto;
height: 60dvh;
}
html:is([data-size="compact"], [data-size="medium"]) .ui-side-panels__grip {
display: none;
}