๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
CSS

[CSS] ์ด๋ฏธ์ง€ ์Šคํ”„๋ผ์ดํŠธ + ๋ฐฑ๊ทธ๋ผ์šด๋“œ & IR ํšจ๊ณผ

by ์ฝ”๋”ฉ๊ณต์ฑ… 2022. 8. 20.
๋ฐ˜์‘ํ˜•

์ด๋ฏธ์ง€ ์Šคํ”„๋ผ์ดํŠธ

์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ์ง€๋‚œ๋ฒˆ์— ์˜ฌ๋ ธ๋˜ ์ด๋ฏธ์ง€ ์œ ํ˜• 03 ํฌ์ŠคํŒ…์—์„œ ํ™œ์šฉ๋œ ์ด๋ฏธ์ง€ ์Šคํ”„๋ผ์ดํŠธ ํšจ๊ณผ์™€ ๋ฐฑ๊ทธ๋ผ์šด๋“œ, IR ํšจ๊ณผ์— ๋Œ€ํ•ด ์‹ฌ๋„ ์žˆ๊ฒŒ ๋‹ค๋ค„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.


์ด๋ฏธ์ง€ ์Šคํ”„๋ผ์ดํŠธ(Image Sprite)๋ž€?

์—ฌ๋Ÿฌ ์ด๋ฏธ์ง€๋ฅผ ํ•˜๋‚˜์˜ ์ด๋ฏธ์ง€๋กœ ํ•ฉ์ณ์„œ ๊ด€๋ฆฌํ•˜๋Š” ์ด๋ฏธ์ง€๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ์›น์„ ์ œ์ž‘ํ•˜๋‹ค๋ณด๋ฉด ์‚ฌ์šฉ๋˜๋Š” ์ด๋ฏธ์ง€ ์ˆ˜๋Š” ๊ธฐํ•˜๊ธ‰์ˆ˜์ ์œผ๋กœ ์ฆ๊ฐ€ํ•˜๊ฒŒ ๋  ๊ฒƒ์ด๋ฉฐ ๊ทธ๋งŒํผ ์›น ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์„œ๋ฒ„์— ์š”์ฒญํ•ด์•ผ ํ•  ์ด๋ฏธ์ง€์˜ ์ˆ˜๊ฐ€ ๋Š˜์–ด๋‚˜๊ฒŒ ๋˜๋ฏ€๋กœ ๋กœ๋”ฉ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๊ฒŒ ๋œ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋ฏธ์ง€ ์Šคํ”„๋ผ์ดํŠธ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์š”์ฒญํ•ด์•ผ ํ•  ์ด๋ฏธ์ง€์˜ ์ˆ˜๋ฅผ ์ค„์—ฌ ๋กœ๋”ฉ ์‹œ๊ฐ„์„ ์ ˆ์•ฝํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

Figma ์˜ˆ์ œ

๋‹ค์Œ ์˜ˆ์ œ๋Š” SNS ๊ณต์œ  ๊ธฐ๋Šฅ์„ ์œ„ํ•œ ์•„์ด์ฝ˜(36x36px ์‚ฌ์ด์ฆˆ)์„ 14px ๊ฐ„๊ฒฉ์œผ๋กœ ๋–จ์–ด๋œจ๋ ค ์•„์ด์ฝ˜ ํ•˜๋‚˜๋‹น 50px์”ฉ ์ฐจ์ง€ํ•˜๋„๋ก ๋ ˆ์ด์•„์›ƒ์„ ์งœ ๋†“์€ ์ด๋ฏธ์ง€ ์Šคํ”„๋ผ์ดํŠธ ์˜ˆ์ œ์ด๋‹ค. ํ•ด๋‹น ์ด๋ฏธ์ง€ ์Šคํ”„๋ผ์ดํŠธ ํ”„๋ ˆ์ž„์„ SVG ํŒŒ์ผ๋กœ ์ถ”์ถœํ•˜์—ฌ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.

HTML ์ฝ”๋“œ ์˜ˆ์ œ

Figma ์˜ˆ์ œ์—์„œ์ฒ˜๋Ÿผ ์•„์ด์ฝ˜ ์—ฌ๋Ÿฌ๊ฐœ๋ฅผ ๋ฐฐ์น˜ํ•œ ํ›„ SVG ํŒŒ์ผ๋กœ ๋ฌด์‚ฌํžˆ ์ถ”์ถœํ•ด๋ƒˆ๋‹ค๋ฉด ์ด์ œ HTML ์˜์—ญ์— ์•„๋ž˜์™€ ๊ฐ™์ด ์ฝ”๋”ฉํ•˜๋„๋ก ํ•œ๋‹ค.

<div class="image__sns">
    <a href="#" class="link"><span class="ir">๊ณต์œ ํ•˜๊ธฐ</span></a>
    <a href="#" class="link"><span class="ir">Twitter</span></a>
    <a href="#" class="link"><span class="ir">Instagram</span></a>
    <a href="#" class="link"><span class="ir">YouTube</span></a>
    <a href="#" class="link"><span class="ir">Facebook</span></a>
</div>

CSS ์ฝ”๋“œ ์˜ˆ์ œ

