成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

對(duì)css居中的一點(diǎn)總結(jié)

BenCHou / 1891人閱讀

摘要:為了更好的加深對(duì)居中的理解,搜集和閱讀相關(guān)資料,發(fā)現(xiàn)不錯(cuò)的文章將其整理出來。

在學(xué)習(xí)前端的過程中,發(fā)現(xiàn)元素和文本的水平居中和垂直居中,是經(jīng)常會(huì)出現(xiàn)的問題,在實(shí)際工作中也會(huì)經(jīng)常碰到。居中的技巧有很多,但在編寫代碼的過程中,發(fā)現(xiàn)有時(shí)候技巧管用,有時(shí)候不管用,于是就將每個(gè)知道的方案都試一遍,找到合適的。這種情況究其原因是對(duì)居中的認(rèn)識(shí)不夠深入,只是停留在實(shí)現(xiàn)需求的水平上。為了更好的加深對(duì)居中的理解,搜集和閱讀相關(guān)資料,發(fā)現(xiàn)不錯(cuò)的文章將其整理出來。原文參考:https://css-tricks.com/center...

居中是什么

居中故名思意就是將物體放置在其容器的中間,在css中居中就是指元素、文本、圖片等相對(duì)其容器或父元素或?yàn)g覽器窗口能夠居中顯示。而根據(jù)顯示方式的不同,又分為水平居中,垂直居中,水平垂直居中。下面就分情況對(duì)居中進(jìn)行討論。

水平居中

水平居中我們常見的一種解決方案就是設(shè)置text-align:center,然而我們會(huì)發(fā)現(xiàn)這種方式有時(shí)候有效,有時(shí)候卻沒有效果。這是因?yàn)槲覀冊(cè)谑褂孟嚓P(guān)方法的時(shí)候并沒有對(duì)塊級(jí)元素和行內(nèi)元素進(jìn)行區(qū)分,不同類型的元素其居中方法是不同的:

當(dāng)元素為行內(nèi)元素時(shí)(如文本,鏈接)

當(dāng)需要居中的元素為行內(nèi)元素時(shí),你可以通過在其父元素(必須是塊級(jí)元素)設(shè)置如下css樣式:

.parent {
     text-align:center;
}

示例代碼
這種方法對(duì)display設(shè)置為inline、inline-block、inline-table、inline-flex的元素都有效。

塊級(jí)元素居中

對(duì)于一個(gè)塊級(jí)元素你可以通過設(shè)置其margin屬性,來達(dá)到水平居中的效果。你可以將其margin-left和margin-right設(shè)置為auto:

.center{
    margin:0 auto;
}

這樣瀏覽器就會(huì)根據(jù)元素的寬度自動(dòng)為元素左右兩邊設(shè)定等寬的margin,來達(dá)到水平居中的效果。這里需要注意的是元素需要設(shè)定width屬性,否則元素的寬度會(huì)自動(dòng)充滿父元素,就不存在相對(duì)父元素水平居中一說了。
示例代碼
這里需要注意的是這種方法對(duì)設(shè)置float屬性的塊級(jí)元素是沒有效果的,浮動(dòng)元素的居中這里有一個(gè)解決方案,但是該方法的布局比較混亂,子元素脫出父元素,并不推薦。
另外有一個(gè)tricks,能夠?qū)崿F(xiàn)如下圖中

文字環(huán)繞圖片居中的效果,具體參見這篇文章。

當(dāng)有多個(gè)塊級(jí)元素時(shí)

當(dāng)你需要對(duì)多個(gè)塊級(jí)元素進(jìn)行居中顯示時(shí),如果塊級(jí)元素如下垂直排列:

,那么簡單的設(shè)置margin:0 auto;就可以輕松實(shí)現(xiàn)。
但如果如下排列:

