Sass(Scss)
[SASS(SCSS)] @mix-in : px 값 vw 값으로 단위 변환하기
julia_
2021. 9. 13. 10:52
웹뷰나 모바일 버전 작업시
뷰포트 단위인 vw를 사용하여 개발을 하고있다.
하지만, 디자인에서 넘어오는 단위는 px값인데
이럴때 SASS에서 mixin을 사용하여 px값을 vw값으로 변환하여 사용할 수 있다.
[mixin.scss]
$mobile-contents-width: 360px;
@mixin vw($property, $px) {
//viewport 계산식
$viewportWidth: math.div(1px, $mobile-contents-width) * 100;
$pxs: null;
$vws: null;
//속성값이 1개일경우, 여러개일 경우
@each $value in $px {
@if type-of($value) == 'number' {
$px: math.div($value, 1px);
$pxs: append($pxs, if($px == 0, 0, $px + px));
$vw: $px * $viewportWidth;
$vws: append($vws, if($vw == 0, 0, $vw + vw));
}
@else {
$pxs: append($pxs, $value);
$vws: append($vws, $value);
}
}
//모바일 사이즈에서만 사용
@media (max-width: $mobile-contents-width) {
#{$property}: $vws;
}
}
vw라는 mixin을 만들어주었다.
[page.scss]
@import '../abstracts/mixin';
.page_detail {
@include vw(margin-top, 50px);
&__info {
@include vw(padding, 30px 16px 15px);
border-bottom: 1px solid #e7e7e7;
p {
@include vw(margin-bottom, 30px);
@include vw(font-size, 20px);
font-weight: 600;
word-break: keep-all;
}
span {
display: block;
text-align: right;
color: #9d9d9d;
@include vw(font-size, 12px);
}
}
적용할 페이지 상단에 mixin.scss를 import 해주고,
@include vw(padding, 30px 16px 0px 15px);
위와 같은 형식으로 include해주면 vw로 변환되어 적용된다.
값이 "0" 일때도 px을 붙혀줘야 에러가 안남.