摘要:為了更好的加深對居中的理解,搜集和閱讀相關資料,發現不錯的文章將其整理出來。
在學習前端的過程中,發現元素和文本的水平居中和垂直居中,是經常會出現的問題,在實際工作中也會經常碰到。居中的技巧有很多,但在編寫代碼的過程中,發現有時候技巧管用,有時候不管用,于是就將每個知道的方案都試一遍,找到合適的。這種情況究其原因是對居中的認識不夠深入,只是停留在實現需求的水平上。為了更好的加深對居中的理解,搜集和閱讀相關資料,發現不錯的文章將其整理出來。原文參考:https://css-tricks.com/center...
居中是什么居中故名思意就是將物體放置在其容器的中間,在css中居中就是指元素、文本、圖片等相對其容器或父元素或瀏覽器窗口能夠居中顯示。而根據顯示方式的不同,又分為水平居中,垂直居中,水平垂直居中。下面就分情況對居中進行討論。
水平居中水平居中我們常見的一種解決方案就是設置text-align:center,然而我們會發現這種方式有時候有效,有時候卻沒有效果。這是因為我們在使用相關方法的時候并沒有對塊級元素和行內元素進行區分,不同類型的元素其居中方法是不同的:
當元素為行內元素時(如文本,鏈接)當需要居中的元素為行內元素時,你可以通過在其父元素(必須是塊級元素)設置如下css樣式:
.parent { text-align:center; }
示例代碼
這種方法對display設置為inline、inline-block、inline-table、inline-flex的元素都有效。
對于一個塊級元素你可以通過設置其margin屬性,來達到水平居中的效果。你可以將其margin-left和margin-right設置為auto:
.center{ margin:0 auto; }
這樣瀏覽器就會根據元素的寬度自動為元素左右兩邊設定等寬的margin,來達到水平居中的效果。這里需要注意的是元素需要設定width屬性,否則元素的寬度會自動充滿父元素,就不存在相對父元素水平居中一說了。
示例代碼
這里需要注意的是這種方法對設置float屬性的塊級元素是沒有效果的,浮動元素的居中這里有一個解決方案,但是該方法的布局比較混亂,子元素脫出父元素,并不推薦。
另外有一個tricks,能夠實現如下圖中
文字環繞圖片居中的效果,具體參見這篇文章。
當有多個塊級元素時當你需要對多個塊級元素進行居中顯示時,如果塊級元素如下垂直排列:
,那么簡單的設置margin:0 auto;就可以輕松實現。
但如果如下排列:
那么就可以使用display:inline-block將多個塊元素單行顯示,同時由于inline的緣故,可以在父元素設置text-align:center將多個塊元素居中,當然也可以將元素設置為display:flex; justify-content: center;達到居中效果。詳細代碼示例
垂直居中垂直居中相比于水平居中,就復雜一些,還是分塊級與行內進行討論。
inline或inline-block元素 單行垂直居中的情況當父元素沒有設定寬度,而是根據內容自適應時,簡單的設置padding就可以達到垂直居中的效果,如:
css: .p{ border: 1px solid yellow;padding: 80px;} .p a{ background-color: black; color: white; border: 2px solid red; padding: 30px; /*相同的上下內距實現垂直居中*/ } html:
在某些情況下設置padding并不能滿足需求,而你又需要將一段單行顯示的文本居中,這時你可以將line-height和height屬性設置為等高來達到目的:
html:css: main { background: white; margin: 20px 0; padding: 40px; } main div { background: black; color: white; height: 100px; /*行高與line-height相同*/ line-height: 100px; padding: 20px; width: 50%; white-space: nowrap; } I"m a centered line.
示例代碼
關于line-height,有許多需要了解和注意的地方,想詳細了解為什么這么這種方法可以實現垂直居中,可以參見這篇文章
設置padding同樣可以使多行文本居中,但有時當文本出現在表格單元格里或其他情況也會使該方法無效。這時會用到vertical-align屬性,
示例代碼
更多關于vertical—align的信息,可以點擊這里和這篇
需要指出的是只有一個元素屬于inline或是inline-block(table-cell也可以理解為inline-block水平)水平,其身上的vertical-align屬性才會起作用
如果table—like不行,也許你可以試一下flex-parent, 一個flex-child可以很輕易的在flex-parent里垂直居中:
.flex-center-vertically { display: flex; justify-content: center; flex-direction: column; height: 400px; }
示例代碼
需要注意的是父容器必須有一個固定的高度。
如果上述2中方法都不可行,你就需要借助偽元素,也就是在父容器里添加一個高度占滿整個父元素的偽元素,文本就居中顯示在里面。
.ghost-center { position: relative; } .ghost-center::before { content: " "; display: inline-block; height: 100%; width: 1%; vertical-align: middle; } .ghost-center p { display: inline-block; vertical-align: middle; }
完整示例
塊級元素垂直居中 當你知道元素的高度時如果你知道元素的高度,那么你可以這樣實現垂直居中:
.parent { position: relative; } .child { position: absolute; top: 50%; height: 100px; margin-top: -50px; /* account for padding and border if not using box-sizing: border-box; */ /*這里可以使用transform:translate(-50%)實現同樣的效果*/ }
上述代碼是通過定位的方式,來實現垂直居中,子元素參照父元素進行絕對定位,相對于父元素的上邊緣向下移動50%(父元素高度的50%),然后通過margin-top元素將子元素向上拉自身的50%,達到最終的居中。
完整示例代碼
當元素高度未知時可以如下,本質原理與上述相似:
.parent { position: relative; } .child { position: absolute; top: 50%; transform: translateY(-50%); }
完整代碼
使用flexbox使用flexbox無疑是種簡單有效的解決方案:
.parent { display: flex; flex-direction: column; justify-content: center; }
完整代碼
既水平居中又垂直居中你可以將上述方法進行合理的組合,來達到水平垂直居中,總結一下,可分為如下三種情況:
元素是否具有固定的寬高在通過將元素定位50%/50%后,再設置一個高度和寬度一半大小的負值給 margin,能夠很好的居中,并且支持大多數瀏覽器:
.parent { position: relative; } .child { width: 300px; height: 100px; padding: 20px; position: absolute; top: 50%; left: 50%; margin: -70px 0 0 -170px; }
完整代碼
當寬高未知時當你不知道寬高時,你可以使用transform屬性,設置translate(-50%),這里的50%是相對與元素本身的寬高。
.parent { position: relative; } .child { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); }
完整代碼
使用flexbox想要水平垂直居中,你需要設置兩個居中屬性
.parent { display: flex; justify-content: center; align-items: center; }
完整代碼
相關文章:
https://css-tricks.com/float-...
http://www.zhangxinxu.com/wor...
居中代碼生成工具:http://howtocenterincss.com/
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/111553.html
摘要:高度模型淺識為的簡寫,簡稱為塊級格式化上下文,為瀏覽器渲染某一區域的機制,中只有和中還增加了和。并非所有的布局都會在開發中使用,但是其中也會涉及一些知識點。然而在不同的純制作各種圖形純制作各種圖形多圖預警 一勞永逸的搞定 flex 布局 尋根溯源話布局 一切都始于這樣一個問題:怎樣通過 CSS 簡單而優雅的實現水平、垂直同時居中。記得剛開始學習 CSS 的時候,看到 float 屬性不...
摘要:黃金檔未垂直對齊同一行的一組為的使用了或者是時,如果某個的內部標簽中填充一些文字等內容,可能就會出現垂直不對齊的情況。解決方法倒不難的應用會被其他一些屬性破壞,例如和,所以與或是屬性最好不要同用。 工作上,除了Django和一些并不復雜的腳本以外,其余時間寫了大量的CSS和jQuery,現在回頭看之前的一些代碼,寫得十分丑陋又低效,其中的CSS就有很大改進空間。正如多數人的認知一樣,H...
閱讀 3254·2023-04-25 20:35
閱讀 3613·2019-08-30 15:54
閱讀 1994·2019-08-30 15:43
閱讀 2183·2019-08-29 15:14
閱讀 1891·2019-08-29 11:17
閱讀 3382·2019-08-26 13:36
閱讀 696·2019-08-26 10:15
閱讀 2838·2019-08-23 15:41