๐จ CSS ์์ด์ค๋ฒ๊ทธ: HTML ์์ด ์์ CSS๋ง์ผ๋ก ๋ง๋ ๋ฉ์ง ๋น์ฐ ์ผ๋ฌ์คํธ ๐จ
SEO ํค์๋: CSS ์์ด์ค๋ฒ๊ทธ, CSS ์ ๋๋ฉ์ด์ , ํ๋ก ํธ์๋ ํธ๋ฆญ
# ๐ ์๋ก โ โHTML ์์ด ๊ทธ๋ฆผ์ ๊ทธ๋ฆด ์ ์์๊น?โ
์น ํ๋ก ํธ์๋ ๊ฐ๋ฐ์ ์์ํ ์ง ์ผ๋ง ์ ๋ ์ด๋ณด๋ผ๋ฉด, HTML์ด ์์ผ๋ฉด ํ๋ฉด์ ์๋ฌด ๊ฒ๋ ํ์๋์ง ์์ ๊ฑฐ๋ผ๊ณ ์๊ฐํ๊ธฐ ์ฝ์ต๋๋ค. ๊ทธ๋ฐ๋ฐ CSS๋ง์ ์ฌ์ฉํด ๋ณต์กํ ๊ทธ๋ํฝ์ ๊ตฌํํ๋ค๋ฉด ์ด๋จ๊น์? ์ต๊ทผ ๊ฐ๋ฐ์ ์ปค๋ฎค๋ํฐ์์ ํ์ ๊ฐ ๋ CSS Iceberg ์์ ๋ ๋ฐ๋ก ๊ทธ๋ฐ ๋์ ์ ์ฑ๊ณต์ํจ ์ํ์ ๋๋ค.
์ด ๊ธ์์๋ HTML ์์ด ์์ CSS๋ง์ผ๋ก ๋น์ฐ ์ผ๋ฌ์คํธ๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋จ๊ณ๋ณ๋ก ํ์ด๋ณด๊ณ , ์ค์ ์ฝ๋์ ํจ๊ป ์ดํดํ๊ธฐ ์ฌ์ด ์ค๋ช ์ ์ ๊ณตํฉ๋๋ค.
# ๐งฉ ๋ณธ๋ก
# 1๏ธโฃ ํ๋ก์ ํธ ์ค๋น โ ๊ธฐ๋ณธ ํ์ผ ๊ตฌ์กฐ ๋ง๋ค๊ธฐ
text
project/
โ
โโ index.html โ ๋น์๋๊ฑฐ๋ ์ต์ํ <style> ํ๊ทธ๋ง ํฌํจ
โโ style.css โ ๋ชจ๋ ์คํ์ผ์ ์ฌ๊ธฐ์ ์์ฑ
index.html์ ๋น ํ์ผ์ด์ง๋ง ๋ธ๋ผ์ฐ์ ๊ฐ CSS๋ฅผ ๋ก๋ํ๋๋ก<link rel='stylesheet' href='style.css'>๋ฅผ ํ ์ค๋ง ๋ฃ์ด ์ฃผ์ธ์.ํต์ฌ์ HTML ์์๋ฅผ ์ ํ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ ๋๋ค. ๋ชจ๋ ์๊ฐ ์์๋
:root,::before,::after๋ฑ ๊ฐ์ ์ ํ์๋ฅผ ํ์ฉํด ๊ตฌํํฉ๋๋ค.
# 2๏ธโฃ ๊ฐ์ ์์์ clip-path ๋ก ๋น์ฐ ํํ ๋ง๋ค๊ธฐ
CSS ๊ฐ์ ์์(::before, ::after)๋ ์ค์ DOM์ ์กด์ฌํ์ง ์์ง๋ง, ์๊ฐ์ ์ธ ๋ ์ด์ด๋ฅผ ์ถ๊ฐํ ๋ ์ ์ฉํฉ๋๋ค.
css
/* ๊ธฐ๋ณธ ๋ฐฐ๊ฒฝ */
body {
margin: 0;
height: 100vh;
background: linear-gradient(to bottom, #87ceeb, #fff);
}
/* ๋น์ฐ ์ปจํ
์ด๋ โ ์ค์ ์์๋ ํ๋๋ฟ */
.iceberg {
position: absolute;
bottom: 0;
left: 50%;
width: 200px;
height: 150px;
transform: translateX(-50%);
background: #e0f7fa;
}
/* ๋น์ฐ ์์ชฝ(๋์ ๋ณด์ด๋ ๋ถ๋ถ) */
.iceberg::before {
content: '';
position: absolute;
top: -80px;
left: 0;
width: 100%;
height: 120px;
background: #fff;
clip-path: polygon(0% 100%, 20% 0%, 40% 30%, 60% 0%, 80% 30%, 100% 0%, 100% 100%);
}
/* ๋น์ฐ ์๋์ชฝ(์จ์ ๋ถ๋ถ) */
.iceberg::after {
content: '';
position: absolute;
bottom: -70px;
left: -30px;
width: 260px;
height: 100px;
background: #b2ebf2;
clip-path: polygon(0% 0%, 30% 100%, 70% 0%, 100% 100%, 100% 0%);
}
clip-path๋ฅผ ์ด์ฉํด ๋ค๊ฐํ ํํ๋ฅผ ์ ์ํ๊ณ , ์ด๋ฅผ ๋น์ฐ์ ๋์ ๋ณด์ด๋ ๋ถ๋ถ๊ณผ ๋ฌผ์์ ๊ฐ๋ผ์์ ๋ถ๋ถ์ผ๋ก ๋๋๋๋ค.::before์::after๋ก ๊ฐ๊ฐ ์์ ์๋ ๋ ์ด์ด๋ฅผ ๊ฒน์ณ์ ์ ์ฒด๊ฐ์ ์ค๋๋ค.
# 3๏ธโฃ ๋ถ๋๋ฌ์ด ์์ง์ โ @keyframes ๋ก ํ๋์ ๋น์ฐ ํ๋ค๊ธฐ
์๊ฐ์ ์ธ ํจ๊ณผ๋ฅผ ๋ํ๋ ค๋ฉด CSS ์ ๋๋ฉ์ด์ ์ ์ ์ฉํฉ๋๋ค. ์ฌ๊ธฐ์๋ ํ๋๊ฐ ์ด์ง ์์ง์ด๊ณ , ๋น์ฐ์ด ๋ฐ๋์ ํ๋ค๋ฆฌ๋ ๋ชจ์ต์ ๊ตฌํํฉ๋๋ค.
css
/* ํ๋ ์ ๋๋ฉ์ด์
*/
@keyframes wave {
0% { transform: translateX(0); }
50% { transform: translateX(-20px); }
100% { transform: translateX(0); }
}
/* ๋น์ฐ ํ๋ค๋ฆผ */
@keyframes sway {
0% { transform: rotate(0deg); }
50% { transform: rotate(2deg); }
100% { transform: rotate(0deg); }
}
/* ์ ์ฉ */
body::after {
content: '';
position: absolute;
bottom: 0;
left: 0;
width: 100%;
height: 30vh;
background: radial-gradient(circle at 50% 0, #fff, #87ceeb);
animation: wave 4s infinite ease-in-out;
}
.iceberg {
animation: sway 6s infinite ease-in-out;
}
body::after๋ก ๋ง๋ ํ๋๋ ์ํ ์ด๋๋ง์ผ๋ก๋ ์ถฉ๋ถํ ๋ฌผ๊ฒฐ ํจ๊ณผ๋ฅผ ๋ผ ์ ์์ต๋๋ค.sway์ ๋๋ฉ์ด์ ์ ์์ ํ์ ์ ๋ฐ๋ณตํด ๋น์ฐ์ด ๋ฐ๋์ ์ด์ง ํ๋ค๋ฆฌ๋ ๋ฏํ ๋๋์ ์ค๋๋ค.
# 4๏ธโฃ ๋ฐ์ํ ๋์์ธ โ ๋ทฐํฌํธ์ ๋ง์ถฐ ํฌ๊ธฐ ์กฐ์
๋ชจ๋ฐ์ผ์์๋ ๊นจ์ง์ง ์๊ฒ ํ๋ ค๋ฉด vw(viewport width) ๋จ์๋ฅผ ํ์ฉํฉ๋๋ค.
css
.iceberg {
width: 40vw; /* ํ๋ฉด ๋๋น์ 40% */
height: 30vh; /* ํ๋ฉด ๋์ด์ 30% */
}
์ด๋ ๊ฒ ํ๋ฉด ๋ฐ์คํฌํฑ, ํ๋ธ๋ฆฟ, ์ค๋งํธํฐ ์ด๋ ํ๊ฒฝ์์๋ ๋น์ฐ ๋น์จ์ด ์๋์ผ๋ก ๋ง์ถฐ์ง๋๋ค.
# 5๏ธโฃ ์ค์ ํ โ ๋๋ฒ๊น ๊ณผ ์ฑ๋ฅ ์ต์ ํ
| ํ | ๋ด์ฉ |
|---|---|
| ๊ฐ์ ์์ ํ์ธ | ๋ธ๋ผ์ฐ์ ๊ฐ๋ฐ์ ๋๊ตฌ์์ ::before, ::after ๊ฐ ์ ์ฉ๋ ์์๋ฅผ ์ง์ ์ ํํด ์์ยทํฌ๊ธฐยท์์น๋ฅผ ์กฐ์ ํฉ๋๋ค. |
| clip-path ์ง์ | ์ต์ ๋ธ๋ผ์ฐ์ ๋ ๋๋ถ๋ถ ์ง์ํ์ง๋ง, ๊ตฌ๋ฒ์ IE์์๋ ๋์ํ์ง ์์ผ๋ ํ์ ์ svg ํด๋ฆฌ๊ณค ๋์ฒด๋ฅผ ๊ณ ๋ คํฉ๋๋ค. |
| ์ ๋๋ฉ์ด์
์ต์ ํ | transform ๊ณผ opacity ๋ง ์ฌ์ฉํ๋ฉด GPU ๊ฐ์์ด ์ ์ฉ๋ผ ๋ถ๋๋ฌ์ด ๋ ๋๋ง์ด ๊ฐ๋ฅํฉ๋๋ค. |
# โ ๊ฒฐ๋ก โ ์ด์ ๋น์ ์ฐจ๋ก!
์ด๋ฒ ํฌ์คํ
์ ํตํด HTML ์์ด ์์ CSS๋ง์ผ๋ก ๋ณต์กํ ์ผ๋ฌ์คํธ์ ์ ๋๋ฉ์ด์
์ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์ ์ต๋๋ค. clip-path, ::before/::after, @keyframes ๊ฐ์ CSS ๊ธฐ๋ณธ ๊ธฐ๋ฅ๋ง์ผ๋ก๋ ์ถฉ๋ถํ ๋์ ๋๋ UI๋ฅผ ๋ง๋ค ์ ์๋ค๋ ์ , ๊ธฐ์ตํด ์ฃผ์ธ์!
์ค์ ๊ณผ์ : ์ค๋ ๋ฐฐ์ด ๋ด์ฉ์ ๋ฐํ์ผ๋ก ์์ ๋ง์ ์์ด์ค๋ฒ๊ทธ ํน์ ๋ค๋ฅธ ์์ฐ ํ๊ฒฝ์ ๋ง๋ค์ด ๋ณด์ธ์. ๋ง๋ ์ํ์ SNS์
#CSSIcebergํด์ํ๊ทธ์ ํจ๊ป ๊ณต์ ํ๋ฉด, ๋ค๋ฅธ ๊ฐ๋ฐ์๋ค๊ณผ ์์ด๋์ด๋ฅผ ๊ตํํ ์ ์์ต๋๋ค.
๊ถ๊ธํ ์ ์ด๋ ์ถ๊ฐ์ ์ธ ํธ๋ฆญ์ด ํ์ํ๋ฉด ๋๊ธ๋ก ์๋ ค ์ฃผ์ธ์. ์ฌ๋ฌ๋ถ์ ๋ฉ์ง CSS ์ํ์ ๊ธฐ๋ํฉ๋๋ค! ๐
Comments
Join the discussionNo comments yet. Be the first to comment.