那么就可以使用display:inline-block將多個(gè)塊元素單行顯示,同時(shí)由于inline的緣故,可以在父元素設(shè)置text-align:center將多個(gè)塊元素居中,當(dāng)然也可以將元素設(shè)置為display:flex; justify-content: center;達(dá)到居中效果。詳細(xì)代碼示例

垂直居中

垂直居中相比于水平居中,就復(fù)雜一些,還是分塊級(jí)與行內(nèi)進(jìn)行討論。

inline或inline-block元素 單行垂直居中的情況

當(dāng)父元素沒有設(shè)定寬度,而是根據(jù)內(nèi)容自適應(yīng)時(shí),簡單的設(shè)置padding就可以達(dá)到垂直居中的效果,如:

css:
.p{ border: 1px solid yellow;padding: 80px;}
.p a{
            background-color: black;
            color: white;
            border: 2px solid red;
            padding: 30px;  /*相同的上下內(nèi)距實(shí)現(xiàn)垂直居中*/
        }
html:

在某些情況下設(shè)置padding并不能滿足需求,而你又需要將一段單行顯示的文本居中,這時(shí)你可以將line-height和height屬性設(shè)置為等高來達(dá)到目的:

html:
I"m a centered line.
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; }

示例代碼
關(guān)于line-height,有許多需要了解和注意的地方,想詳細(xì)了解為什么這么這種方法可以實(shí)現(xiàn)垂直居中,可以參見這篇文章

多行垂直居中

設(shè)置padding同樣可以使多行文本居中,但有時(shí)當(dāng)文本出現(xiàn)在表格單元格里或其他情況也會(huì)使該方法無效。這時(shí)會(huì)用到vertical-align屬性,
示例代碼
更多關(guān)于vertical—align的信息,可以點(diǎn)擊這里和這篇
需要指出的是只有一個(gè)元素屬于inline或是inline-block(table-cell也可以理解為inline-block水平)水平,其身上的vertical-align屬性才會(huì)起作用

如果table—like不行,也許你可以試一下flex-parent, 一個(gè)flex-child可以很輕易的在flex-parent里垂直居中:

.flex-center-vertically {
  display: flex;
  justify-content: center;
  flex-direction: column;
  height: 400px;
}

示例代碼
需要注意的是父容器必須有一個(gè)固定的高度。
如果上述2中方法都不可行,你就需要借助偽元素,也就是在父容器里添加一個(gè)高度占滿整個(gè)父元素的偽元素,文本就居中顯示在里面。

.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;
}

完整示例

塊級(jí)元素垂直居中 當(dāng)你知道元素的高度時(shí)

如果你知道元素的高度,那么你可以這樣實(shí)現(xiàn)垂直居中:

.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%)實(shí)現(xiàn)同樣的效果*/
}

上述代碼是通過定位的方式,來實(shí)現(xiàn)垂直居中,子元素參照父元素進(jìn)行絕對(duì)定位,相對(duì)于父元素的上邊緣向下移動(dòng)50%(父元素高度的50%),然后通過margin-top元素將子元素向上拉自身的50%,達(dá)到最終的居中。
完整示例代碼

當(dāng)元素的高度未知時(shí)

當(dāng)元素高度未知時(shí)可以如下,本質(zhì)原理與上述相似:

.parent {
  position: relative;
}
.child {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
}

完整代碼

使用flexbox

使用flexbox無疑是種簡單有效的解決方案:

.parent {
  display: flex;
  flex-direction: column;
  justify-content: center;
}

完整代碼

既水平居中又垂直居中

你可以將上述方法進(jìn)行合理的組合,來達(dá)到水平垂直居中,總結(jié)一下,可分為如下三種情況:

元素是否具有固定的寬高

在通過將元素定位50%/50%后,再設(shè)置一個(gè)高度和寬度一半大小的負(fù)值給 margin,能夠很好的居中,并且支持大多數(shù)瀏覽器:

.parent {
  position: relative;
}

.child {
  width: 300px;
  height: 100px;
  padding: 20px;

  position: absolute;
  top: 50%;
  left: 50%;

  margin: -70px 0 0 -170px;
}

