⚑

5. Extend

Β 

1. Extend

ExtendλŠ” μ—°κ΄€ μžˆλŠ” μš”μ†Œλ“€λΌλ¦¬ μŠ€νƒ€μΌ μ½”λ“œκ°€ μ€‘λ³΅λœ κ²½μš°μ— μ‚¬μš©λ©λ‹ˆλ‹€. 이미 μŠ€νƒ€μΌμ΄ μž‘μ„±λœ μ„ νƒμžμ˜ 클래슀λ₯Ό extendν•˜κ±°λ‚˜ , %λ₯Ό μ‚¬μš©ν•΄μ„œ λ”°λ‘œ μŠ€νƒ€μΌμ„ μ •μ˜ν•œ ν›„ extendν•˜μ—¬ μ›ν•˜λŠ” μ„ νƒμžμ—κ²Œ μŠ€νƒ€μΌμ„ μ μš©ν•΄ 쀄 수 μžˆμŠ΅λ‹ˆλ‹€.
예λ₯Ό λ“€μ–΄ asideμ•ˆμ— μ‘΄μž¬ν•˜λŠ” λ¦¬μŠ€νŠΈμ— μš”μ†Œλ“€μ„ 클릭할 λ•Œλ§ˆλ‹€ λ³΄μ—¬μ£ΌλŠ” λ“œλ‘­λ©”λ‰΄μ™€ ν”„λ‘œν•„μ„ ν΄λ¦­ν–ˆμ„ λ•Œ, ν”„λ‘œν•„κ³Ό κ΄€λ ¨λœ 메뉴λ₯Ό λ³΄μ—¬μ£ΌλŠ” λ“œλ‘­λ©”λ‰΄κ°€ μžˆλ‹€κ³  ν•©μ‹œλ‹€. μ•ˆμ— λ“€μ–΄μžˆλŠ” λ‚΄μš©λ“€μ€ λ‹€λ₯΄μ§€λ§Œ λ“œλ‘­λ©”λ‰΄λΌλŠ” 연관성을 가진 κ²½μš°μž…λ‹ˆλ‹€.
Sassλ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šκ³  μŠ€νƒ€μΌμ„ μ μš©ν•œλ‹€λ©΄ μƒˆλ‘œμš΄ 클래슀λ₯Ό μ •ν•΄μ„œ μ€‘λ³΅λ˜λŠ” μŠ€νƒ€μΌμ„ λ„£μ–΄μ£Όκ±°λ‚˜, 각각 λ™μΌν•œ μ½”λ“œλ₯Ό μ μ–΄μ„œ μš”μ†Œμ— μŠ€νƒ€μΌμ„ μ μš©ν•  것 μž…λ‹ˆλ‹€. ν•˜μ§€λ§Œ Sass의 Extendλ₯Ό μ‚¬μš©ν•˜λ©΄ μ€‘λ³΅λœ μ½”λ“œλ₯Ό @extendλ₯Ό μ‚¬μš©ν•˜μ—¬ 더 λ‹¨μˆœν•œ μ½”λ“œλ₯Ό μž‘μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • mixinλŠ” (관계 μ—†λŠ”) μ„ νƒμžμ—μ„œ 쑰금 λ‹€λ₯Έ μŠ€νƒ€μΌμ„ μ μš©ν•  λ•Œ μ‚¬μš©
  • extendλŠ” 관계 μžˆλŠ” μ„ νƒμžλ“€μ˜ λ™μΌν•œ μ†ŒμŠ€μ½”λ“œ μ μš©μ‹œ μ‚¬μš©

2. extend ν•˜λŠ” 2가지 방법

2-1. class이름 κ°€μ Έμ˜€κΈ°

기쑴에 μž‘μ„±ν•œ 클래슀 내에 μ½”λ“œλ₯Ό κ°€μ Έμ˜¬ 수 μžˆμŠ΅λ‹ˆλ‹€. @extend 에 클래슀 λͺ…을 ν•¨κ»˜ 적으면, ν΄λž˜μŠ€μ— μžˆλŠ” μ½”λ“œ 전체가 extend λ©λ‹ˆλ‹€.
Β 
// Scss .profile-user { background-image: url("../assets/user.jpg"); background-size: cover; background-position : 50% 50%; border-radius: 50%; width : 50px; height : 50px; } .comment-user { @extend .profile-user; }
/*CSS*/ .profile-user, .comment-user { background-image: url("../assets/user.jpg"); background-size: cover; background-position : 50% 50%; border-radius: 50%; width : 50px; height : 50px; }
.profile-user 클래슀λ₯Ό 가진 둜그인 ν”„λ‘œν•„ user 이미지 λ°•μŠ€κ°€ .comment-userκ°€ λŒ“κΈ€μ„ μž‘μ„±ν•  λ•Œ userμž„μ„ λ‚˜νƒ€λ‚΄μ£ΌλŠ” 이미지 λ°•μŠ€μ™€ μ€‘λ³΅λ˜λŠ” κ²½μš°μž…λ‹ˆλ‹€. .profile-user μ½”λ“œ 전체λ₯Ό .comment-user μ—κ²Œ extend ν•΄μ€λ‹ˆλ‹€.
notion imagenotion image
Β 
⚠️ classλͺ…을 extend ν•˜λŠ” 경우 닀쀑 μ„ νƒμž 클래슀λ₯Ό μ‚¬μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€. (ex. .box .container , .box1 + .box2)
Β 

