CSS學(xué)習(xí)筆記-元素水平垂直居中(多圖,流量黨慎點(diǎn))

前言

布局中經(jīng)常會(huì)遇到元素水平居中的需求,今天根據(jù)以前的學(xué)習(xí)筆記??以及看過(guò)的一些技術(shù)博客做個(gè)元素水平居中的小結(jié)。

正文

圖片的水平垂直居中

<div class="container">
    <img src="">//圖片地址為http://static.jsbin.com/images/dave.min.svg
</div> 
.container{
    height:300px;
    width:300px;
    background:yellow;
    text-align:center;
    vertical-align:middle;
    display:table-cell; 
}
img{
    background-color: #333;
    height:230px;
    width:230px;
}


這種方法是通過(guò)設(shè)置display為table-cell,然后設(shè)置text-align斋攀、vertical-align為center來(lái)實(shí)現(xiàn)圖片位于父容器中的水平垂直居中,但是缺點(diǎn)是父div無(wú)法通過(guò)設(shè)置margin:0 auto來(lái)水平居中课锌。

下面來(lái)一個(gè)使圖片能在父元素中水平垂直居中,父元素也能水平居中的方法陷揪。
使用padding或margin填充

.container{
    margin: 80px auto;
    width: 300px;
    height: 300px;
    background-color: yellow;
}
img{
    width: 100px;
    height: 100px;
    padding: 100px; //margin:100px;也可以。
}

該方法是設(shè)置好img的長(zhǎng)寬,然后和父容器之間長(zhǎng)寬的差距用padding來(lái)彌補(bǔ)。效果見(jiàn)下圖肠槽。

此方法是參考了大搜車(chē)前端博客中的一篇CSS布局的博文,作者是覃業(yè)博,原文是針對(duì)父div嵌套子div來(lái)到達(dá)水平垂直居中的目的,我這里div包裹的子元素img,和子元素是div的樣式設(shè)置有些許不一樣。

文字的水平垂直居中

<div class="container">
      文字水平居中
</div>
.container{
    line-height:300px;
    width:300px;
    line-height:300px;
    background:yellow;
    text-align:center;
    margin:0 auto;
}


文字的水平垂直居中在于line-height+line-height同高,然后text-align:center奢啥。

利用float和元素設(shè)置偏移來(lái)水平垂直居中

先上代碼:

<div class="super-element">  
  <div class="layout-helper">
    <div class="sub-element">呵呵呵呵呵呵呵呵呵呵呵呵<br>呵呵呵呵呵呵呵呵呵呵呵呵呵呵<br>呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵</div>
  </div>
</div> 
.super-element{
    width: 100%;
    height: 400px;
    background-color: #ccc;
}

.layout-helper{
    float: left;
/*  display:inline-block; */    
    position: relative;
    background:pink;
    left: 50%;
    top: 50%;
}

.sub-element{
    position: relative;
    left: -50%;
    -webkit-transform:translateY(-50%);
    transform:translateY(-50%);
    background-color: #333;
    color: #fff;
}

效果圖:


該方法參考大搜車(chē)前端博客中的一篇CSS布局的博文,中心思路就是將需要居中的元素sub-element的父元素layout-helper設(shè)置top秸仙、left偏移50%,然后設(shè)置float使layout-helper縮緊寬度, 再設(shè)置sub-element的left為-50%,此時(shí)sub-element在水平方向就居中了,而在垂直方向上因?yàn)閟ub-element的父元素layout-helper高度是不確定的,所以給sub-element設(shè)置top:-50%因計(jì)算不出而無(wú)效,此時(shí)用到了transform:translateY(-50%);將sub-element偏移-50%,就達(dá)到了居中的效果。以上使layout-helper縮緊寬度設(shè)置display:inline-block同樣可以達(dá)到效果桩盲。但是如果sub-element內(nèi)容一多,就會(huì)超出父元素,設(shè)置super-element為overflow:auto;就會(huì)出現(xiàn)以下效果寂纪。

針對(duì)這個(gè)bug,原文作者覃業(yè)博也有一個(gè)解決方案,利用元素超出父元素的左邊不會(huì)產(chǎn)生滾動(dòng)條的特性,但是我沒(méi)怎么悟透把他那個(gè)方案應(yīng)用到上面這個(gè)實(shí)例當(dāng)中,感興趣的人請(qǐng)戳大搜車(chē)前端博客中的一篇CSS布局的博文,個(gè)人覺(jué)得把super-element設(shè)置overflow:hidden也可以,sub-element再長(zhǎng)也就兩邊頂格。

還有一種通過(guò)設(shè)置添加占位div和設(shè)置占位div的margin-bottom:-50%來(lái)使元素居中的方案,先上圖:

<div class="super-element">  
  <div class="layout-helper"></div>
  <div class="sub-element"></div>
</div>  
.super-element{
    width: 400px;
    height: 400px;
    margin:0 auto;
    background-color:pink;
}
.layout-helper{
    width: 100%;
    height: 50%;
    margin-bottom:-50px;
}
.sub-element{
    position: relative;
    left: 50%;
    transform:translateX(-50%);
    width: 100px;
    height:100px;
    background-color:yellow;
}

效果圖:


其思想就是在super-element中設(shè)置一個(gè)占super-element寬100%和高50%的div塊,我這里命名layout-helper,然后設(shè)置它的margin-bottom為sub-element高度的一半,后面接著的sub-element就垂直居中了,然后再設(shè)置sub-element的position:relative;left:50%;transform:translateX(-50%);水平也居中了赌结。這里有個(gè)注意點(diǎn),super-element的高度需要確定,這樣才能使layout-helper的heigh:50%有效,還有l(wèi)ayout-helper的margin-bottom設(shè)置的負(fù)高度為sub-element高度的一半捞蛋。這種水平垂直居中方式兼容性較好。

此外還有一種使用定位和margin-top+margin-left為負(fù)子元素長(zhǎng)寬來(lái)垂直水平居中的方法柬姚。上圖:

 <div class="super-ele">
   <div class="sub-ele">
 </div>
.super-ele{
    position:relative;
    width:300px;
    height:300px;
    margin:100px auto;
    background:pink;
}

.sub-ele{
    position:absolute;
    width:100px;
    height:100px;
    background:yellow;
    top:50%;
    left:50%;
    margin-top:-50px;
    margin-left:-50px;
}

這種方法也是要設(shè)置子元素長(zhǎng)和寬并且在設(shè)置margin-top拟杉、margin-left的時(shí)候去匹配子元素長(zhǎng)寬的一半。

結(jié)尾

元素水平居中的技巧還有很多,還有使用Flex的方法,今天先到這里,等我悟透了再慢慢填補(bǔ)文章,以上實(shí)例如有錯(cuò)誤存在,歡迎各位及時(shí)指出量承。

參考:大搜車(chē)前端博客中的一篇CSS布局的博文

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末搬设,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子撕捍,更是在濱河造成了極大的恐慌拿穴,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,290評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件卦洽,死亡現(xiàn)場(chǎng)離奇詭異贞言,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)阀蒂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門(mén)该窗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)弟蚀,“玉大人,你說(shuō)我怎么就攤上這事酗失∫宥ぃ” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,872評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵规肴,是天一觀的道長(zhǎng)捶闸。 經(jīng)常有香客問(wèn)我,道長(zhǎng)拖刃,這世上最難降的妖魔是什么删壮? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,415評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮兑牡,結(jié)果婚禮上央碟,老公的妹妹穿的比我還像新娘。我一直安慰自己均函,他們只是感情好亿虽,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著苞也,像睡著了一般洛勉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上如迟,一...
    開(kāi)封第一講書(shū)人閱讀 49,784評(píng)論 1 290
  • 那天收毫,我揣著相機(jī)與錄音,去河邊找鬼殷勘。 笑死牛哺,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的劳吠。 我是一名探鬼主播,決...
    沈念sama閱讀 38,927評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼巩趁,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼痒玩!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起议慰,我...
    開(kāi)封第一講書(shū)人閱讀 37,691評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤蠢古,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后别凹,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體草讶,經(jīng)...
    沈念sama閱讀 44,137評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評(píng)論 2 326
  • 正文 我和宋清朗相戀三年炉菲,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了堕战。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片坤溃。...
    茶點(diǎn)故事閱讀 38,622評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖嘱丢,靈堂內(nèi)的尸體忽然破棺而出薪介,到底是詐尸還是另有隱情,我是刑警寧澤越驻,帶...
    沈念sama閱讀 34,289評(píng)論 4 329
  • 正文 年R本政府宣布汁政,位于F島的核電站,受9級(jí)特大地震影響缀旁,放射性物質(zhì)發(fā)生泄漏记劈。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評(píng)論 3 312
  • 文/蒙蒙 一并巍、第九天 我趴在偏房一處隱蔽的房頂上張望目木。 院中可真熱鬧,春花似錦履澳、人聲如沸嘶窄。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)柄冲。三九已至,卻和暖如春忠蝗,著一層夾襖步出監(jiān)牢的瞬間现横,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工阁最, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留戒祠,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,316評(píng)論 2 360
  • 正文 我出身青樓速种,卻偏偏與公主長(zhǎng)得像姜盈,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子配阵,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評(píng)論 2 348

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