在介紹居中方式之前,簡(jiǎn)單介紹一下行內(nèi)元素和塊級(jí)元素重窟。
行內(nèi)元素
- 和其他元素都在同一行
- 高,行高及外邊距和內(nèi)邊距部分可以改變
- 寬度只與內(nèi)容有關(guān)
- 行內(nèi)元素只能容納文本或者其他行內(nèi)元素
- 常用內(nèi)聯(lián)元素:
a
,img
,input
,lable
,select
,span
,textarea
,font
塊級(jí)元素
- 總是在新行上開始触创,占據(jù)一整行
- 高度薪丁,行高以及外邊距和內(nèi)邊距都可控制
- 寬度始終與瀏覽器的寬度一樣,與內(nèi)容無關(guān)
- 可以容納行內(nèi)元素和其他塊級(jí)元素
- 常用的塊級(jí)元素:
div
,p
,table
,form
,h1
,h2
,h3
,h4
,h5
,h6
,dl
,ol
,ul
,li
居中方式分為三種:水平居中灭衷,垂直居中次慢,水平垂直居中。
1翔曲、水平居中
1.1迫像、行內(nèi)元素水平居中
利用text-align: center
可以實(shí)現(xiàn)在塊級(jí)元素內(nèi)部的行內(nèi)元素水平居中。
此方法對(duì)行內(nèi)元素(inline)部默,行內(nèi)塊(inline-block)侵蒙,行內(nèi)表(inline-table),inline-flex元素水平居中都有效傅蹂。
<div class="center-text">
簡(jiǎn)單是穩(wěn)定的前提纷闺。
</div>
div {
height:60px;
border: 2px dashed #f69c55;
}
.center-text {
text-align: center;
}
1.2、塊級(jí)元素水平居中
通過把固定寬度的塊級(jí)元素的margin-left
和margin-right
設(shè)成auto份蝴,就可以使塊級(jí)元素水平居中犁功。
<div>
<p class="center-block">
簡(jiǎn)單不先于復(fù)雜,而是在復(fù)雜之后婚夫。
</p>
</div>
div {
height:100px;
border: 2px dashed #f69c55;
}
.center-block {
margin: 0 auto;
width: 8rem;
padding:1rem;
color:#fff;
background:#000;
}
1.3浸卦、多塊級(jí)元素水平居中
利用inline-block
如果一行中有兩個(gè)或兩個(gè)以上的塊級(jí)元素,通過設(shè)置塊級(jí)元素的顯示類型為inline-block和父容器的text-align屬性從而使多塊級(jí)元素水平居中案糙。
<div class="container">
<div class="inline-block">
簡(jiǎn)單不先于復(fù)雜
</div>
<div class="inline-block">
而是在復(fù)雜之后
</div>
<div class="inline-block">
簡(jiǎn)單不先于復(fù)雜限嫌,而是在復(fù)雜之后。
</div>
</div>
.container {
height:100px;
padding: 8px;
text-align: center;
border: 2px dashed #f69c55;
}
.inline-block {
padding: 8px;
width: 4rem;
margin: 0 8px;
color: #fff;
background: #000;
display: inline-block;
}
.container >div:first-child {
height: 45px;
}
.container >div:nth-of-type(2) {
height: 45px;
}
利用displa: flex
利用彈性布局(flex)时捌,實(shí)現(xiàn)水平居中怒医,其中justify-content
用于設(shè)置彈性盒子元素在主軸(橫向)方向上的對(duì)齊方式。
<div class="flex-center">
<div>
簡(jiǎn)單不先于復(fù)雜奢讨。
</div>
<div>
簡(jiǎn)單不先于復(fù)雜稚叹,而是在復(fù)雜之后。
</div>
<div>
而是在復(fù)雜之后。
</div>
</div>
.flex-center {
padding: 8px;
display: flex;
justify-content: center;
align-items:flex-end;
border: 2px dashed #f69c55;
}
.flex-center >div {
padding: 8px;
width: 4rem;
margin: 0 8px;
color: #fff;
background: #000;
}
.flex-center >div:first-child {
height: 45px;
}
.flex-center >div:last-child {
height: 45px;
}
-
flex-direction
決定主軸的方向(即項(xiàng)目的排列方向) -
flex-wrap
如果一條軸線排列不下扒袖,如何換行 -
justify-content
定義了項(xiàng)目在主軸上的對(duì)齊方式 -
align-items
定義項(xiàng)目在交叉軸上如何對(duì)齊
Flex布局教程:http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html
2塞茅、垂直居中
2.1、單行行內(nèi)元素垂直居中
通過設(shè)置內(nèi)聯(lián)元素的高度(height)和行高(line-height)相等季率,從而使元素垂直居中野瘦。
<div id="box">
軟件在能夠復(fù)用前必須先能用。
</div>
#box {
height: 120px;
line-height: 120px;
border: 2px dashed #f69c55;
}
2.2飒泻、多行元素垂直居中
利用表格布局
利用表布局的vertical-align: middle
可以實(shí)現(xiàn)子元素的垂直居中 缅刽。
<div class="center-table">
<p class="v-cell">
The more technology you learn,<br>
the more you realize how little you know.
</p>
</div>
.center-table {
display: table;
height: 140px;
border: 2px dashed #f69c55;
}
.v-cell {
display: table-cell;
vertical-align: middle;
}
利用flex布局
利用flex布局實(shí)現(xiàn)垂直居中,其中flex-direction: column
定義主軸方向?yàn)榭v向蠢络。flex是在CSS3中定義衰猛,在較老的瀏覽器中存在兼容問題。
<div class="center-flex">
<p>
Dance like nobody is watching,<br>
code like everybody is.
</p>
</div>
.center-flex {
height: 140px;
display: flex;
flex-direction: column;
justify-content: center;
border: 2px dashed #f69c55;
}
2.3刹孔、塊級(jí)元素垂直居中
固定高度的塊級(jí)元素
已知居中元素的高度和寬度啡省,垂直居中問題就很簡(jiǎn)單。通過絕對(duì)定位元素距離頂部50%髓霞,并設(shè)置margin-top向上偏移元素高度的一半卦睹,就可實(shí)現(xiàn)垂直居中。
<div class="parent">
<div class="child">控制復(fù)雜性是計(jì)算機(jī)編程的本質(zhì)方库。</div>
</div>
.parent {
height: 140px;
position: relative;
border: 2px dashed #f69c55;
}
.child {
position: absolute;
top: 50%;
height: 100px;
margin-top: -50px;
color:#fff;
background: #000;
}
未知高度的塊級(jí)元素
當(dāng)垂直居中的塊級(jí)元素高度未知時(shí)结序,可以借助CSS3中的transform屬性向Y軸反向偏移50%的方法實(shí)現(xiàn)垂直居中,部分瀏覽器可能存在兼容性問題纵潦。
<div class="parent">
<div class="child">世界上有 10 種人徐鹤,懂二進(jìn)制的和不懂二進(jìn)制的。</div>
</div>
.parent {
height: 140px;
position: relative;
border: 2px dashed #f69c55;
}
.child {
position: absolute;
top: 50%;
transform: translateY(-50%);
background: black;
color: #fff;
padding: 1rem;
width: 12rem;
}
3邀层、水平垂直居中
3.1返敬、固定寬高元素水平垂直居中
通過margin平移元素整體寬度的一半,使元素水平垂直居中寥院。
<div class="parent">
<div class="child">控制復(fù)雜性是計(jì)算機(jī)編程的本質(zhì)劲赠。</div>
</div>
.parent {
height: 140px;
position: relative;
border: 2px dashed #f69c55;
}
.child {
width: 200px;
height: 80px;
padding: 10px;
position: absolute;
top: 50%;
left: 50%;
margin: -50px 0 0 -110px;
background: black;
color: #fff;
}
3.2、未知寬高元素水平垂直居中
利用2D變換秸谢,在水平和垂直方向都反向平移寬高的一半凛澎,從而使元素水平垂直居中。
<div class="parent">
<div class="child">當(dāng)你試圖解決一個(gè)你不理解的問題時(shí)估蹄,復(fù)雜化就產(chǎn)成了塑煎。當(dāng)你試圖解決一個(gè)你不理解的問題時(shí),復(fù)雜化就產(chǎn)成了元媚。</div>
</div>
.parent {
height: 140px;
position: relative;
border: 2px dashed #f69c55;
}
.child {
padding: 10px;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
color: #fff;
background: black;
}
3.3轧叽、利用flex布局
利用flex布局,其中justify-content用于設(shè)置或檢索彈性盒子元素在主軸上方向上的對(duì)齊方式刊棕;而align-items屬性定義flex子項(xiàng)在flex容器的當(dāng)前行的側(cè)軸方向上的對(duì)齊方式炭晒。
<div class="parent">
<div class="child">Facebook wasn't built in a day.</div>
</div>
.parent {
height: 140px;
display: flex;
justify-content: center;
align-items: center;
border: 2px dashed #f69c55;
}
.child {
padding: 20px;
background: black;
color: #fff;
}