mixin, include
키워드로 재활용이 가능하다.@mixin section($size:40px, $end: "!!"){
font-size: $size;
&::after{
content:$end
}
}
기능이 점점 많아지는걸...?🤔
arguemnts, ...args
같은 가변인수도 지원한다...!?@mixin section($a, $b...){
}
...
이후로 들어온 변수들을 사용할수 있음. 이거 완존 JS아니냐?
이렇게 사용할수도 있다.
참고로 @content
에 인수로 전달한 값을 쓰려면 include
로 넘겨주는 부분에 using()
키워드를 넣어주어야한다.
클래스의 extends
키워드처럼 extend
키워드를 사용할수도 있다...
기능이 진짜 많구나?
위의 btn
은 정상적으로 사용했지만, 아래 container
처럼 중첩 내부 extend
를 잘못 사용한다면 선택자가 꼬이게된다.
꼭 필요한게 아니라면 extend
대신 mixin
을 이용하여 재활용 하자.
input
내부 placeholder
는 아니고 extend
로만 확장하여 사용할 수 있는 선택자를 말한다.
%btn{
...
}
.btn-2{
@extend %btn
}
이렇게 확장으로만 사용가능하다!
참고로 @media
규칙 내부에서 확장하려면 내부에 이미 확장용 속성이 선언되어있어야 함.
@function
키워드로 진짜 함수를 작성할수있다...
또한 if-else
문도 사용가능하고 error
메시지도 던질수 있다.
@function grid($col:1, $total:12){
if($col > $total){
@error "에러입니다"
}
@return 123;
}
.box1{
width: grid(); //123
}
이게 다 컴파일링되는데 속도가 빠르다니...
@list
모듈을 넣으면 length
프로퍼티도 사용 가능하다.
@use 'sass:list'
if(list.length)...
red
라는 이름의 전역함수는 rgb
중 red
값을 반환해준다.
위에 말했듯 if-else
문 사용 가능하다
for
문도 사용 가능하다
@for $i from 1 to 4 {
// 1~3까지 반복됨
.item {
width: 100px * $i;
}
}
또한 for-in
문도 사용가능하다.
@each $size in $sizes {
$index: list.index($sizes, $size);
.icon-#{$index}{
height: $size;
width: $size;
}
}
while
문 도 사용 가능하다
@while($n>0){
$n : $n-2;
}
JS와 비슷한 다른 언어를 배우는 기분이 드는데...배워야할게 너무 많구나ㅠㅠ
import
로 가져올때 url
키워드 사용하지 않아도 됨._
붙어있으면 컴파일할때 필요한 파일 생성 안함(낭비없음)import
할때 확장자 생략하면 css,sass,scss
로 인식@forward
로 선언하여 [모듈]을 불러와야함.as
키워드도 사용 가능함. as
로 바꾼 이름에*
키워드를 사용하게되면 이렇게 사용할 수 있다.//main.scss
@use "mixins" as mix;
@use "variables" as var;
@forward "mixins" as mix*;
@forward "variables" as var*;
...
//other.scss
@use ...
//$primary 이렇게 선언된 변수를 $varprimary 이렇게 사용할 수 있음.
기본적으로 제공되는 모듈이 많다. list
도 그 중 일부고...
공식 사이트들어가면 자세히 나와있음
조건문이나 변수같은게 포함되니 자연스레 디버그가 필요하다.(배보다배꼽...아닌가...?!)
@debug
: console.log
같은 기능@warn
: console.warn
과 같은 기능@error
: throw new Error
와 같은 기능. => 컴파일 정지진짜 배운게 많았다...SCSS는 JS와 CSS를 잘 버무려놓은 언어같다. 친숙하지만 다시배우는 느낌...?
그래도 거의 비슷해서 다행이다ㅋㅋ
내가 몰랐던게 정말 많구나 싶고 CSS는 진짜 기본기를 잘 다져놓아야겠음...!