2-2. %placeholder

% 둜 μ„ νƒμžλ₯Ό λ§Œλ“­λ‹ˆλ‹€. @extendλ₯Ό μ‚¬μš©ν•΄μ„œ μ•žμ„œ %placeholder μŠ€νƒ€μΌ λΈ”λŸ­μ„ 뢈러였면 λ©λ‹ˆλ‹€.
그리고 %μ„ νƒμžλŠ” CSS둜 μ»΄νŒŒμΌλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
Β 
// Scss %base-button { width: 133px; height: 44px; display: flex; justify-content: center; align-items: center; font-size: 14px; border-radius: 10px; } .follow-button { @extend %base-button; background-color: #ffffff; color: #ff375f; border: 3px solid #ff375f; } .message-button { @extend %base-button; background-color: #ff375f; color: white; }
/*CSS*/ .follow-button, .message-button { width: 133px; height: 44px; display: flex; justify-content: center; align-items: center; font-size: 14px; border-radius: 10px; } .follow-button { background-color: #ffffff; color: #ff375f; border: 3px solid #ff375f; } .message-button { background-color: #ff375f; color: white; }
notion imagenotion image
Β 
⚠️Extendλ₯Ό μ‚¬μš©ν•  λ•Œ, ν΄λž˜μŠ€λ³΄λ‹€ %λ₯Ό μ‚¬μš©ν•˜κΈ°λ₯Ό ꢌμž₯ν•©λ‹ˆλ‹€.
Β 

3. μ˜ˆμ‹œ : λͺ¨λ‹¬

μ›ΉνŽ˜μ΄μ§€ μ•ˆμ—μ„œ μƒμ„±λ˜λŠ” μ—¬λŸ¬κ°€μ§€ λͺ¨λ‹¬μ— λŒ€ν•œ μ½”λ“œμž…λ‹ˆλ‹€.
%λ₯Ό μ‚¬μš©ν•˜μ—¬ μŠ€νƒ€μΌ λΈ”λŸ­μ„ λ§Œλ“€κ³ , 각각의 λͺ¨λ‹¬μ— μŠ€νƒ€μΌμ„ μ μš©ν•΄μ€λ‹ˆλ‹€.
// Scss %modal { position: relative; top: 50%; left: 50%; transform: translate(-50%, -50%); background-color: #fff; border-radius: 6px; } .login-modal { @extend %modal; width: 272px; height: 405px; padding: 10px 20px; } .event-modal { @extend %modal; width: 340px; height: 160px; padding: 18px; }
/*CSS*/ .login-modal, .event-modal { position: relative; top: 50%; left: 50%; transform: translate(-50%, -50%); background-color: #fff; border-radius: 6px; } .login-modal { width: 272px; height: 405px; padding: 10px 20px; } .event-modal { width: 340px; height: 160px; padding: 18px; }
Β 

4. μ˜ˆμ‹œ : 포토 링크 λ°•μŠ€

두 개의 divλŠ” ν¬μŠ€νŒ… 링크둜 μ΄λ™ν•˜λŠ” κΈ°λŠ₯은 κ°™μ§€λ§Œ, 쑰금 λ‹€λ₯Έ ν˜•νƒœμ˜ μŠ€νƒ€μΌμ΄ μ μš©λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. κ³΅ν†΅λœ μ½”λ“œλ₯Ό box-frame으둜 λ¬Άμ–΄μ£Όμ—ˆμŠ΅λ‹ˆλ‹€.
Β 
notion imagenotion image
// Scss %box-frame { border: 2px solid #bb6bd9; border-radius: 15px; width: 574px; height: 310px; } .phoster-span { @extend %box-frame; span { display: inline-block; border-top: 2px solid #bb6bd9; padding: 16px 0 17px; text-align: center; } } .phoster-none { @extend %box-frame; }
/*CSS*/ .phoster-span, .phoster-none { border: 2px solid #bb6bd9; border-radius: 15px; width: 574px; height: 310px; } .phoster-span span { display: inline-block; border-top: 2px solid #bb6bd9; padding: 16px 0 17px; text-align: center; }
Β 

5. 전체 μ‹€μŠ΅ μ½”λ“œ