[問題] CSS的垂直、水平置中

作者: lueichun (no anonymous)   2018-10-05 17:55:32
我在網路上GOOGLE能夠在視窗內,水平和垂直方向都置中的表單:
例如以下:
https://jsfiddle.net/lueichun/bq92w7oa/1/
一開始是<body>下一層的div(<div class="back">)
這個div的css是:
.back {
background: #e2e2e2;
width: 100%;
/* height:100%;*/
position: absolute;
top: 0;
bottom: 0;
}
這樣可以讓這div填滿整個body。我的理解是:
將該div的position設成absolute,就可讓該div的位置相對於body,
然後設定top、bottom都=0,即可讓該div的位置,相對於body,頂端跟底端都是重疊的。
而設定width=100%,則讓該div橫跨整個body。
這樣該div就和body重疊,也就填滿body了。
然後設定再下一層的div(<div class="div-center">):
.div-center {
width: 600px;
height: 400px;
background-color: #fff;
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0;
margin: auto;
}
我想說上一個div是利用position: absolute;top: 0;bottom: 0;
就能設定跟body相對的位置。
那我這邊如果只單純設定position,以及left=0、right=0等值,
該div卻位在左上角,看起來right=0、bottom=0沒有作用。
非得要將上margin=auto,整個div才會置中。
請問如果只是單純設定position、left、right、top這些屬性,為何在這個div就失效呢?
而且margin=auto不是用來設定水平方向置中而已嗎?
為何在這邊也會影響垂直方向置中呢?
感謝
作者: pkro12345 (席龍)   2018-10-06 19:07:00
position預設是static,此時你left、top那些都沒用margin:0 auto;才是水平置中而已 0是指上下margin設成0auto指根據父容器自動調整左右margin都一樣,導致置中效果,margin:auto;指根據父容器調整上下margin一樣,左右margin也一樣,所以才會有水平和垂直置中的效果。
作者: peanut97 (丁丁)   2018-10-05 18:33:00
有設寬跟高,同時又設left:0 以及right :0時,規則會有衝突,只會有left 和寬的屬性有作用。
作者: InfinityGate (小鳥)   2018-10-05 19:24:00
先搞清楚top bottom right left是做什麼的吧這個要絕對定位就top:50% left:50% 然後transform然後margin只有一個參數是把上下左右都設一樣的值只要水平居中應該是margin:0 auto;
作者: casperz (大目)   2018-10-07 13:08:00
要不要改試height: vh100
作者: thethirdfoot (第三隻腳)   2018-10-09 23:26:00
Flexbox 好用
作者: bugworld   2018-10-14 21:19:00
會用Flex真的能拯救你(拍
作者: kawaii98 (kawaii98)   2018-10-19 21:39:00
為什麼不用flex去設定
作者: bubunew (牛同學)   2018-10-30 00:13:00
推flex
作者: Haruna1998 (無聲雨)   2018-11-04 12:39:00
flex會幫你自動調整喔

Links booklink

Contact Us: admin [ a t ] ucptt.com