[CSS] 元素置中的N 個方法

文章推薦指數: 80 %
投票人數:10人

元素置中是調控CSS 時必然會遇到的問題,也是Junior 前端工程師面試的熱門考題。

這篇列出常見的置中方式。

定義限制條件:. 讓子元素水平、垂直皆居中 ... Eudora FrontendDeveloperTaipeiCity,Taiwan TaipeiCity,Taiwan [email protected] [email protected] GitHub:eudora-hsjLinkedIn:eudora-huangTwitter:eudora_hsjMedium:eudora-hsjbookTableofContents寫法1:Flex標配置中屬性寫法2:Flex+Marginauto寫法3:Absolute+TRBL0+Marginauto寫法4:Absolute+LT50%+Translate-50%寫法5:Relative+LT50%+Translate-50%寫法6:偽元素+inline-block+vertical-align+text-align參考文件comment Comments [CSS]元素置中的N個方法 [CSS]語法-選擇器 | [CSS]Sass新手入門(3)函數應用 (Updated:2022-01-08) 2020-09-24 元素置中是調控CSS時必然會遇到的問題,也是Junior前端工程師面試的熱門考題。

這篇列出常見的置中方式。

定義限制條件:讓子元素水平、垂直皆居中: 置中的設定不能寫死特定的偏移值  (當父/子元素的寬高有變化時仍要維持居中)ps.下列範例以兩個div--父(.container)、子(.box)結構為例: #寫法1:Flex標配置中屬性.container{ display:flex; justify-content:center; align-items:center; } >CodepenDemo(opensnewwindow)將父層設為display:flex定義Flex子物件 justify-content:center 主軸對齊方式:居中align-items:center 次軸對齊方式:居中#寫法2:Flex+Marginauto.container{ display:flex; .box{ margin:auto } } >CodepenDemo(opensnewwindow)margin:auto:將剩餘空間自動分配display設為grid/inline-flex/inline-grid定義完整空間。

#寫法3:Absolute+TRBL0+Marginauto.container{ position:relative; .box{ position:absolute; top:0; bottom:0; left:0; right:0; margin:auto; } } >CodepenDemo(opensnewwindow)position:absolute指定top/right/bottom/left 時是以「第一個有定位的父層容器」為位移基準。

有定位是指position為relative/absolute/fixed若想指定依據的父層沒有特別定義position時,可定義為relative而不影響本來的排版(因為relative在未指定top/right/bottom/left時不會有任何改變)。

如果所有父層都沒有定位,則將對齊「window視窗」將top/right/bottom/left指定為0時,會自動計算為可運用的空間。

margin:auto:將剩餘空間做自動分配 #寫法4:Absolute+LT50%+Translate-50%.container{ position:relative; .box{ position:absolute; top:50%; left:50%; transform:translate(-50%,-50%); } } >CodepenDemo(opensnewwindow)類似方法3position:absolute依據其「有定位的父層」做位移。

top:50%、left:50%進行向下、右位移50%:但因物件對齊點為左上角,故須進行X、Y軸負向偏移50%讓對齊點為物件中心:transform:translate(-50%,-50%) 才可真正置中。

#寫法5:Relative+LT50%+Translate-50%.container{ .box{ position:relative; top:50%; left:50%; transform:translate(-50%,-50%) } } >CodepenDemo(opensnewwindow)類似做法4。

position:relative指定top/right/bottom/left 時為原本位置做偏移。

#寫法6:偽元素+inline-block+vertical-align+text-align.container{ text-align:center; font-size:0; &:after{ content:''; height:100%; vertical-align:middle; display:inline-block; width:0px; } .box{ display:inline-block; vertical-align:middle; } } >CodepenDemo(opensnewwindow)#參考文件連續30天的超實務網頁設計的垂直置中教學/Amos(opensnewwindow)23種CSS垂直置中技巧/Amos(opensnewwindow)CSS垂直置中的七個方法/oxxo(opensnewwindow)CSS垂直置中的三個方法/oxxo(opensnewwindow)探秘flex上下文中神奇的自動margin(opensnewwindow)⮩本文同步發表在第12屆iT邦幫忙鐵人賽《For前端小幼苗的圖解筆記》(opensnewwindow) [CSS]元素置中的N個方法 [CSS]語法-選擇器 | [CSS]Sass新手入門(3)函數應用



請為這篇文章評分?