font-size-padding($font-size:number, $padding:[number, string, list])
.usage {
@include font-size-padding(20, 10 16 8);
}
위 예시 코드는 아래의 CSS로 컴파일 되어 출력됩니다.
.usage {
padding: 0.5em 0.8em 0.4em;
font-size: 1.25rem;
}
@mixin font-size-padding($font-size, $padding) {
// 전달 받은 $padding 유형 검사
$type-collection: list number string;
// 개발자가 요구하는 데이터 유형이 올바르게 전달된 경우 → 처리
@if is-valid-types($padding, $type-collection) {
$padding-type: type-of($padding);
// 숫자인 경우
@if $padding-type == 'number' {
padding: em($padding, $font-size);
}
// 문자인 경우
@if $padding-type == 'string' {
padding: $padding;
}
// 리스트인 경우
@if $padding-type == 'list' {
// 새롭게 반환할 리스트 정의
$convert-padding-list: ();
@each $value in $padding {
// 값이 숫자인 경우 (예: 10px)
@if type-of($value) == 'number' {
$convert-padding-list: append($convert-padding-list, em($value, $font-size));
}
// 값이 문자인 경우 (예: auto)
@if type-of($value) == 'string' {
$convert-padding-list: append($convert-padding-list, $value);
}
}
padding: $convert-padding-list;
}
}
// 개발자가 요구하지 않은 데이터 유형이 전달된 경우 → 오류 표시
@else {
@error '전달 받은 #{$padding} 값은 요구되는 #{join($type-collection, [], $separator: comma, $bracketed: true)} 유형이 아닙니다.';
}
// ----------------------------------------------
// $font-size 전달 인자: 유효성 검사(validation)
@if type-of($font-size) != 'number' {
@error '전달 받은 #{$font-size} 값은 숫자 유형이 아닙니다.';
}
// $font-size 값을 설정
font-size: rem($font-size);
}
@mixin fsp($font-size, $padding) {
@include font-size-padding($font-size, $padding);
}
믹스인에 사용된 Sass의 빌트인 모듈은 다음과 같습니다.
믹스인에 사용된 자체 제작한 모듈은 다음과 같습니다.