일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 이벤트 수식어
- intersection opserver
- vue mixin
- postcss
- 다른컴퓨터에서 git사용
- 프로그래머스 데브코스
- vue 지역 컴포넌트
- vue 이벤트 수신
- SCSS forward
- 리스트 렌더링
- SCSS extend
- 프로그래머스 데브코스 프론트엔드
- 폼 입력 바인딩
- react next
- vuex map
- 프로그래머스 K_Digital Training
- 프로그래머스 프론트엔드 데브코스
- Vue
- nextjs사용법
- netlify redirect
- KDT 프로그래머스 데브코스 프론트엔드
- Spacer
- SCSS use
- SCSS import
- 리액트
- KDT 프로그래머스
- 고양이 사진 검색기
- flex
- 쌓임맥락
- git 같은계정 다른 컴퓨터
- Today
- Total
혼자 적어보는 노트
프로그래머스 데브코스 TIL - Day 32 본문
✅ 오늘의 학습
📌 CSS 심화 (3)
- SCSS 변수, 데이터, 연산자
- mixin을 사용한 재활용
변수
파일 상단에 전역 변수를 사용할 수 있고
선택자에서 사용 시 지역적으로 선언되어 유효범위를 가진다.
*재할당 가능
!global
지역변수에 $h:200px !global;
global 플래그를 사용하여 전역화 가능
!defualt
지역변수를 지정할 때 이미 동일한 변수가 있을 경우
기본 값을 사용하겠다 라는 뜻
$primary: blue;
.box {
$primary: orange !default;
background-color: $primary /* blue */
}
문자 보간
#{}를 사용하여 변수값을 넣을 수 있다.
$name: "jay";
$path: "assets/images";
.box {
background-image: url("#{$path}/#{$name}.png");
/* background-image: url("assets/images/jay.png"); */
}
.box-#{$name} {
width: 100px;
}
데이터
SCSS에서 변수로 사용할 수 있는 데이터에는
Number, String, Color 외에도 Boolean, Null, List, Map이 있다.
/* Boolean */
$boolean: true;
/* Lists [0, 1, 2, 3] */
$list1: (10px, 20px, 30px);
$list2: 10px, 20px, 30px;
$list3: 10px 20px 30px;
$list4: apple, banana, cherry;
/* Null */
$null : null;
/* Map { key: value } */
$map1: ( key: value );
$map2: ( a: apple, b: banana, c: cherry );
산술 연산자
+, -, *, /, %의 산술 연산자를 사용하여 계산된 값을 사용할 수 있다.
📌 주의해야 할 점
단축 속성 시 어떤 값인지 구분할 수 없기 때문에 " / " 를 사용하는데
이 부분 때문에 나누기 연산(/)이 의도하지 않게 처리될 수 있다.
background: 100px 100px / 200px 200px;
font: 16px / 32px / serif;
➗ 나누기 연산 처리 방법
$a : 20px;
width: (20px / 2) // 괄호 사용
width: ($a / 2) // 변수에 담아 사용
width: 20px / 2 + 1px // 다른 연산자와 함께 사용
* 단위가 다른 경우 연산이 되지 않기 때문에 CSS의 calc() 사용하기
비교 연산자
==, !=, <, >, <=, >=를 사용하여 비교 연산을 할 수 있다.
.box {
$w: 100px;
@if ($w != 100px){
width: $w;
} @else {
width: 200px;
}
}
논리 연산자
and, or, not을 사용하여 논리 연산이 가능하다.
.box {
$w: 100px;
$h: 200px;
@if ($w != 100px and $h > 200px){
width: 100px;
height: 200px;
}
}
@mixin
반복적으로 사용할 스타일을 미리 만들어 놓고 재활용을 할 수 있다.
@include를 사용하여 불러올 수 있다.
매개변수를 사용할 수 있고 매개변수의 기본 값을 설정해 둘 수 있다.
@mixin large-text($size: 30px) {
font-size: $size;
font-weight: bold;
font-family: sans-serif;
color: red;
}
.box1 {
sidth: 100px;
height: 200px;
@include large-text;
}
.box2 {
sidth: 100px;
height: 200px;
@include large-text(40px);
}
가변 인수
몇개의 인수가 들어올 지 모르는 상태에서 ...을 사용하여 한 번에 인수를 받아서 사용할 수 있다.
@mixin bg($w, $h, $b...) {
width: $w;
height: $h;
background: $b;
}
.box {
@include bg(
100px,
200px,
url("/images/a.png") no-repeat center,
url("/images/a.png") repeat-x,
url("/images/a.png") repeat-y center / contain,
)
}
전달하는 인수로도 ...을 사용할 수 있다.
@mixin spread($p, $t, $r, $b, $l) {
${p}:{
top: $t;
right: $r;
bottom: $b;
left: $l;
}
}
.box {
$m: 10px 20px 30px 40px;
@include spread(margin, $m...);
@include spread(padding, 10px 20px 30px 40px...);
}
키워드 인수
키워드 인수를 사용하여 매개변수의 위치를 생각하지 않고 전달할 수 있다.
@mixin spread($p, $t:null, $r:null, $b:null, $l:null) {
${p}:{
top: $t;
right: $r;
bottom: $b;
left: $l;
}
}
.box {
@include spread(margin, $t: 20px, $b: 30px);
}
@content
mixin을 사용하고 특정한 스타일 블럭을 작성하고 @content를 통해 추가할 수 있다
@mixin icon($p, $t:null, $r:null, $b:null, $l:null) {
&::afetr {
content: url($url);
@content;
}
}
.box {
@include icon("/images/icon.png"){
position: absolute;
};
}
중첩을 사용한 @media
@use "sass:map";
@mixin media($name) {
$breakpoints: (
sm: 576px,
md: 992px,
lg: 1400px
);
@media all and (max-width: map.get($breakpoints, $name)){
@content;
}
}
.box {
width: 400px;
height: 400px;
@include media(sm) {
width: 100px;
};
@include media(md) {
width: 200px;
};
@include media(lg) {
width: 300px;
};
}
using으로 @content의 인수 받기
using키워드를 사용하여 @content에서 전달한 인수를 넣어줄 수 있다.
@use "sass:map";
@mixin media($name) {
$breakpoints: (
sm: 576px,
md: 992px,
lg: 1400px
);
@media all and (max-width: map.get($breakpoints, $name)){
@content(map.get($breakpoints, $name));
}
}
.box {
width: 400px;
height: 400px;
@include media(sm) using ($size){
width: 100px;
_debug: $size;
};
}
삼항연산자
괄호에 ,로 구분하여 삼항연산자를 사용할 수 있다.
/* condition ? true : false */
if( condition, true, false )
✍ 느낀 점
scss를 꽤 자주 사용했었는데 완전한 겉핥기 식으로 알고 사용했다 라는 생각이 들었다.
연산을 할 수 있다는 점은 알고 있었으나 다양한 예시 사례들을 알고 나니
좀 더 활용해 볼 수 있을 것 같다.
개인적으로 라이브러리를 사용하는 스타일보다는 직접 조작하는 것이 편하다 보니
이번 SCSS강의는 너무나도 유익했다.
'스터디' 카테고리의 다른 글
프로그래머스 데브코스 TIL - Day 34 (0) | 2022.05.06 |
---|---|
프로그래머스 데브코스 TIL - Day 33 (0) | 2022.05.04 |
프로그래머스 데브코스 TIL - Day 31 (0) | 2022.05.02 |
프로그래머스 데브코스 TIL - Day 30 (0) | 2022.05.01 |
프로그래머스 데브코스 TIL - Day 29 (0) | 2022.04.30 |