完整代碼

當(dāng)寬高未知時(shí)

當(dāng)你不知道寬高時(shí),你可以使用transform屬性,設(shè)置translate(-50%),這里的50%是相對(duì)與元素本身的寬高。

.parent {
  position: relative;
}
.child {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}

完整代碼

使用flexbox

想要水平垂直居中,你需要設(shè)置兩個(gè)居中屬性

.parent {
  display: flex;
  justify-content: center;
  align-items: center;
}

完整代碼

相關(guān)文章:
https://css-tricks.com/float-...

http://www.zhangxinxu.com/wor...

居中代碼生成工具:http://howtocenterincss.com/

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/111553.html

相關(guān)文章

  • css--布局

    摘要:布局方式布局的傳統(tǒng)解決方案,基于盒狀模型,依賴屬性屬性屬性。它對(duì)于那些特殊布局非常不方便,比如,垂直居中就不容易實(shí)現(xiàn)。關(guān)于布局,當(dāng)然肯定還有更多的更好的方法。 接觸前端開發(fā)也有半年了,每當(dāng)需要將一個(gè)空白的紙,畫成一個(gè)頁面的時(shí)候,總會(huì)出現(xiàn)不知所措的幾秒鐘。除了因?yàn)閷?duì)css中的各種屬性的不熟練之外,更難為人的是怎么簡練的將這些屬性排列組合起來。其實(shí)靜下心來,仔細(xì)想一想,無非就是整體-->局...

    Nino 評(píng)論0 收藏0
  • 前端-CSS3&H5

    摘要:高度模型淺識(shí)為的簡寫,簡稱為塊級(jí)格式化上下文,為瀏覽器渲染某一區(qū)域的機(jī)制,中只有和中還增加了和。并非所有的布局都會(huì)在開發(fā)中使用,但是其中也會(huì)涉及一些知識(shí)點(diǎn)。然而在不同的純制作各種圖形純制作各種圖形多圖預(yù)警 一勞永逸的搞定 flex 布局 尋根溯源話布局 一切都始于這樣一個(gè)問題:怎樣通過 CSS 簡單而優(yōu)雅的實(shí)現(xiàn)水平、垂直同時(shí)居中。記得剛開始學(xué)習(xí) CSS 的時(shí)候,看到 float 屬性不...

    xiaolinbang 評(píng)論0 收藏0
  • css3總結(jié)居中

    摘要:居中在前端布局上很常見,也很常用,也是最基本的技巧。居中效果在方向控制上基本可以分解成水平居中,垂直居中和水平垂直居中。針對(duì)調(diào)整的元素不同,具體的處理方式上有些差異。這里我們先不講絕對(duì)定位下的居中,絕對(duì)定位下的居中方法很多,變化也多?! 【又性谇岸瞬季稚虾艹R?,也很常用,也是最基本的技巧。居中效果在方向控制上基本可以分解成水平居中,垂直居中和水平垂直居中。   針對(duì)調(diào)整的元素不同,具體的處理...

    mist14 評(píng)論0 收藏0
  • CSS用法的一總結(jié)

    摘要:黃金檔未垂直對(duì)齊同一行的一組為的使用了或者是時(shí),如果某個(gè)的內(nèi)部標(biāo)簽中填充一些文字等內(nèi)容,可能就會(huì)出現(xiàn)垂直不對(duì)齊的情況。解決方法倒不難的應(yīng)用會(huì)被其他一些屬性破壞,例如和,所以與或是屬性最好不要同用。 工作上,除了Django和一些并不復(fù)雜的腳本以外,其余時(shí)間寫了大量的CSS和jQuery,現(xiàn)在回頭看之前的一些代碼,寫得十分丑陋又低效,其中的CSS就有很大改進(jìn)空間。正如多數(shù)人的認(rèn)知一樣,H...

    Anchorer 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

BenCHou

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<