๐น๏ธ CSS ์์ ์ํ/์์ง ์ ๋ ฌ ๊ธฐ๋ฒ ๋ชจ์
์ํ ์ค์ ์ ๋ ฌ
๐ข inline / inline-block ์์
์ ๋ ฌ ๋์ ์์(inline)์ ๋ถ๋ชจ ์์(block)์ text-align: center;๋ฅผ ์ง์ ํ๋ค.
- inline, inline-block, inline-table, inline-flex, ๊ธฐํ ๋ฑ๋ฑ์ ์ ์ฉ๋๋ค.
<!-- HTML -->
<nav>
<a href="#">One</a> <!-- aํ๊ทธ๋ inline์์ ์ด๋ค -->
<a href="#">Two</a>
<a href="#">Three</a>
<a href="#">Four</a>
</nav>
<!-- CSS -->
<style>
nav {
text-align: center;
}
</style>
โ
์์์์๊ฐ block์์์ด๋ฉด, ๊ฐ์ ๋ก ์์์์๋ฅผ inline-block์์๋ก ๋ง๋ค์ด์ฃผ๋ ๋ฐฉ๋ฒ๋ ์๋ค.
<!-- HTML -->
<main class="inline-block-center">
<div> I'm an element that is block-like with my siblings and we're centered in a row. </div>
<div> I'm an element that is block-like with my siblings and we're centered in a row. I have more content in me than my siblings do. </div>
<div> I'm an element that is block-like with my siblings and we're centered in a row.
</div>
</main>
<!-- CSS -->
<style>
.inline-block-center {
text-align: center; /* inline์์๋ง ์ ์ฉ๋จ */
}
.inline-block-center div {
display: inline-block; /* block์์์ธ div๋ฅผ inline์ผ๋ก ๋ง๋ค์ด์ค๋ค. */
width: 200px;
text-align: left; /* ์์ ๋ด์ฉ ๊ธ์ ์ ๋ ฌ */
}
</style>
โ
๐ข block ์์
์ ๋ ฌ ๋์ ์์์ ๋๋น(width)๋ฅผ ๋ช ์์ ์ผ๋ก ์ง์ ํ๊ณ margin-right์ margin-left ํ๋กํผํฐ์ auto๋ฅผ ์ง์ ํ๋ค.
(width๋ฅผ ์ง์ ํ์ง ์์ผ๋ฉด, ์ด์ฐจํผ block์์๋ ๊ฐ๋ก๋ฅผ ์ ์ฒด ์ฐจ์งํ๋ ์ค์ ์ ๋ ฌ ์๋ฏธ๊ฐ ์๊ธฐ ๋๋ฌธ์ด๋ค.)
.item {
width: 200px;
margin: 0px auto;
}
โ
๐ข ์ด๋ฏธ์ง
Image๋ ์ผ์ชฝ, ์ค๋ฅธ์ชฝ margin์ auto๋ก ์ค์ ํ๊ณ display: block; ์ผ๋ก ์ค์ ํ๋ฉด ๋๋ค.
img {
display: block;
margin-left: auto;
margin-right: auto;
width: 40%;
}
โ
๐ข Position / Transform ์ด์ฉ
item {
position: relative;
left: 50%;
transform: translateX(-50%);
}
โ
๐ข Flex ์ด์ฉ
.flex-center {
display: flex;
justify-content: center;
}
์์ง ์ค์ ์ ๋ ฌ
๐ข inline / inline-block ์์
- ํ์ค ์ผ ๊ฒฝ์ฐ
disaplay: block ์ค์ ํ height์ line-height๋ฅผ ๊ฐ์ ๊ฐ์ผ๋ก ์ค์ ํ๋ฉด ๋๋ค.
์ด ๋ white-space: nowrap ์์ฑ์ผ๋ก ์๋ ์ค๋ฐ๊ฟ์ด ์๋๋๋ก ํด์ผํ๋ค.
main span {
display: block;
width: 50%;
height: 100px;
line-height: 100px;
white-space: nowrap;
}
โ
- ์ฌ๋ฌ์ค ์ผ ๊ฒฝ์ฐ
.center { /* ๋ถ๋ชจ */
display: table;
}
.center span {
display: table-cell;
vertical-align: middle; /* top, bottom */
}
โ
๐ข block ์์
- ์์ ์์์ ๋์ด๊ฐ ๊ณ ์ ๋์ด ์๋ ๊ฒฝ์ฐ
๋ถ๋ชจ ์์๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ๋ ์์น๋ฅผ ์ง์ ํ๋ค.
.parent {
position: relative;
}
.child {
height: 100px; /* ์์์ ๋์ด๊ฐ ๊ณ ์ */
position: absolute;
top: 50%;
margin-top: -50px; /* ์์์ ๋์ด(100px)์ ๋ฐ ๋งํผ ์๋ก ์ด๋ */
}
โ
- ์์ ์์์ ๋์ด๊ฐ auto ์ธ ๊ฒฝ์ฐ
๋ถ๋ชจ ์์๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ๋ ์์น๋ฅผ ์ง์ ํ๋ค.
.parent {
position: relative;
}
.child {
position: absolute;
top: 50%;
/*์์์ ๋์ด์ ๋ฐ(50%) ๋งํผ ์๋ก ์ด๋*/
transform: translateY(-50%);
}
โ
๐ข Position / Transform ์ด์ฉ
item {
position: relative;
top: 50%;
transform: translateY(-50%);
}
โ
๐ข Flex ์ด์ฉ
๋ถ๋ชจ ์์์ Flexbox layout์ ์ง์ ํ๋ค.
.parent {
display: flex;
/*์์์ ์๋๋ก ์์ง ๋ฐฐ์น*/
flex-direction: column;
/*์ค์์ ๋ ฌ*/
justify-content: center;
}
๐ข ํ ์คํธ ์ธ๋ก ์ ๋ ฌ
a {
height: 130px;
display: table-cell;
vertical-align: middle;
}
์ํ + ์์ง ์ค์ ์ ๋ ฌ
๐ข Position / Transform ์ด์ฉ
- ์์ ์์์ ๋์ด๊ฐ ๊ณ ์ ๋์ด ์๋ ๊ฒฝ์ฐ
.center {
position: relative;
}
.center div {
position: absolute;
width: 300px;
height: 200px;
top: 50%;
left: 50%;
margin: -100px 0 0 -150px; /* margin-top์ width์ ์ ๋ฐ๋งํผ ๋ง์ด๋์ค ์ค์ , */
/* margin-left๋ฅผ height์ ์ ๋ฐ๋งํผ ๋ง์ด๋์ค๋ก ์ค์ */
}
โ
- ์์ ์์์ ๋์ด๊ฐ auto ์ธ ๊ฒฝ์ฐ
.parent {
position: relative;
}
.child {
position: absolute;
top: 50%;
left: 50%;
/*์์์ ๋์ด/๋๋น์ ๋ฐ(50%)๋งํผ ์/์ผ์ชฝ์ผ๋ก ์ด๋*/
transform: translate(-50%, -50%);
}
โ
๐ข Flex ์ด์ฉ
.parent {
display: flex;
justify-content: center; /* ํ๋์ค ๋ฐ์ค ์ ๋ ฌ */
align-items: center; /* ํ๋์ค ์์ดํ
์ ๋ ฌ */
}
โ
๐ข Grid ์ด์ฉ
.wrapper {
display: grid;
place-items: center;
}
์ข / ์ฐ์ธก ์ชฝ์ผ๋ก ์ ๋ ฌ
๐ข inline / inline-block ์์
.container {
text-align: right; /* left */
}
.item { /* inline ์์ */
width: 150px;
display: inline-block; /* block์์์ผ ๊ฒฝ์ฐ ์ผ๋ถ๋ฌ inline-block์ผ๋ก ๋ณ๊ฒฝํด์ค๋ค. */
}
โ
๐ข block ์์
.right {
position: absolute;
right: 0px; /* left: 0px */
}
์ฐธ๊ณ : absolute๋ก ์ค์ ํ element๋ ์ ์ ํ๋ฆ์์ ์ ๊ฑฐ๋์ด ๋ค๋ฅธ element์ ๊ฒน์น ์ ์๋ค.
โ
๐ข float ์ด์ฉ
.right {
float: right; /* left */
width: 300px;
border: 3px solid #73AD21;
padding: 10px;
}
โ
๐ข position ์ด์ฉ
header {
position: relative;
}
nav {
position: absolute;
top: 0;
right: 0; /* left: 0 */
padding: 20px;
}
โ
๐ข Flex (์ฐ์ธก)
header {
display: flex;
justify-content: flex-end /* or space-between; */
}
header {
display: flex;
}
nav {
margin-left: auto;
}
โ
๐ข Grid (์ฐ์ธก)
์์๋ค์ด ๊ฐ๊ธฐ ๋ค๋ฅธ ๊ฐ๋ก๊ธธ์ด๋ฅผ ๊ฐ์ง๊ณ ์์๋ 1fr๋ก ์ค์ ํ๊ณ ์ด๋๋ก ์ฐจ๋ก๋ก ๋ฐฐ์นํ๊ฒ๋๋ฉด, ๋ค๋ฅธ ๊ฐ๋ก๊ธธ์ด๋๋ฌธ์ ์ข์ฐ์ธก ์ ๋ ฌ์ด ๋๊ธฐ๋ ํ๋ค.
header {
display: grid;
grid-auto-flow: column;
grid-template-columns: 1fr;
}
์๋ ์ ๋ ฌ
๐ข position ์์ฑ์ ์ด์ฉํ ์ข์ฐ ์ ๋ ฌ
์ ๋ ์์น ์ง์ ๋ฐฉ์์ผ๋ก ์์นํ ์์๋ ์ ์์ ์ธ ๋ ์ด์์์์ ๋ฒ์ด๋ ๋ค๋ฅธ ์์์ ๊ฒน์น ์ ์๊ฒ ๋๋ค.
๋ฐ๋ผ์ ์ด ํน์ฑ์ ์ด์ฉํ๋ฉด HTML ์์๋ฅผ ์ํ ๋ฐฉํฅ์ผ๋ก ์ข์ฐ ์ ๋ ฌํ ์ ์๋ค.
position ์์ฑ์ ์ด์ฉํ์ฌ ์ ๋ ฌํ ๊ฒฝ์ฐ์๋ <body>์์์ margin๊ณผ padding ์์ฑ๊ฐ์ ์ค์ ํ๋ ๊ฒ์ด ์ข๋ค.
์ด๋ ๊ฒ ํจ์ผ๋ก์จ ์น ๋ธ๋ผ์ฐ์ ๋ง๋ค ๋ ์ด์์์ด ๋ค๋ฅด๊ฒ ๋ณด์ด๋ ๊ฒ์ ๋ฏธ๋ฆฌ ๋ฐฉ์งํ ์ ์๋ค.
body {
padding: 0;
margin: 0;
}
div {
border: 3px solid #4B0082;
width: 300px;
padding: 10px;
margin: 0;
position: absolute;
right: 0; /* ์ฐ์ธก์ ๋ฑ ๋ถ์ด๊ธฐ */
}
โ
โ
๐ข float ์์ฑ์ ์ด์ฉํ ์ข์ฐ ์ ๋ ฌ
float ์์ฑ์ ์ด์ฉํ๋ฉด ์ํ ๋ฐฉํฅ์ผ๋ก ์ข์ฐ ์ ๋ ฌํ ์ ์๋ค.
float ์์ฑ์ ์ด์ฉํ์ฌ ์ ๋ ฌํ ๊ฒฝ์ฐ์๋ <body>์์์ margin๊ณผ padding ์์ฑ๊ฐ์ ์ค์ ํ๋ ๊ฒ์ด ์ข๋ค.
์ด๋ ๊ฒ ํจ์ผ๋ก์จ ์น ๋ธ๋ผ์ฐ์ ๋ง๋ค ๋ ์ด์์์ด ๋ค๋ฅด๊ฒ ๋ณด์ด๋ ๊ฒ์ ๋ฏธ๋ฆฌ ๋ฐฉ์งํ ์ ์๋ค.
body {
padding: 0;
margin: 0;
}
div {
border: 3px solid #4B0082;
width: 350px;
padding: 10px;
margin: 0;
}
div.left {
float: left
}
div.right {
float: right
}
# ์ฐธ๊ณ ์๋ฃ
https://tcpschool.com/css/css_position_align
https://poiemaweb.com/css3-centering
https://cbw1030.tistory.com/21
https://takeu.tistory.com/18
https://www.daleseo.com/css-centering/