SCSS란?
CSS작성을 더 효율적으로 작성 할 수 있는 문법이다
브라우저에선 동작하지않기 때문에 번들러(bundler)를 이용해 CSS로 컴파일(변환)해 줘야 한다
SCSS를 사용할때에는 parcel-bundler라는 컴파일 도구를 필요로 하기때문에 설치해야한다
parcel-bundler 설치법
1 프로젝트 터미널에서 npm init -y 라고 명시
2 npm i -D parcel-bundler라고 명시 -D를 붙여주는이유는 브라우저에선 SCSS가 동작하지 않기때문에 개발 의존성 패키지라는 것을 명시해 주는 용도
3 packge.json에 명시된 script에 bulid와 dev라고 명시
bulid:컴파일 + 링크의 느낌이다 즉 컴파일된 파일을 실행가능한 형태로만든다
dev: 이름이 꼭 dev일 필요는 없지만 개발용 서버로 생각하면 좋을듯하다
ex)
"scripts": {
"dev":"parcel index.html",
"bulid":"parcel build index.html"
},
위코드에서 명시된 dev 또는 bulid에는 실행할 패키지와 파일을 명시해준 코드이다
실제로 index.html 실행하기위해선 터미널에서 npm run dev,npm run bulid라고 명령하면 실행된다
--- SCSS 문법 ---
주석:
SCSS는 주석을 작성하는 방식이 2가지가있다
/* content */ : SCSS가 CSS로 컴파일 될때 해당 주석도 같이 컴파일된다
// content : SCSS가 CSS로 컴파일 될때 해당 주석은 같이 컴파일 되지않는다
중첩:
CSS의 선택자를 작성할때 상위 선택자를 생략 하여 하위선택자를 효율적으로 작성하는 방식이다
ex) css코드와 scss의코드
SCSS코드
.container {
background-color: red;
ul {
background-color: orange;
li {
background-color: yellow;
.name{
background-color:green;
}
.age{
background-color: blue;
}
}
}
}
CSS코드
.container{
background-color: red;
}
ul{
background-color: orange;
}
li{
background-color:yellow;
}
.container ul li .name{
background-color:green;
}
.container ul li .age{
background-color: blue;
}
것보기에는 CSS코드와 비교해서 SCSS의 코드가 크게 효율적이지 않다고 느낄 수 있지만 직접 작성해보면 상위선택자를 생략한다는 장점은 효율 적 이라고 판단할 것이다
&:
한단계 상위 선택자를 참조하는 기능을 가진다
ex)
SCSS코드
.btn{
position:absolute;
&.active{
color: red;
}
}
.list{
li{
&:last-child{
margin:0;
}
}
}
CSS로 변환된 코드
.btn{
position: absolute;
}
.btn.active{
color: red;
}
.list li li:last-child{
margin:0
}
위 코드와 같이 SCSS의 &는 1단계상위 선택자와 동일한 의미를 가진다
SCSS의 중첩된 속성:
SCSS의 속성중 일부 동일한 이름을 가지고 있다면 동일한 이름을 생략하여 {};안에 속성과 속성값을 효율적으로 작성할 수 있는 방법이다
ex)
SCSS코드
.box {
font: {
size: 16px;
weight: bold;
family: sans-serif;
};
margin: {
top: 10px;
bottom: 20px;
left: 30px;
right: 40px;
};
padding: {
top: 10px;
bottom: 20px;
left: 30px;
right: 40px;
};
}
CSS로 변환된 코드
.box {
font-size: 16px;
font-weight: bold;
font-family: sans-serif;
margin-top: 10px;
margin-bottom: 20px;
margin-left: 30px;
margin-right: 40px;
padding-top: 10px;
padding-bottom: 20px;
padding-left: 30px;
padding-right: 40px;
}
주의사항!선택자와 속성은 다른것이기 때문에 중첩 할 때 햇갈리지 않아야 한다는 점을 숙지하자
변수: 속성값을 해당 변수에 넣어 재사용 할 수 있는 기능을 가진다
선언된 변수는 다른 블럭에서 재할당이 가능하다
$ = SCSS에서 변수 선언자이다
: = 변수와 값을 구분하는 기호이다
ex)
SCSS코드
$size:100px;
.container {
position: fixed;
top: $size;
.item{
width:$size;
height:$size;
transform: translateX($size);
}
}
CSS로 변환된 코드
.container {
position: fixed;
top: 100px;
}
.container .item {
width: 100px;
height: 100px;
transform: translateX(100px);
}
주의사항!:
1 SCSS의 변수는 변수가 선언된 블록에서만 사용가능하다;
2 SCSS에 변수를 사용할 때 해당 변수의 값을 수정하면 변수가 선언된 블럭에서 사용된 변수의 모든 속성값이 전부 수정된다는 점을 숙지하자
SCSS 연산
SCSS는 숫자값을 연산 할 수 있다.
연산시 calc()를 사용하는것이 아니라면 단위가 동일해야한다
나누기 주의사항 :나눗셈은 /기호를 사용하는데 /기호는 속성값을 구분하는 용도로 사용되기도 하기때문에 ()로 묶어서 사용하거나 변수를 선언하여 사용해야한다
곱하기 주의사항 :곱하기를 할때에는 하나의 값에만 단위를 명시해야 오류가 발생하지 않는다
ex)
SCSS코드
.container {
$size: 40px;
margin: {
top: 5px + 5px;
bottom: 20px - 10px;
left: 5px * 2;
right: (20px / 2px);
};
padding: {
top: 10px + 10px;
bottom: 30px - 10px;
left: 10 * 2;
right: $size/2;
};
}
//위 코드에서 margin속성에 right부분에 ()로 묶어서 연산한 부분과, padding속성에 right 부분에 변수사용을 참조하여 차이를 해석하자
CSS로 변환된 코드
.container {
margin-top: 10px;
margin-bottom: 10px;
margin-left: 200px;
margin-right: 10px;
padding-top: 20px;
padding-bottom: 10px;
}
재활용(@mixin)
: JS의 함수처럼 @mixin 안에 속성과 속성값을 명시하여 사용 할 수 있다
@mixin:mixin에 이름과 재활용할 속성과 속성값을 명시한다
수치를 설정해야 하는경우 고정적이지 않고 속성마다 설정값이 달라지는 문제를 해결 하기위해서 mixin에()를 사용하여 안에 인수를 넣어 줄 수 있다.
()를 사용하게되면 사용 할 때마다 변수 값을 설정 해 줘야하는데 디폴트파라미터 즉 기본값을 설정하면 ()를 생략 할 수 있다.
()안에 파라미터는 순서대로 값이 설정 되기 때문에 1번 파라미터는 건너 뛰고 2번파라미터의 값만 설정하고 싶다면 해당파라미터의 변수명:속성값을 명시한다
@include: 특정 선택자에서 mixin을 사용하겠다고 선언하는 기능을 가진다
ex)
SCSS코드
@mixin flex-center($w-value:100px,$h-value:200px) {
//flex-center라는 mixin에 파라미터를 지정하고 기본값을 설정해준 코드
display: flex;
justify-content: center;
align-items: center;
width:$w-value;
height:$h-value;
}
.container {
@include flex-center(200px);
//2번파라미터인 h-value에값을 명시하지않아도 기본값이 명시되어있기 때문에
//width 200px ,height 200px을 출력하는 코드
.item {
@include flex-center($h-value:300px);
}
// height만 값을 설정 하고 싶지만 mixin에 인자는 순서대로 호출됨
//때문에 변수명을 명시하여 값을 설정하여 해결 이것이 키워드 인수이다
.box {
@include flex-center;
//파라미터에 아무값도 설정하지 않아도 기본값이 있기때문에 기본값 대로 정상출력
}
}
CSS 코드
.container {
display: flex;
justify-content: center;
align-items: center;
width: 200px;
height: 200px;
}
.container .item {
display: flex;
justify-content: center;
align-items: center;
width: 100px;
height: 300px;
}
.container .box {
display: flex;
justify-content: center;
align-items: center;
width: 100px;
height: 200px;
}
SCSS반복문
@for: SCSS에서 반복문을 실행하겠다고 선언하는 기능이다
from : 반복시작 번호를 명시한다
through: 반복종료 번호를 명시한다
#{}: JS의 문자열중 ` `문법 처럼 변수를 보간한다
ex)
SCSS 코드
@for $i from 1 through 4 {
.box:nth-child(#{$i}) {
width: 100px * $i;
}
}
CSS코드
.box:nth-child(1) {
width: 100px;
}
.box:nth-child(2) {
width: 200px;
}
.box:nth-child(3) {
width: 300px;
}
.box:nth-child(4) {
width: 400px;
}
SCSS함수:
JS의 함수와 유사하게 사용된다 주로 CSS의 px값을 계산할때 사용한다
작성법 : JS함수 작성법과 동일 다만 function과 return앞에 @ 기호를 붙여줘야하고 파라미터도 $ 으로 표현해야함
ex)
SCSS코드
@function ratio($size,$ratio){
@return $size * $ratio
}
.box{
$width: 100px;
width: $width;
height: ratio($width,1/2 );
}
CSS로 변환된 코드
.box {
width: 100px;
height: 50px;
}
SCSS에서 SCSS 파일 불러오는법
@import라 명시하고 ""안에 파일 경로를 명시한다 ,를 사용하여 여럭의 파일을 불러 올 수 있다.
ex)
@import "./sub.scss","./sub2.scss")
@function ratio($size,$ratio){
@return $size * $ratio
}
.box{
$width: 100px;
width: $width;
height: ratio($width,1/2 );
}
'front-end 국비과정 학습일지' 카테고리의 다른 글
front-end 국비과정 일차 34일차 학습일지 :Vue 데이터 바인딩,설치법,v- for, v-if (0) | 2022.05.18 |
---|---|
front-end 국비과정 일차 26~33일차 학습일지 :과제: OMDB API를 이용해 DATA 화면에 출력 (0) | 2022.05.12 |
front-end 국비과정 일차 25일차 학습일지 JS:bundler(webpack,parcel) (0) | 2022.05.01 |
front-end 국비과정 일차 23일차 학습일지 JS: Error,REST API,DOM (0) | 2022.04.28 |
front-end 국비과정 일차 22일차 학습일지 TypeScript: (0) | 2022.04.27 |