CSS 三欄佈局
三欄佈局通常是左側欄 + 主內容 + 右側欄的結構,常見於新聞網站、社群平台等。
Grid 方式(推薦)
.container {
display: grid;
grid-template-columns: 200px 1fr 200px;
gap: 24px;
}
<div class="container">
<aside class="sidebar-left">左側欄</aside>
<main class="main">主內容</main>
<aside class="sidebar-right">右側欄</aside>
</div>
Flexbox 方式
.container {
display: flex;
gap: 24px;
}
.sidebar-left {
width: 200px;
flex-shrink: 0;
}
.main {
flex: 1;
}
.sidebar-right {
width: 200px;
flex-shrink: 0;
}
響應式三欄佈局
在不同螢幕大小下調整欄位顯示:
.container {
display: grid;
grid-template-columns: 1fr;
gap: 24px;
}
/* 平板:兩欄 */
@media (min-width: 768px) {
.container {
grid-template-columns: 1fr 250px;
}
.sidebar-left {
grid-column: 1 / -1;
}
}
/* 桌機:三欄 */
@media (min-width: 1024px) {
.container {
grid-template-columns: 200px 1fr 250px;
}
.sidebar-left {
grid-column: auto;
}
}
聖杯佈局 (Holy Grail Layout)
經典的三欄佈局,主內容在 HTML 中優先(有利於 SEO):
Grid 實現
.container {
display: grid;
grid-template-columns: 200px 1fr 200px;
gap: 24px;
}
.main {
grid-column: 2;
}
.sidebar-left {
grid-column: 1;
grid-row: 1;
}
.sidebar-right {
grid-column: 3;
}
<div class="container">
<main class="main">主內容(HTML 中優先)</main>
<aside class="sidebar-left">左側欄</aside>
<aside class="sidebar-right">右側欄</aside>
</div>
Flexbox + order 實現
.container {
display: flex;
gap: 24px;
}
.main {
flex: 1;
order: 2;
}
.sidebar-left {
width: 200px;
order: 1;
}
.sidebar-right {
width: 200px;
order: 3;
}
完整範例
新聞網站佈局
.news-layout {
display: grid;
grid-template-columns: 1fr;
gap: 24px;
max-width: 1400px;
margin: 0 auto;
padding: 24px;
}
@media (min-width: 768px) {
.news-layout {
grid-template-columns: 1fr 300px;
}
}
@media (min-width: 1200px) {
.news-layout {
grid-template-columns: 250px 1fr 300px;
}
}
.news-nav {
background: #f5f5f5;
padding: 16px;
border-radius: 8px;
}
.news-content {
min-width: 0;
}
.news-sidebar {
background: #f5f5f5;
padding: 16px;
border-radius: 8px;
}
社群平台佈局
.social-layout {
display: grid;
grid-template-columns: 1fr;
gap: 20px;
max-width: 1200px;
margin: 0 auto;
}
@media (min-width: 1024px) {
.social-layout {
grid-template-columns: 240px minmax(0, 600px) 300px;
justify-content: center;
}
}
.social-nav {
position: sticky;
top: 80px;
height: fit-content;
}
.social-feed {
/* 主內容區 */
}
.social-aside {
position: sticky;
top: 80px;
height: fit-content;
}
/* 小螢幕隱藏側邊欄 */
@media (max-width: 1023px) {
.social-nav,
.social-aside {
display: none;
}
}
電商產品頁
.product-layout {
display: grid;
grid-template-columns: 1fr;
gap: 24px;
}
@media (min-width: 768px) {
.product-layout {
grid-template-columns: 1fr 350px;
}
}
@media (min-width: 1200px) {
.product-layout {
grid-template-columns: 100px 1fr 350px;
}
}
.product-thumbnails {
/* 縮圖列 */
}
.product-main {
/* 主圖和描述 */
}
.product-sidebar {
/* 購買資訊 */
}
不等寬三欄
.container {
display: grid;
grid-template-columns: 1fr 2fr 1fr; /* 1:2:1 比例 */
gap: 24px;
}
/* 或固定兩側,中間彈性 */
.container {
display: grid;
grid-template-columns: 200px 1fr 300px;
gap: 24px;
}
黏性側邊欄
.container {
display: flex;
gap: 24px;
align-items: flex-start;
}
.sidebar-left,
.sidebar-right {
position: sticky;
top: 20px;
width: 200px;
flex-shrink: 0;
}
.main {
flex: 1;
}