์ด์ œ CSS ์ฝ”๋“œ์—์„œ ๋ณธ๊ฒฉ์ ์œผ๋กœ ์ด๋ฏธ์ง€ ์Šคํ”„๋ผ์ดํŠธ์™€ IR ํšจ๊ณผ, ๋ฐฑ๊ทธ๋ผ์šด๋“œ ํšจ๊ณผ๋ฅผ ํ™œ์šฉํ•ด๋ณด์ž.

01. ๋จผ์ € ์ถœ๋ ฅํ•ด์ฃผ๊ณ ์ž ํ•˜๋Š” image__sns ํƒœ๊ทธ์˜ a ์˜์—ญ์— ๋ฐฑ๊ทธ๋ผ์šด๋“œ ํšจ๊ณผ๋กœ Figma๋กœ ์ƒ์„ฑํ•œ ์ด๋ฏธ์ง€ ์Šคํ”„๋ผ์ดํŠธ์šฉ SVG ํŒŒ์ผ์„ ์ถœ๋ ฅ์‹œ์ผœ์ฃผ๋„๋ก ํ•œ๋‹ค.

02. ๊ทธ๋Ÿฐ ๋‹ค์Œ nth-child๋ฅผ ์ด์šฉํ•ด background-position์„ -50px ๋‹จ์œ„๋กœ ์˜ฎ๊ฒจ์ฃผ๋ฉด์„œ ๊ฐ๊ฐ์˜ ๋‹ค๋ฅธ ์•„์ด์ฝ˜๋“ค์„ ์ถœ๋ ฅ์‹œ์ผœ์ค€๋‹ค.

03. ๊ทธ๋Ÿฐ ๋‹ค์Œ IR ํšจ๊ณผ๋ฅผ ์ด์šฉํ•ด ๋ฐฉ๊ธˆ ์ „ HTML ์ฝ”๋“œ ์˜ˆ์ œ์—์„œ ์ž…๋ ฅํ•ด๋’€๋˜ ํ…์ŠคํŠธ๋ฅผ ๋ณด์ด์ง€ ์•Š๋„๋ก ์ž‘์—…ํ•œ๋‹ค. ์ด๋Š” ์‹œ๊ฐ ์žฅ์• ์ธ์šฉ ์Šคํฌ๋ฆฐ ๋ฆฌ๋”๊ธฐ์—๋Š” ํ…์ŠคํŠธ๊ฐ€ ์ฝํžˆ๋„๋ก ํ•˜๋ฉด์„œ ๋™์‹œ์— ๋น„์žฅ์• ์ธ๋“ค์—๊ฒŒ๋Š” ํ…์ŠคํŠธ๊ฐ€ ๋ณด์ด์ง€ ์•Š๋„๋ก ํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค.

.image__sns a {
    width: 36px;
    height: 36px;
    background: #fff;
    border-radius: 50%;
    display: block;
    margin-bottom: 5px;
    background: url(img/image_bg03_icon.svg);   /* ๋ฐฑ๊ทธ๋ผ์šด๋“œ๋กœ ์•„์ด์ฝ˜ 5๊ฐœ ๋งŒ๋“ ๊ฑฐ ์ถœ๋ ฅํ•˜๊ธฐ */
}

/* ์ด๋ฏธ์ง€ ์Šคํ”„๋ผ์ดํŠธ */
/* ์•„์ด์ฝ˜ 5๊ฐœ๋ฅผ ์ด์–ด ๋งŒ๋“  ํ”„๋ ˆ์ž„์„ SVG๋กœ ์ถ”์ถœํ•˜์—ฌ ๊ทธ ์ขŒํ‘œ๊ฐ’์„ ์•„๋ž˜์™€ ๊ฐ™์ด
    ์˜ฎ๊ฒจ๊ฐ€๋ฉฐ ์•„์ด์ฝ˜ ํ•˜๋‚˜์”ฉ ๋ณด์ด๋„๋ก ํ•˜๋Š” ๊ธฐ๋ฒ• */
.image__sns a:nth-child(1) {    
    /* ์ฒซ ๋ฒˆ์งธ ์•„์ด์ฝ˜์€ ๊ทธ๋Œ€๋กœ */
}
.image__sns a:nth-child(2) {
    background-position: -50px 0;
}
.image__sns a:nth-child(3) {
    background-position: -100px 0;
}
.image__sns a:nth-child(4) {
    background-position: -150px 0;
}
.image__sns a:nth-child(5) {
    background-position: -200px 0;
}

/* ir ํšจ๊ณผ (์ด๋ฏธ์ง€ ๋Œ€์ฒด ํšจ๊ณผ == alt) */
/* ํ™”๋ฉด์ƒ์—์„œ๋Š” ์•ˆ๋‚˜์˜ค๊ฒŒ ํ•จ๊ณผ ๋™์‹œ์— ์Šคํฌ๋ฆฐ๋ฆฌ๋”๊ธฐ์—๋Š” ์ฝํžˆ๊ฒŒ ํ•˜๋Š” ์ž‘์—… */
.ir {
    display: block;
    overflow: hidden;
    font-size: 0;
    line-height: 0;
    text-indent: -9999px;
}

์ฝ”๋“œํŽœ ๊ฒฐ๊ณผ

์‚ฌ์šฉ๋œ SVG ํŒŒ์ผ

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€


Reference Book

JavaScript
HTML
CSS
๊ด‘๊ณ  ์ค€๋น„์ค‘์ž…๋‹ˆ๋‹ค.