SCSS 믹스인은 재사용 가능한 스타일 블록을 만드는 강력한 기능입니다! 함수처럼 사용할 수 있는 CSS로 코드 중복을 완전히 제거할 수 있어요. 🎯
믹스인이란 무엇인가요?
SCSS 믹스인은 CSS 속성들의 집합을 정의하고, 필요한 곳에서 호출하여 사용할 수 있는 기능입니다. 프로그래밍의 함수와 비슷한 개념으로, 매개변수를 받아 동적인 스타일을 생성할 수 있습니다.
기본 믹스인 사용법
1. 믹스인 정의와 사용
믹스인은 @mixin
지시어로 정의하고, @include
지시어로 사용합니다. 한 번 정의하면 어디서든 재사용할 수 있어서 매우 효율적이에요!
믹스인의 핵심 장점:
// 믹스인 정의 @mixin button-style { display: inline-block; padding: 12px 24px; border: none; border-radius: 4px; cursor: pointer; font-weight: 600; text-decoration: none; transition: all 0.3s ease; &:hover { transform: translateY(-2px); box-shadow: 0 4px 8px rgba(0,0,0,0.2); } } // 믹스인 사용 .primary-button { @include button-style; background-color: #3498db; color: white; } .secondary-button { @include button-style; background-color: #95a5a6; color: white; } .outline-button { @include button-style; background-color: transparent; border: 2px solid #3498db; color: #3498db; }
2. 매개변수가 있는 믹스인
믹스인의 진짜 힘은 매개변수에 있습니다! 함수처럼 값을 받아서 동적으로 스타일을 생성할 수 있어요. 기본값 설정도 가능해서 더욱 유연하게 사용할 수 있습니다.
매개변수 믹스인의 장점:
// 매개변수가 있는 믹스인 @mixin button($bg-color, $text-color: white, $size: medium) { background-color: $bg-color; color: $text-color; border: none; border-radius: 4px; cursor: pointer; font-weight: 600; transition: all 0.3s ease; // 크기별 조건부 스타일 @if $size == small { padding: 8px 16px; font-size: 0.875rem; } @else if $size == large { padding: 16px 32px; font-size: 1.125rem; } @else { padding: 12px 24px; font-size: 1rem; } &:hover { background-color: darken($bg-color, 10%); transform: translateY(-2px); } } // 다양한 방식으로 사용 .btn-primary { @include button(#3498db); // 기본값 사용 } .btn-success { @include button(#2ecc71, white, large); } .btn-warning { @include button($bg-color: #f39c12, $size: small); }
고급 믹스인 패턴
1. 컨텐츠 블록 (@content)
@content 지시어는 믹스인의 가장 강력한 기능 중 하나입니다! 믹스인 안에 추가적인 CSS 코드를 삽입할 수 있어서, 미디어 쿼리나 복잡한 레이아웃 패턴을 쉽게 구현할 수 있어요.
@content의 핵심 활용:
// 반응형 믹스인 @mixin respond-to($breakpoint) { @if $breakpoint == mobile { @media (max-width: 767px) { @content; } } @else if $breakpoint == tablet { @media (min-width: 768px) and (max-width: 1023px) { @content; } } @else if $breakpoint == desktop { @media (min-width: 1024px) { @content; } } } // 사용 예시 .container { width: 100%; max-width: 1200px; margin: 0 auto; @include respond-to(mobile) { padding: 0 16px; max-width: 100%; } @include respond-to(tablet) { padding: 0 24px; max-width: 768px; } @include respond-to(desktop) { padding: 0 32px; } } // 플렉스박스 중앙 정렬 믹스인 @mixin flex-center($direction: row) { display: flex; justify-content: center; align-items: center; flex-direction: $direction; @content; } .hero-section { @include flex-center(column) { min-height: 100vh; background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; } }
2. 조건부 믹스인과 계산
SCSS의 강력한 조건문과 함수를 활용하여 지능적인 믹스인을 만들 수 있습니다! 입력값에 따라 자동으로 최적의 스타일을 계산하고 적용하는 스마트한 시스템을 구축해보세요.
// 스마트 그림자 믹스인 @mixin smart-shadow($level: 1, $color: rgba(0,0,0,0.1)) { @if $level == 1 { box-shadow: 0 1px 3px $color; } @else if $level == 2 { box-shadow: 0 3px 6px $color, 0 1px 3px rgba(0,0,0,0.08); } @else if $level == 3 { box-shadow: 0 10px 20px $color, 0 3px 6px rgba(0,0,0,0.1); } @else if $level == 4 { box-shadow: 0 15px 25px $color, 0 5px 10px rgba(0,0,0,0.12); } @else { box-shadow: 0 20px 40px $color, 0 8px 16px rgba(0,0,0,0.15); } } // 자동 텍스트 색상 계산 믹스인 @mixin auto-text-color($bg-color) { background-color: $bg-color; // 밝기 계산 (0-255) $brightness: round( (red($bg-color) * 299) + (green($bg-color) * 587) + (blue($bg-color) * 114) / 1000 ); @if $brightness > 128 { color: #333; // 밝은 배경에는 어두운 텍스트 } @else { color: white; // 어두운 배경에는 밝은 텍스트 } } // 사용 예시 .card-light { @include auto-text-color(#f8f9fa); @include smart-shadow(2); } .card-dark { @include auto-text-color(#2c3e50); @include smart-shadow(3); }
실전 믹스인 라이브러리
프로젝트 필수 믹스인 컬렉션
실제 프로젝트에서 자주 사용되는 필수 믹스인들을 모아놨어요! 이 믹스인들을 잘 활용하면 개발 속도가 월등히 빨라집니다.
// 1. 말줄임 믹스인 @mixin text-ellipsis($lines: 1) { @if $lines == 1 { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } @else { display: -webkit-box; -webkit-line-clamp: $lines; -webkit-box-orient: vertical; overflow: hidden; } } // 2. 절대 중앙 정렬 @mixin absolute-center { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); } // 3. 이미지 비율 유지 @mixin aspect-ratio($width, $height) { position: relative; &::before { content: ''; display: block; padding-top: ($height / $width) * 100%; } img, video, iframe { position: absolute; top: 0; left: 0; width: 100%; height: 100%; object-fit: cover; } } // 4. 그라데이션 배경 @mixin gradient-bg($start, $end, $direction: 135deg) { background: $start; // 폴백 background: linear-gradient($direction, $start 0%, $end 100%); } // 5. 애니메이션 믹스인 @mixin animate($name, $duration: 0.3s, $timing: ease, $delay: 0s) { animation: $name $duration $timing $delay; animation-fill-mode: both; } // 사용 예시들 .product-title { @include text-ellipsis(2); // 2줄 말줄임 } .modal-content { @include absolute-center; width: 400px; height: 300px; } .video-container { @include aspect-ratio(16, 9); // 16:9 비율 } .hero-bg { @include gradient-bg(#667eea, #764ba2); }
SCSS 믹스인의 핵심 포인트
SCSS 믹스인을 마스터하면 진정한 CSS 아키텍트가 될 수 있습니다!
믹스인은 SCSS의 가장 강력한 기능 중 하나입니다. 함수형 프로그래밍의 개념을 CSS에 도입하여 놀라운 생산성을 경험해보세요! 🚀