CSS居中的幾種方式

本文主要總結(jié)幾種常見的CSS居中方式搅荞,下面我準(zhǔn)備分為三個方向來寫青责,分別是水平居中,垂直居中取具,水平垂直居中脖隶。
水平居中
1、inline元素如何實現(xiàn)水平居中暇检?(text-align:center)
2产阱、為什么text-align對block元素水平居中無效?(text-align只對行內(nèi)元素生效)
3块仆、block元素實現(xiàn)水平居中构蹬?(margin:0 auto)
垂直居中
1、inline元素垂直居中悔据、block元素垂直居中庄敛,兩者的實現(xiàn)需要區(qū)別對待嗎?(yes)
2科汗、inline元素如何實現(xiàn)垂直居中藻烤?(height = line-height,多與text-align:center結(jié)合后應(yīng)用于導(dǎo)航欄)
水平垂直居中
1、如果是多行文字怎么實現(xiàn)水平垂直居中怖亭? ????效果預(yù)覽

.parent{
  border:1px solid pink;
  height:300px;
  line-height:300px;
  text-align:center;   /*水平居中*/
}
.child{
  border:1px solid yellow;
  width:200px;
  display:inline-block;
  vertical-align:middle;
  word-break:break-all;
  line-height:2;  
}

2涎显、block元素的水平垂直居中
(1)既然margin:0 auto可以讓塊級元素水平居中,那為什么margin:auto 0不可以讓塊級元素垂直居中呢兴猩?
width 相關(guān)計算依賴于其包含塊期吓,最初能確定值,所以margin:keywords auto中auto會均分包含塊的剩余空間倾芝。而height 相關(guān)計算依賴于其自身內(nèi)容高度讨勤,自身內(nèi)容高度是不能最初確定值的,所以margin:auto keywords無法讓塊級元素垂直居中晨另。
深入了解請參考https://www.zhihu.com/question/21644198
(2)已知父容器高度悬襟,利用table自帶功能使內(nèi)容垂直居中【想實現(xiàn)水平垂直居中的效果,可以給內(nèi)容加個div拯刁,再設(shè)置margin:0 auto】 ????效果預(yù)覽

<style>
  .parent{
    border:1px solid pink;
    height:300px;
  }
  .child{
    border:1px solid yellow;
  }
</style>
<table class="parent">
  <tr>
    <td class="child">
      利用table自帶功能使內(nèi)容垂直居中利用table自帶功能使內(nèi)容垂直居中利用table自帶功能使內(nèi)容垂直居中利用table自帶功能使內(nèi)容垂直居中利用table自帶功能使內(nèi)容垂直居中
    </td>
  </tr>
</table>

(3)已知父容器寬高脊岳,將div裝成table,利用margin:0 auto垛玻、display:table-cell屬性實現(xiàn)水平垂直居中 ????效果預(yù)覽
table自帶功能與將div裝成table實現(xiàn)水平垂直居中作對比 ????效果預(yù)覽

.parent{
  border:1px solid pink;
  width:400px;
  height:300px;
  display:table-cell;
  vertical-align:middle;/*之所以子元素可以垂直居中對齊割捅,是因為td元素具有valign屬性,而vertical-align:middle只會在具有valign屬性的對象中生效*/
}
.child{
  border:1px solid yellow;
  width:200px;
  margin:0 auto;
}

提問:doctype對瀏覽器解析vertical-align的影響帚桩?
答案

3亿驾、已知寬高,利用負(fù)邊距實現(xiàn)水平垂直居中 ????效果預(yù)覽

  position:absolute;
  width:300px;
  height:100px;
  top:50%;
  left:50%;
  margin-top:-50px;
  margin-left:-150px;

4账嚎、未知寬高莫瞬,利用css3的新屬性transform:translate(x,y)屬性實現(xiàn)水平垂直居中 ????效果預(yù)覽

  position:absolute;
  top:50%;
  left:50%;
  transform:translate(-50%,-50%);
  -webkit-transform:translate(-50%,-50%);           
  -moz-transform:translate(-50%,-50%);            
  -ms-transform:translate(-50%,-50%);

5、已知寬高郭蕉,利用absolute疼邀、margin:auto實現(xiàn)水平垂直居中 ????效果預(yù)覽

  position:absolute;
  width:300px;
  height:200px;
  top:0;
  bottom:0;
  left:0;
  right:0;
  margin:auto;

6、已知寬度召锈,在父容器內(nèi)利用flex屬性實現(xiàn)水平垂直居中(不兼容IE)
效果預(yù)覽

  display:flex;
  justify-content:center;  /*水平居中*/
  align-items:center;   /*垂直居中*/
  flex-direction:column;  /*子元素非水平排列而是垂直排列*/

