font-size-padding()
글자 크기(font-size) 기준 패딩(padding) 설정 믹스인
용도
글자 크기(rem
단위)를 기준으로 패딩(em
단위)을 설정해야 할 때, 편리하게 활용하기 위한 믹스인입니다.
사용법
font-size-padding()
믹스인에 글자 크기와 패딩 값을 px
단위로 전달합니다. (단위 생략 가능)
font-size-padding($font-size:number, $padding:[number, string, list])
.usage {
@include font-size-padding(20, 10 16 8);
}
매개변수(parameter)
유형(type)
필수(required)
기본 값(default)
$font-size
number
✔︎
$padding
number, string, list
✔︎
위 예시 코드는 아래의 CSS로 컴파일 되어 출력됩니다.
.usage {
padding: 0.5em 0.8em 0.4em;
font-size: 1.25rem;
}
로직
font-face()
믹스인은 다음의 로직에 의해 작성되었습니다.
@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);
}
전달 받은 글자 크기, 패딩 값을 계산하여 처리
패딩 간격은 글자 크기를 기준으로
em
단위로 환산하여 설정 (숫자 값이 아닌 문자 값은 그대로 설정)글자 크기는
rem
단위로 환산하여 설정 ($base-rem-size 기준 값으로 계산)
fsp()
믹스인은 font-size-padding()
믹스인 래퍼로 보다 간단하게 쓰기 위해 작성되었습니다.
@mixin fsp($font-size, $padding) {
@include font-size-padding($font-size, $padding);
}
참고
믹스인에 사용된 Sass의 빌트인 모듈은 다음과 같습니다.
믹스인에 사용된 자체 제작한 모듈은 다음과 같습니다.
Last updated
Was this helpful?