CSS 兩欄佈局
兩欄佈局是最常見的網頁佈局之一,通常是側邊欄(固定寬度)搭配主內容區(彈性寬度)。
Flexbox 方式(推薦)
.container {
display: flex;
}
.sidebar {
width: 250px;
flex-shrink: 0; /* 不縮小 */
}
.main {
flex: 1; /* 佔據剩餘空間 */
}
<div class="container">
<aside class="sidebar">側邊欄</aside>
<main class="main">主內容</main>
</div>
側邊欄在右邊
.container {
display: flex;
}
.main {
flex: 1;
}
.sidebar {
width: 250px;
flex-shrink: 0;
}
<div class="container">
<main class="main">主內容</main>
<aside class="sidebar">側邊欄</aside>
</div>
加入間距
.container {
display: flex;
gap: 24px;
}
Grid 方式
.container {
display: grid;
grid-template-columns: 250px 1fr;
gap: 24px;
}
側邊欄在右邊
.container {
display: grid;
grid-template-columns: 1fr 250px;
gap: 24px;
}
響應式兩欄佈局
在小螢幕上變成單欄:
Flexbox 響應式
.container {
display: flex;
flex-wrap: wrap;
gap: 24px;
}
.sidebar {
width: 100%;
}
.main {
width: 100%;
}
@media (min-width: 768px) {
.sidebar {
width: 250px;
flex-shrink: 0;
}
.main {
flex: 1;
}
}
Grid 響應式
.container {
display: grid;
grid-template-columns: 1fr;
gap: 24px;
}
@media (min-width: 768px) {
.container {
grid-template-columns: 250px 1fr;
}
}
完整範例
部落格佈局
.blog-layout {
display: grid;
grid-template-columns: 1fr;
gap: 32px;
max-width: 1200px;
margin: 0 auto;
padding: 24px;
}
@media (min-width: 768px) {
.blog-layout {
grid-template-columns: 1fr 300px;
}
}
.blog-content {
min-width: 0; /* 防止內容溢出 */
}
.blog-sidebar {
/* 側邊欄樣式 */
}
後台管理介面
.admin-layout {
display: flex;
min-height: 100vh;
}
.admin-sidebar {
width: 240px;
flex-shrink: 0;
background: #1a1a2e;
color: white;
}
.admin-main {
flex: 1;
padding: 24px;
background: #f5f5f5;
}
/* 響應式:小螢幕隱藏側邊欄 */
@media (max-width: 768px) {
.admin-sidebar {
position: fixed;
left: -240px;
height: 100vh;
z-index: 100;
transition: left 0.3s;
}
.admin-sidebar.open {
left: 0;
}
}
文件頁面
.docs-layout {
display: flex;
gap: 40px;
max-width: 1400px;
margin: 0 auto;
padding: 0 20px;
}
.docs-nav {
width: 220px;
flex-shrink: 0;
position: sticky;
top: 80px;
height: fit-content;
}
.docs-content {
flex: 1;
min-width: 0;
max-width: 800px;
}
@media (max-width: 1024px) {
.docs-layout {
flex-direction: column;
}
.docs-nav {
width: 100%;
position: static;
}
}
黏性側邊欄
讓側邊欄在捲動時固定:
.container {
display: flex;
gap: 24px;
align-items: flex-start;
}
.sidebar {
width: 250px;
flex-shrink: 0;
position: sticky;
top: 20px;
}
.main {
flex: 1;
}
舊方法(float)
較舊的浮動方式,現在不推薦使用:
.sidebar {
float: left;
width: 250px;
}
.main {
margin-left: 270px; /* sidebar 寬度 + 間距 */
}
.container::after {
content: "";
display: block;
clear: both;
}