width、height、line-height、margin、padding。div、p、h1-h6、ul/ol/dl、table、form 等。span、a、strong、em、label、input(舊分類)等。img、input(現代分類)、button 等。display: inline-block 將任意元素轉為行內塊。/* 塊級轉行內 */
.block-to-inline { display: inline; }
/* 行內轉塊級 */
.inline-to-block { display: block; }
/* 任意轉行內塊 */
.any-to-inline-block { display: inline-block; }
/* 隱藏元素(不佔空間) */
.hidden { display: none; }
當文本直接放在塊級容器中而無標籤包裹時,瀏覽器會生成無名塊框;塊級元素內的每行文本形成無名行框。這些框無法直接選中樣式,但理解它們有助於掌握佈局渲染本質。
text-align: center.father { text-align: center; }
.child { display: inline-block; /* 或 inline */ }
margin: 0 auto.block-center { width: 800px; margin: 0 auto; }
| 方案 | 原理 | 優點 | 缺點 |
|---|---|---|---|
| Table 包裹 + margin auto | 外層 table 居中 | 兼容性極好 | 語義化差,結構冗餘 |
display: inline + 父級 text-align |
轉為行內元素 | 代碼簡單 | 失去寬高設置能力 |
| 絕對定位 + 相對偏移 | 父 relative; left:50%,子 relative; left:-50% |
不定寬完美居中 | 需額外結構,理解較繞 |
| Flexbox(現代首選) | 父 display:flex; justify-content:center |
語義化、靈活、強大 | IE10+ 部分屬性需前綴 |
line-height = height.v-center { height: 100px; line-height: 100px; }
padding 相等.known-height { padding: 50px 0; /* 高度 100px */ }
vertical-align: middle(僅限表格單元格).table-cell { display: table-cell; vertical-align: middle; height: 200px; }
.parent { position: relative; }
.child {
position: absolute;
top: 50%; left: 50%;
transform: translate(-50%, -50%);
}
.flex-center {
display: flex;
justify-content: center; /* 水平 */
align-items: center; /* 垂直 */
}
文中提供了完整的 HTML/CSS/JS 示例,展示各種居中效果與 transition 動畫過渡,可直接複製運行驗證。
掌握元素分類與 display 轉換是 CSS 佈局的基石。現代項目首選 Flexbox/Grid,兼容舊瀏覽器時靈活選用 Table、絕對定位或 inline-block 方案。理解無名框機制,能讓你在疑難雜症中游刃有餘。