根據塊狀元素和行內元素的特性來區分css
塊狀元素:主要特色是能佔據一行,高度行高內邊距外邊距能控制,能容納內聯元素和其餘塊狀元素web
行內元素:不能獨佔一行,隨內容大小而定。沒法設置寬高,設置的外邊距只能在左右上起做用,上下沒有做用佈局
因此要根據元素的特性作的居中flex
父元素是塊狀元素,子元素是行內元素google
水平居中:flexbox
給父元素添加text-align:centerurl
---------------------舉一個栗子---------------------spa
1
2
3
4
5
6
7
8
9
10
11
12
13
|
.parent{
width
:
200px
;
height
:
200px
;
text-align
:
center
;
background
:
#3cffff
;
}
.child{
background
:
#f9ffc3
;
}
<div class=
"parent"
>
<span class=
"child"
>苗嗚嗚</span>
</div>
|
垂直居中:3d
子元素上添加line-height:父元素的高度code
---------------------舉一個栗子---------------------
1
2
3
4
5
6
7
8
9
10
11
|
.parent{
width
:
200px
;
height
:
200px
;
}
.child{
line-height
:
200px
;
}
<div class=
"parent"
>
<span class=
"child"
>苗嗚嗚</span>
</div>
|
以上兩個方法合在一塊兒就是行內元素的垂直居中了
---------------------舉一個栗子---------------------
1
2
3
4
5
6
7
8
9
10
11
12
13
|
.parent{
width
:
200px
;
height
:
200px
;
background
:
#3cffff
;
text-align
:
center
;
}
.child{
line-height
:
200px
;
background
:
#f9ffc3
;
}
<div class=
"parent"
>
<span class=
"child"
>苗嗚嗚</span>
</div>
|
若是是子元素是img,img元素比較特殊,屬於替換內聯元素, line-height對img沒有效果,沒法實現垂直居中
---------------------舉一個栗子---------------------
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
.parent{
width
:
1000px
;
height
:
600px
;
background
:
#3cffff
;
text-align
:
center
;
}
.child{
vertical-align
:
middle
;
}
.child
2
{
height
:
100%
;
width
:
0
;
}
<div class=
"parent"
>
<img class=
"child2"
>
</div>
|
css爲child2的img是起到輔助做用,不要寫src,不然會多一個邊框,其實使用其餘行內元素也行,好比span,只要把該元素的高度設置爲父元素同樣的高度就好了。vertical-align這個屬性的特色,它是相對兄弟級行高(line-height)來定位,它只對行內樣式有效。下面設置一個img只是撐開父元素的行高。
關於內聯元素td的垂直水平居中
---------------------舉一個栗子---------------------
1
2
3
4
5
6
7
8
9
10
11
|
.parent{
width
:
200px
;
height
:
200px
;
text-align
:
center
;
background
:
#3cffff
;
}
<table class=
"parent"
>
<tr>
<td>~喵了個咪~</td>
</tr>
</table>
|
用table-cell ,文字和圖片居中,可是background是鋪滿整個父元素,而不是居中
---------------------舉一個栗子---------------------
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
.parent {
width
:
1000px
;
height
:
600px
;
display
: table;
text-align
:
center
;
background
:
#3cffff
;
}
.child {
display
:
table-cell
;
vertical-align
:
middle
;
margin
:
0
auto
;
background
:
#f9ffc3
;
}
<div class=
"parent"
>
<div class=
"child"
>~喵了個咪~</div>
</div>
|
父元素是塊狀元素,內元素是塊狀元素
1.水平居中
---------------------舉一個栗子---------------------
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
.parent{
width
:
1000px
;
height
:
600px
;
position
:
relative
;
background
:
#3cffff
;
}
.child{
width
:
200px
;
height
:
200px
;
margin
:
0
auto
;
background
:
#f9ffc3
;
}
<div class=
"parent"
>
<div class=
"child"
></div>
</div>
|
2.若是要讓上面的垂直水平居中的話,要多加一個position:absolute,left:0;right:0;top:0;bottom:0;
---------------------舉一個栗子---------------------
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
.parent{
width
:
1000px
;
height
:
600px
;
position
:
relative
;
background
:
#3cffff
;
}
.child{
width
:
200px
;
height
:
200px
;
margin
:
auto
;
position
:
absolute
;
left
:
0
;
right
:
0
;
top
:
0
;
bottom
:
0
;
background
:
#f9ffc3
;
}
<div class=
"parent"
>
<div class=
"child"
></div>
</div>
|
3.藉助其餘元素實現垂直水平居中
記得把輔助元素放在子元素前面哈。
---------------------舉一個栗子---------------------
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
.parent{
position
:
relative
;
width:
1000px
;
height
:
600px
;
}
.child
-2
{
height
:
50%
;
margin-bottom
:
-100px
;
/*是child的(padding+height)/2*/
}
.child{
width
:
200px
;
height
:
200px
;
margin
:
auto
;
}
<div class=
"parent "
>
<div class=
"child-2"
></div>
<div class=
" child"
></div>
</div>
|
4.垂直居中 行內元素 塊狀元素均可以
---------------------舉一個栗子---------------------
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
.parent{
display
:
block
;
position
:
relative
;
width
:
1000px
;
height
:
600px
;
background
:
#3cffff
;
}
.parent:after{
display
: inline-
block
;
vertical-align
:
middle
;
content
:
''
;
height
:
100%
;
background
:
#f9ffc3
;
}
.child{
display
: inline-
block
;
vertical-align
:
middle
;
}
<div class=
"parent"
>
<div class=
"child"
></div>
</div>
|
5.彈性盒式佈局 ie11以上才支持 只針對父元素作了設置,子元素不須要設置。
---------------------舉一個栗子---------------------
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
.parent{
width
:
1000px
;
height
:
1000px
;
display
: -webkit-box;
display
: -moz-box;
display
: -ms-flexbox;
display
: -webkit-flex;
display
: flex;
-webkit-align-items:
center
;
align-items:
center
;
-webkit-justify-
content
:
center
;
/*適用於父元素*/
justify-
content
:
center
;
background
:
#3cffff
;
}
.child{
width
:
200px
;
height
:
200px
;
background
:
#f9ffc3
;
}
<div class=
"parent"
>
<div class=
"child"
></div>
</div>
|
6.使用margin-top;
---------------------舉一個栗子---------------------
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
.parent{
position
:
relative
;
width
:
1000px
;
height
:
600px
;
background
:
#3cffff
;
}
.child{
width
:
200px
;
height
:
200px
;
position
:
absolute
;
top
:
50%
;
left
:
0
;
right
:
0
;
margin
:
auto
;
margin-top
:
-100px
;
background
:
#f9ffc3
;
}
<div class=
"parent"
>
<div class=
"child"
></div>
</div>
|
7.根據上面還有一種傳統的你們都通用的辦法,這個辦法具備兼容性,兼容到ie6
父元素的position和子元素的position不能相同,要麼父元素爲absolute,子元素爲relative,要麼父元素爲relative,子元素爲absolute;
---------------------舉一個栗子---------------------
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
.parent {
width
:
1000px
;
height
:
600px
;
background
:
#c3ffff
;
position
:
relative
;
/*必須加上,不然child不能居中*/
}
.child {
width
:
200px
;
height
:
200px
;
margin
:
-100px
0
0
-100px
;
position
:
absolute
;
left
:
50%
;
top
:
50%
;
background
:
#f9ffc3
;
}
<div class=
"parent"
>
<div class=
"child"
></div>
</div>
|
8.用transform,只設置子元素
---------------------舉一個栗子---------------------
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
.parent{
width
:
1000px
;
height
:
600px
;
background
:
#3cffff
;
}
.child{
width
:
200px
;
height
:
200px
;
position
:
relative
;
top
:
50%
;
left
:
50%
;
transform:translate(
-50%
,
-50%
);
-webkit-transform:translate(
-50%
,
-50%
);
background
:
#f9ffc3
;
}
<div class=
"parent"
>
<div class=
"child"
></div>
</div>
|
9.若是居中是一張圖片的話,其實用background也就能夠了
---------------------舉一個栗子---------------------
1
2
3
4
5
6
|
.parent{
background
:
url
(http://f
5
.topitme.com/
5
/
93
/a
8
/
115632420139
ea
8935
o.jpg)
no-repeat
center
center
#3cffff
;
width
:
1000px
;
height
:
600px
;
}
<div class=
" parent"
></div>
|
就是這樣,我已知的居中方法就這些,若是有人還有更好的方法或者我上面有錯的地方及時提出哈~