Skip to main content

๐ŸŽจ CSS ์•„์ด์Šค๋ฒ„๊ทธ: HTML ์—†์ด ์ˆœ์ˆ˜ CSS๋งŒ์œผ๋กœ ๋งŒ๋“  ๋ฉ‹์ง„ ๋น™์‚ฐ ์ผ๋Ÿฌ์ŠคํŠธ ๐ŸŽจ

Published 3 min readMarkdown

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 ์ž‘ํ’ˆ์„ ๊ธฐ๋Œ€ํ•ฉ๋‹ˆ๋‹ค! ๐Ÿš€

No comments yet. Be the first to comment.

More from this blog