SCSS
SCSS
아 ㅋㅋ 이거 그냥 자바스크립트 아니냐?
컴파일 방법
SASS(SCSS)는 웹에서 직접 동작할 수 없음 전처리기로 작성 후 css로 컴파일 해야됨
-
sassmeister.com 으로 웹에서 컴파일 페이지에서 sass, scss로 코딩하면 실시간으로 css로 변환해줌
-
Parcel 번들러로 컴파일 노드가 깔려있어야함
- Parcel 설치
$npm install -g parcel-bundler
- 프로젝트에 scss 컴파일러 설치
vscode기준 원하는 폴더에서 터미널 켜고
- 터미널 창에
npm init -y
입력 - package.json 파일이 생성되고
- 터미널 창에
$npm install --save-dev node-sass
입력 - package.json에 parcel-bundler가 생성됨
- 터미널 창에
-
html에 scss파일 연결
<link rel='stylesheet' href='scss/main.scss' />
- parcel 모듈 실행
- 터미널 창에
npx parcel index.html
입력 - 번들이 실행되면서 로컬호스트 주소가 생성
- 로컬호스트로 들어가면 scss가 컴파일된 것을 볼 수 있음
- 터미널 창에
주석(comment)
// 컴파일되지 않는 주석
/* 컴파일되는 주석 */
데이터 종류
-
특이사항
- Numbers: 숫자에 단위가 있거나 없음
- String: 문자에 따옴표가 있거나 없음
- Nulls: 속성값으로 null이 사용되면 컴파일하지 않음
- Lists: ()를 붙이거나 붙이지 않음
- Maps: ()를 꼭 붙여야함
중첩(Nesting)
자손선택자까지 포함해서 작성하는 것
// 예시
.section {
width: 100%;
.list {
padding: 20px;
li {
float: left;
}
}
}
상위 선택자 참조(&)
중첩 안에서 &
키워드는 상위 선택자 자기자신을 표현함. this
랑 비슷한 개념
.btn {
position: absolute;
&.active {
background-color: purple;
}
}
.list {
li {
&:last-child {
margin-bottom: 6px;
}
}
}
중첩 벗어나기(@at-root)
중첩 안에서 생성하지만 중첩 밖에서 사용해야 할 경우 사용 예시로 값만 공유하고 싶은 다른 선택자를 만들때 유용함
.list {
$w: 100px;
$h: 50px;
li {
width: $w;
height: $h;
}
@at-root .box {
width: $w;
height: $h;
}
}
중첩된 속성
font-
, margin-
등과 같이 동일한 네임 스페이스를 가지는 속성들을 사용할 수 있음
변수
변수 사용이 가능함 너무 신기
$변수이름: 변수값;
변수 유효범위(Variable Scope)
변수는 선언된 블록{}
안에서만 유효범위를 가짐
변수 재할당(Variable Reassignment)
$red: #FF0000;
$blue: #0000FF;
$color-primary: $blue; // 재할당
$color-danger: $red; // 재할당
.box {
color: $color-primary; // 재할당한거 또 재할당
background: $color-dagner; // 재할당한거 또 재할당
}
전역 설정(!global)
변수의 유효범위를 전역으로 설정할 수 있음
.box {
$color: #111 !global; // #111의 범위를 전역으로 바꿈
background: $color; // #111
}
.box1 {
background: $color; // #111
}
초기값 설정(!default)
할당되지 않은 변수의 초기값을 설정
$color-box: red; // 전역변수
.box {
$color-box: blue !default; // 초기값 설정
background: $color-box; // red;
}
초기값을 블루로 설정했지만 전역변수가 red로 잡혀있어서 red가 나오게됨
문자 보관( #{} )
저장해둔 변수 값을 사용할 수 있음
$name: unquote("kaen"); // unquote()는 따옴표를 제거하는 scss 내장함수
@import name('my name is {#name}'); // my name is kaen
문법
가져오기(import)
@import
현재 파일에 다른 파일을 불러오는 속성
연산(Operations)
-
산술연산자 |종류|설명|주의사항 |+|더하기| |-|빼기| |*|곱하기|하나 이상의 값이 반드시 숫자 |/|나누기|오른쪽 값이 반드시 숫자 |%|나머지|
-
비교연산자 |종류|설명 |==|동등 |!=|부등 |<|~보다 작은 |>|~보다 큰 |<=|~보다 작거나 같은 |>=|~보다 크거나 같은
-
논리연산자 |종류|설명 |and|그리고 |or|또는 |not|부정
숫자(Numbers)
- 상대적 단위 연산
상대적 단위(%, em, vw 등)의 연산의 경우 CSS calc()로 연산해야 오류가 나지 않음
width: calc(50% - 20px); // 연산 쌉가능
- 나누기 연산의 주의사항
/
는 나누기 연산으로 사용되지 경우가 있다 그래서()
로 묶어주는 것이 좋다height: (100px / 2);
문자(Strings)
첫번째 피연산자에 따옴표가 붙어있다면 결과를 따옴표로 묶고 첫번째 피연산자에 따옴표가 없다면 결과를 따옴표로 묶지 않음
content: "Hello " + World; // "Hello World"
display: flex + "inline"; // flexinline
색상
color: #123456 + #345678 // #468ace
background: rgba(50, 100, 150, .5) + rgba(10, 20, 30, .5) // rgba(60, 120, 180, .5)
rgba에서 a(Alpha)값은 연산되지 않으며 서로 동일해야 다른 값의 연산이 가능함
논리
|종류|설명 |and|그리고 |or|또는 |not|부정
재활용
자바스크립트의 함수명 같은 역할
@mixin (선언)
// scss
@mixin 믹스인이름 {
스타일;
}
// sass
=믹스인이름
스타일
@include (사용)
// scss
@include 믹스인이름;
// sass
+믹스인이름
인수(Arguments)
자바스크립트의 매개변수와 인수와 같음
// scss
@mixin 믹스인이름($매개변수) {
스타일;
}
@include 믹스인이름(인수);
// sass
=믹스인이름($매개변수)
스타일
+믹스인이름(인수)
- 인수의 기본값
@mixin 믹스인이름($매개변수: 기본값) { 스타일; }
- 키워드 인수 매개변수 여러개 주는 걸 말하는 것 같음 ``` scss @mixin 믹스인이름($매개변수A: 기본값, $매개변수B: 기본값) { 스타일; }
@include 믹스인이름($매개변수B: 인수);
- 가변 인수 (...)
입력할 인수의 개수가 불확실할 때 사용
매개변수 뒤에 `...`을 붙여줌
``` scss
@mixin 믹스인이름($매개변수...) {
스타일;
}
@include 믹스인이름(인수A, 인수B, 인수C);
@content
해당 부분에 원하는 스타일 블록을 전달
@mixin 믹스인이름() {
스타일;
@content;
}
@include 믹스인이름() {
// 스타일블록
스타일;
}
확장(Extend)
특정 선택자가 다른 선택자의 모든 스타일을 가져야하는 경우
@extend 선택자;
함수(Funcitons)
함수는 보통 연산된 특정 값을 @return
을 통해 반환함
// Mixins
@mixin 믹스인이름($매개변수) {
스타일;
}
// Functions
@function 함수이름($매개변수) {
@return 값
}
- 사용법 ``` scss // Mixin @include 믹스인이름(인수);
// Functions 함수이름(인수)
## 조건과 반복(Control Directives / Expressions)
### if(함수)
삼항 연산자와 같은 방식
조건이 true면 표현식1 실행, false면 표현식2 실행
``` scss
if(조건, 표현식1, 표현식2)
@if (지시어)
if문과 같은 방식
@if (조건) {
// 어때요
} @else if () {
// 자바스크립트랑
} @else {
// 겁나게 비슷하죠?
}
당연히 and
, or
, not
도 가능
@for
for문과 같은 방식 스타일을 반복적으로 출력
변수는 관례상 $i
로 사용
- through
종료 만큼 반복
@for $변수 from 시작 through 종료 { // 반복 내용 }
- to
종료 직전까지 반복
@for $변수 from 시작 to 종료 { // 반복 내용 }
@each
List와 Map 데이터를 반복할 때 사용 for in과 같은 방식
@each $변수 in 데이터 {
// 반복 내용
}
@while
while문과 같은 방식 조건이 false가 될 때까지 반복 사용을 권장하지않음
@while 조건 {
// 반복 내용
}