CSS Grid 페이지 레이아웃
헤더/사이드바/메인/어사이드/푸터를 갖춘 CSS Grid 기반 전체 페이지 레이아웃.
:root {
--color-bg: #f9fafb;
--color-surface: #ffffff;
--color-text: #111827;
--color-text-muted: #6b7280;
--color-border: #e5e7eb;
--color-primary: #3b82f6;
--sidebar-width: 260px;
--aside-width: 220px;
--header-height: 60px;
--radius: 8px;
}
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
body {
font-family: system-ui, -apple-system, sans-serif;
background: var(--color-bg);
color: var(--color-text);
line-height: 1.6;
}
.app {
display: grid;
grid-template:
"header header header " var(--header-height)
"sidebar main aside " 1fr
"footer footer footer " auto
/ var(--sidebar-width) 1fr var(--aside-width);
min-height: 100vh;
}
.app-header {
grid-area: header;
background: var(--color-surface);
border-bottom: 1px solid var(--color-border);
display: flex;
align-items: center;
padding: 0 1.5rem;
gap: 1rem;
position: sticky;
top: 0;
z-index: 10;
}
.app-sidebar {
grid-area: sidebar;
background: var(--color-surface);
border-right: 1px solid var(--color-border);
padding: 1.5rem 1rem;
overflow-y: auto;
}
.app-main {
grid-area: main;
padding: 2rem;
overflow-x: hidden;
}
.app-aside {
grid-area: aside;
background: var(--color-surface);
border-left: 1px solid var(--color-border);
padding: 1.5rem 1rem;
overflow-y: auto;
}
.app-footer {
grid-area: footer;
background: var(--color-surface);
border-top: 1px solid var(--color-border);
padding: 1rem 1.5rem;
text-align: center;
color: var(--color-text-muted);
font-size: 0.875rem;
}
@media (max-width: 1200px) {
.app {
grid-template:
"header header " var(--header-height)
"sidebar main " 1fr
"footer footer " auto
/ var(--sidebar-width) 1fr;
}
.app-aside { display: none; }
}
@media (max-width: 768px) {
.app {
grid-template:
"header" var(--header-height)
"main " 1fr
"footer" auto
/ 1fr;
}
.app-sidebar { display: none; }
}