藉由 Relative Position 與 Absolute Position 搭配,也可排出很多特殊 Layout。
Version
CSS 3
Horizontal Center

CSS 水平置中。
<template>
<div class="box">
<div class="item">
CSS
</div>
</div>
</template>
<style scoped>
.box {
position: relative;
}
.item {
position: absolute;
left: 50%;
transform: translateX(-50%);
}
</style>
第 2 行
<div class="box">
<div class="item">
CSS
</div>
</div>
需使用兩層 HTML。
10 行
.box {
position: relative;
}
設定父層 box style:
position: relative:父層 box 使用 relative position,子層 absolute position 將以此層定位
14 行
.item {
position: absolute;
left: 50%;
transform: translateX(-50%);
}
設定子層 item style:
position: absolute:子層 item 使用 absolute positionleft: 50%:left座標為50%,此為item左側位置,並不算水平置中transform: translateX(-50%):將item左移本身 width 的50%,此時才算真正水平置中
Horizontal Left

CSS 水平靠左。
<template>
<div class="box">
<div class="item">
CSS
</div>
</div>
</template>
<style scoped>
.box {
position: relative;
}
.item {
position: absolute;
left: 0;
}
</style>
第 2 行
<div class="box">
<div class="item">
CSS
</div>
</div>
需使用兩層 HTML。
10 行
.box {
position: relative;
}
設定父層 box style:
position: relative:父層 box 使用 relative position,子層 absolute position 將以此層定位
14 行
.item {
position: absolute;
left: 0;
}
設定子層 item style:
position: absolute:子層 item 使用 absolute positionleft: 0:設定left為0,相當於水平靠左
Horizontal Right

CSS 水平靠右。
<template>
<div class="box">
<div class="item">
CSS
</div>
</div>
</template>
<style scoped>
.box {
position: relative;
}
.item {
position: absolute;
right: 0;
}
</style>
第 2 行
<div class="box">
<div class="item">
CSS
</div>
</div>
需使用兩層 HTML。
10 行
.box {
position: relative;
}
設定父層 box style:
position: relative:父層 box 使用 relative position,子層 absolute position 將以此層定位
14 行
.item {
position: absolute;
right: 0;
}
設定子層 item style:
position: absolute:子層 item 使用 absolute positionright: 0:設定right為0,相當於水平靠右
Vertical Center

CSS 垂直置中。
<template>
<div class="box">
<div class="item">
CSS
</div>
</div>
</template>
<style scoped>
.box {
position: relative;
height: 100vh;
}
.item {
position: absolute;
top: 50%;
transform: translateY(-50%);
}
</style>
第 2 行
<div class="box">
<div class="item">
CSS
</div>
</div>
需使用兩層 HTML。
10 行
.box {
position: relative;
height: 100vh;
}
設定父層 box style:
position: relative:父層 box 使用 relative position,子層 absolute position 將以此層定位height: 100vh:設定 height 為整個 browser 高度
水平置中時不必設定
width,因為 block 預設就是佔據一整列,但height預設只是 content 高度,因此要特別設定才能垂直置中
15 行
.item {
position: absolute;
top: 50%;
transform: translateY(-50%);
}
設定子層 item style:
position: absolute:子層 item 使用 absolute positiontop: 50%:top座標為50%,此為item上側位置,並不算垂直置中transform: translateY(-50%):將item上移本身 height 的50%,此時才算真正垂直置中
Vertical Top

CSS 垂直靠上。
<template>
<div class="box">
<div class="item">
CSS
</div>
</div>
</template>
<style scoped>
.box {
position: relative;
height: 100vh;
}
.item {
position: absolute;
top: 0;
}
</style>
第 2 行
<div class="box">
<div class="item">
CSS
</div>
</div>
需使用兩層 HTML。
10 行
.box {
position: relative;
}
設定父層 box style:
position: relative:父層 box 使用 relative position,子層 absolute position 將以此層定位
15 行
.item {
position: absolute;
top: 0;
}
設定子層 item style:
position: absolute:子層 item 使用 absolute positiontop: 0:設定top為0,相當於垂直靠上
Vertical Bottom

CSS 垂直靠下。
<template>
<div class="box">
<div class="item">
CSS
</div>
</div>
</template>
<style scoped>
.box {
position: relative;
height: 100vh;
}
.item {
position: absolute;
bottom: 0;
}
</style>
第 2 行
<div class="box">
<div class="item">
CSS
</div>
</div>
需使用兩層 HTML。
10 行
.box {
position: relative;
}
設定父層 box style:
position: relative:父層 box 使用 relative position,子層 absolute position 將以此層定位
15 行
.item {
position: absolute;
bottom: 0;
}
設定子層 item style:
position: absolute:子層 item 使用 absolute positionbottom: 0:設定bottom為0,相當於垂直靠下
Horizontal / Vertical Center

CSS 水平垂直置中。
<template>
<div class="box">
<div class="item">
CSS
</div>
</div>
</template>
<style scoped>
.box {
position: relative;
height: 100vh;
}
.item {
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%);
}
</style>
第 2 行
<div class="box">
<div class="item">
CSS
</div>
</div>
需使用兩層 HTML。
10 行
.box {
position: relative;
height: 100vh;
}
設定父層 box style:
position: relative:父層 box 使用 relative position,子層 absolute position 將以此層定位height: 100vh:設定 height 為整個 browser 高度
水平置中時不必設定
width,因為 block 預設就是佔據一整列,但height預設只是 content 高度,因此要特別設定才能垂直置中
15 行
.item {
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%);
}
設定子層 item style:
position: absolute:子層 item 使用 absolute positionleft: 50%:left座標為50%,此為item左側位置,並不算水平置中top: 50%:top座標為50%,此為item上側位置,並不算垂直置中transform: translate(-50%):將item同時上移本身 height 的50%,左移本身 width 的50%,此時才算真正水平垂直置中
Conclusion
- 當使用 relative position 時,常需要兩層 HTML,外層使用 relative,內層使用 absolute
- 當只是 right、left、top 與 bottom 時,可簡單使用
right、left、top與bottom為0實現 - 若要求 center 時,則必須靠
transform與translate()微調之