1.1. 장점
1.2. 단점
2.1. 장점
2.2. 단점
3.1. 장점
#{}
) 작업도 가능하다.3.2. 단점
sass에서 제공하는 다양한 기능이 많은 것 같아서 이를 적용해보고자 이번 프로젝트에서는 sass를 선택하기로 했다. sass는 css형식을 그대로 적용할 수 있는 .scss
와 중괄호 없이 들여쓰기로 구분하는 .sass
가 있다. CSS 방식이 익숙해서 전자를 택했다.
모듈 설치후
npm i sass
확장자를 맞춰주면 된다.
❗️처음엔 node-sass를 사용하려고 했으나
node-sass 모듈 사용 비권장
Warning: LibSass and Node Sass are deprecated. While they will continue to receive maintenance releases indefinitely, there are no plans to add additional features or compatibility with any new CSS or Sass features. Projects that still use it should move onto Dart Sass.
공식 홈페이지에 따르면 더이상의 업데이트가 없다고 한다.
게다가 노드 버전에 맞춰 그 버전이 세세하게 다르기 때문에 프로젝트 팀원 간 노드 버전을 맞춰야 한다. 이러한 불편은 감수하고 싶지 않아서 sass 모듈을 사용했다.
현재 프로젝트에서는 어떻게 적용했는지 한번 살펴보자.
_utilies.scss
_
)로 시작// _utilies.scss
@mixin button($radius, $padding) {
border: none;
border-radius: $radius;
padding: $padding;
cursor: pointer;
}
@mixin smallText($size, $color, $mtop) {
font-size: $size;
color: $color;
margin-top: $mtop;
}
@mixin size($width, $height) {
width: $width;
height: $height;
}
버튼과 크기는 요소 스타일링의 거의 기본이라고 할 수 있다. 이렇게 자주 쓰일 건 @mixin으로 정의해두고, 다른 scss 파일에서 불러와서 사용해주면 훨씬 간단한 표현이 가능하다.
signbutton.scss
@import
$
)에 원하는 값 입력해 사용// signbutton.scss
@import './utilies';
.signButtonBox {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
.signButton {
@include button(20px, 10px);
margin: 0 20px;
width: 100%;
background-color: var(--main-blue);
color: white;
&:hover {
background-color: var(--main-blue);
}
&:disabled {
background-color: transparent;
color: rgba(0, 0, 0, 0.5);
}
}
✔️ &
키워드
부모 선택자를 나타낸다. 그래서 &.
로 .parents.child
처럼 A이면서 B인 클래스를 특정할 수 있고, hover나 last-child처럼 특정 선택자만 선별할 수도 있다.
그외에도 다른 기능이 있다.
✔️ @extend
ex.
.button {
border: none;
padding: 10px;
}
.primary-button {
@extend .button;
color: blue;
}
다른 선택자의 스타일링을 상속 받는다. 버튼 색 하나만 다르게 하는 등 조금의 변화가 생길 때 사용하기 좋아보인다.
✔️ @content
ex.
@mixin big-box {
border: 2px solid black;
padding: 10px;
@content;
}
.color-container {
@include big-box {
background-color: yellow;
}
}
@mixin 내부에서 사용한다. 믹스인을 호출하는 쪽에서 스타일을 동적으로 결정할 수 있다.
.color-container
는 big-box에서 정의한 내용을 가져오면서 background-color
적용했다.
🐞그런데 아직 @content를 사용하는 이점이 와닿진 않는다. @content 없이도 그냥 적용할 수 있는데, 뭐가 동적이라는 건지 이해가 안 된다. 그래서 사용하진 않았다.