이번에는 SCSS 기본 문법을 배워보면서 CSS를 더 효율적으로 작성하는 방법을 알아보겠습니다! 🎨
SCSS가 무엇인가요?
SCSS(Sassy CSS)는 CSS 전처리기 언어로, CSS에 프로그래밍 기능을 추가한 것입니다. 일반 CSS와 100% 호환되면서도 강력한 기능들을 제공합니다!
SCSS의 주요 특징
- 변수 사용 가능: 색상, 폰트, 크기 등을 변수로 관리
- 중첩(Nesting) 지원: HTML 구조와 동일하게 CSS 작성
- 믹스인(Mixin)으로 재사용: 반복되는 스타일을 함수처럼 사용
- 함수와 연산 기능: 계산과 조건문으로 동적 스타일링
- 파셜과 임포트: 파일을 나누어 모듈화된 관리
왜 SCSS를 사용해야 할까요? 기존 CSS의 한계를 극복하고, 대규모 프로젝트에서도 유지보수가 쉬운 스타일시트를 작성할 수 있기 때문입니다!
기본 문법 배우기
1. 변수 (Variables)
SCSS 변수는 $변수명: 값;
형태로 선언하며, 색상, 폰트, 크기 등 반복되는 값을 저장해 재사용할 수 있습니다. 디자인 시스템의 핵심입니다!
// SCSS 변수 선언 $primary-color: #3498db; $secondary-color: #2ecc71; $font-size-base: 16px; $margin-default: 20px; // 변수 사용 예시 .button { background-color: $primary-color; font-size: $font-size-base; margin: $margin-default; color: white; border: none; padding: 10px 20px; border-radius: 4px; }
변수의 장점:
- 한 곳에서 값을 변경하면 전체에 적용됩니다
- 일관성 있는 디자인을 유지할 수 있습니다
- 오타를 방지하고 유지보수가 용이합니다
- 의미 있는 이름으로 가독성을 향상시킵니다
2. 중첩 (Nesting)
SCSS의 중첩 문법을 사용하면 HTML 구조와 동일하게 CSS를 작성할 수 있습니다. 부모-자식 관계를 들여쓰기로 표현하여 가독성이 크게 향상됩니다!
// SCSS 중첩 문법 .nav { background: #333; padding: 1rem; ul { margin: 0; padding: 0; list-style: none; display: flex; } li { margin-right: 1rem; a { color: white; text-decoration: none; padding: 0.5rem 1rem; border-radius: 4px; transition: background-color 0.3s; // &는 부모 선택자 참조 &:hover { background-color: rgba(255, 255, 255, 0.1); } &.active { background-color: $primary-color; } } } }
중첩 사용 시 주의사항:
- 너무 깊은 중첩(3-4단계 이상)은 피해야 합니다
- &(앰퍼샌드)로 부모 선택자를 참조합니다
- 가독성을 위해 적절한 들여쓰기를 유지합니다
3. 믹스인 (Mixins)
믹스인은 재사용 가능한 스타일 묶음을 만드는 기능입니다. 함수처럼 매개변수를 받아 동적으로 스타일을 생성할 수 있습니다!
// 기본 믹스인 정의 @mixin button-style($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: 6px 12px; font-size: 12px; } @else if $size == large { padding: 15px 30px; font-size: 18px; } @else { padding: 10px 20px; font-size: 14px; } &:hover { transform: translateY(-2px); box-shadow: 0 4px 8px rgba(0,0,0,0.2); } } // 믹스인 사용 .btn-primary { @include button-style($primary-color); } .btn-danger { @include button-style(#e74c3c, white, large); }
믹스인의 활용 예시:
- 버튼, 카드, 모달 등 컴포넌트 스타일
- 반응형 미디어 쿼리
- 애니메이션 효과
- 그리드 시스템
고급 기능들
4. 파셜 & 임포트
파셜(Partial)은 언더스코어(_)로 시작하는 SCSS 파일로, 다른 파일에서 임포트하여 사용합니다. 코드를 모듈화하여 관리하기 쉽게 만들어줍니다!
// _variables.scss 파일 $primary: #3498db; $secondary: #2ecc71; $danger: #e74c3c; // _mixins.scss 파일 @mixin flex-center { display: flex; justify-content: center; align-items: center; } // main.scss 파일 @import 'variables'; @import 'mixins'; .container { @include flex-center; background: $primary; min-height: 100vh; }
5. 함수와 연산
SCSS에서는 사용자 정의 함수를 만들고 수학적 연산을 수행할 수 있습니다. 동적인 스타일링의 핵심입니다!
// 함수 정의 @function calculate-rem($size) { @return #{$size / 16}rem; } // 색상 밝기 계산 함수 @function lighten-color($color, $amount) { @return lighten($color, $amount); } // 연산 사용 $base-font-size: 16px; $large-font: $base-font-size * 1.5; $container-width: 1200px; $sidebar-width: $container-width / 4; .title { font-size: calculate-rem(24); // 1.5rem margin-bottom: $large-font; // 24px color: lighten-color($primary, 20%); }
6. 조건문과 반복문
SCSS는 프로그래밍 언어처럼 조건문과 반복문을 지원합니다. 복잡한 스타일 로직을 자동화할 수 있습니다!
// 조건문 예시 @mixin button-size($size) { @if $size == small { padding: 5px 10px; font-size: 12px; } @else if $size == large { padding: 15px 30px; font-size: 18px; } @else { padding: 10px 20px; font-size: 14px; } } // 반복문으로 그리드 시스템 생성 @for $i from 1 through 12 { .col-#{$i} { width: percentage($i / 12); float: left; } } // 색상 팔레트 자동 생성 $colors: ( 'primary': #3498db, 'success': #2ecc71, 'danger': #e74c3c ); @each $name, $color in $colors { .btn-#{$name} { background-color: $color; border-color: darken($color, 10%); } }
실전 예시
완전한 카드 컴포넌트 만들기
지금까지 배운 모든 기능을 활용해서 재사용 가능한 카드 컴포넌트를 만들어보겠습니다!
// 변수 설정 $card-bg: white; $card-shadow: 0 2px 10px rgba(0, 0, 0, 0.1); $card-border-radius: 8px; $card-padding: 20px; // 카드 호버 효과 믹스인 @mixin card-hover { transform: translateY(-4px); box-shadow: 0 8px 25px rgba(0, 0, 0, 0.15); transition: all 0.3s ease; } // 반응형 카드 믹스인 @mixin responsive-card($breakpoint: 768px) { @media (max-width: $breakpoint) { margin: 10px; padding: 15px; } } // 카드 컴포넌트 .card { background: $card-bg; border-radius: $card-border-radius; box-shadow: $card-shadow; padding: $card-padding; margin: 20px; overflow: hidden; &:hover { @include card-hover; } @include responsive-card; .card-header { border-bottom: 1px solid #eee; margin-bottom: 15px; padding-bottom: 15px; .card-title { font-size: 1.5rem; font-weight: 600; margin: 0; color: #333; } } .card-content { color: #666; line-height: 1.6; margin-bottom: 15px; } .card-footer { border-top: 1px solid #eee; padding-top: 15px; margin-top: 15px; display: flex; justify-content: space-between; align-items: center; } }
SCSS의 장점과 실무 활용
SCSS를 사용해야 하는 이유
SCSS를 사용하면 CSS 작성이 훨씬 편해집니다!
- 코드 재사용성 높아짐: 믹스인과 함수로 중복을 제거합니다
- 유지보수 용이함: 변수로 일관성 있는 디자인을 관리합니다
- 가독성 향상: 중첩과 모듈화로 구조적 코딩이 가능합니다
- 개발 속도 증가: 자동화된 스타일 생성으로 효율성을 높입니다
- 팀 협업 개선: 표준화된 코드 스타일로 협업이 원활해집니다
실무에서의 SCSS 활용 팁
- 파일 구조화: _variables, _mixins, _components로 분리합니다
- 네이밍 컨벤션: BEM 방법론과 함께 사용합니다
- 성능 최적화: 불필요한 중첩을 피합니다
- 빌드 도구 연동: Webpack, Gulp 등과 함께 사용합니다
Cursor에서 SCSS를 작성하고 자동으로 WordPress에 올리는 워크플로우로 더 효율적인 개발을 해보시기 바랍니다! ✨
관련 링크 및 참고자료
- Sass 공식 사이트 – 최신 문서와 가이드
- Sass 가이드 – 기본 문법 학습
- Sass 문서 – 상세한 API 레퍼런스
- Sass GitHub – 소스코드와 이슈 트래킹