7旁振、利用100%高度的after、before加上inline-block實現(xiàn)水平垂直居中
效果預(yù)覽

.parent{
  border:1px solid pink;
  height:300px;
  text-align:center;  /*水平居中*/
}
.child{
  border:1px solid #ccc;
  width:300px;
  height:150px;
  display:inline-block;   /*塊級元素具有行內(nèi)元素的屬性涨岁,支持元素從左到右排列*/
  vertical-align:middle;  /*子元素垂直居中*/
}
.parent .before{
  border:1px solid yellow;
  height:100%;
  display:inline-block;  /*行內(nèi)元素具備塊級元素的特征拐袜,支持設(shè)置寬高*/
  vertical-align:middle;
}
.parent .after{
  border:1px solid orange;
  height:100%;
  display:inline-block;
  vertical-align:middle;  /*子元素垂直居中的參照物*/
}

8、利用100%高度的after梢薪、before加上inline-block實現(xiàn)水平垂直居中(優(yōu)化版)
效果預(yù)覽

.parent{
  border:1px solid pink;
  height:300px;
  text-align:center; /*水平居中*/
}
.child{
  border:1px solid #ccc;
  width:300px;
  display:inline-block;
  vertical-align:middle;
}
.parent:before{
  content:'';
  outline:1px solid transparent;  /*元素透明*/
  display:inline-block;
  height:100%;
  vertical-align:middle;
}
.parent:after{
  content:'';
  outline:1px solid transparent;
  display:inline-block;
  height:100%;
  vertical-align:middle;
}

參考資料:https://jscode.me/t/topic/1936
http://www.bkjia.com/HTML_CSS/1029355.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蹬铺,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子秉撇,更是在濱河造成了極大的恐慌甜攀,老刑警劉巖秋泄,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異赴邻,居然都是意外死亡印衔,警方通過查閱死者的電腦和手機(jī)啡捶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進(jìn)店門姥敛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人瞎暑,你說我怎么就攤上這事彤敛。” “怎么了了赌?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵墨榄,是天一觀的道長。 經(jīng)常有香客問我勿她,道長袄秩,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任逢并,我火速辦了婚禮之剧,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘砍聊。我一直安慰自己背稼,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布玻蝌。 她就那樣靜靜地躺著蟹肘,像睡著了一般。 火紅的嫁衣襯著肌膚如雪俯树。 梳的紋絲不亂的頭發(fā)上帘腹,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天,我揣著相機(jī)與錄音许饿,去河邊找鬼竹椒。 笑死,一個胖子當(dāng)著我的面吹牛米辐,可吹牛的內(nèi)容都是我干的胸完。 我是一名探鬼主播,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼翘贮,長吁一口氣:“原來是場噩夢啊……” “哼赊窥!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起狸页,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤锨能,失蹤者是張志新(化名)和其女友劉穎扯再,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體址遇,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡熄阻,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了倔约。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片秃殉。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖浸剩,靈堂內(nèi)的尸體忽然破棺而出钾军,到底是詐尸還是另有隱情,我是刑警寧澤绢要,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布吏恭,位于F島的核電站,受9級特大地震影響重罪,放射性物質(zhì)發(fā)生泄漏樱哼。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一剿配、第九天 我趴在偏房一處隱蔽的房頂上張望搅幅。 院中可真熱鬧,春花似錦惨篱、人聲如沸盏筐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽琢融。三九已至,卻和暖如春簿寂,著一層夾襖步出監(jiān)牢的瞬間漾抬,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工常遂, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留纳令,地道東北人。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓克胳,卻偏偏與公主長得像平绩,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子漠另,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,465評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 水平居中方式 1.margig:0 auto;(不能受到float影響) 2.text-align: center...
    MGd閱讀 455評論 0 1
  • 1.水平居中的 margin: 0 auto; 這個用于子元素上的捏雌,前提是不受float影響。 2.水平居中的 t...
    qqqc閱讀 1,618評論 1 0
  • 1.水平居中的 margin:0 auto; 2.水平居中 text-align:center; 3.水平垂直居中...
    被遺忘的傳說閱讀 1,002評論 0 0
  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案笆搓? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 13,734評論 1 92
  • 不論在使用什么程序語言編程時性湿,都是需要使用各種數(shù)據(jù)類型來存儲不同的信息纬傲。變量的數(shù)據(jù)類型決定了如何將代表這些值的位存...
    奔跑的_猿閱讀 210評論 0 1