일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Stack
- 자료구조
- Algorithm
- 백준
- NumPy
- MySQL
- dataframe
- pandas
- queue
- Selenium
- 알고리즘
- String Method
- aws jupyter notebook
- 프로그래머스
- 정보처리기사 c언어
- 알고리즘 스터디
- openCV
- 데이터시각화
- Matplotlib
- programmers
- type hint
- Join
- 코딩테스트
- javascript
- python
- 선그래프
- 가상환경
- 파이썬
- 알고리즘스터디
- 노마드코딩
- Today
- Total
조금씩 꾸준히 완성을 향해
[Nomad Coders -JS로 크롬앱 만들기] CSS in JavaScript 본문
CSS in JavaScript
자바스크립트에서 직접적으로 CSS 변경이 가능하다.
style 이라는 method를 사용한다.
const h1 = document.querySelector(".hello h1");
function handleTitleClick(){
const currnetColor = h1.style.color;
let newColor;
if(currnetColor === "blue"){
newColor = "tomato";
} else{
newColor = "blue";
}
h1.style.color = newColor;
}
h1.addEventListener("click", handleTitleClick);
이렇게 h1 태그의 글자 색을 변경가능하다. 그러나 이것은 권장되는 방식은 아니다.
왜냐하면 JS가 CSS의 영역을 직접적으로 건드리는 것이기 때문이다.
되도록이면 각각의 기능을 깔끔하게 분리시키는 게 이해하기도 쉽고 수정하기도 쉽다.
자바스크립트가 간접적으로 HTML을 변경하는 방식을 써보자.
function handleTitleClick(){
if(h1.className === "active"){
h1.className = "";
} else{
h1.className = "active";
}
}
이렇게 className을 이용해 태그에 class를 추가할 수 있고,
h1{
color: blue;
}
.active{
color: tomato
}
CSS 파일에서 해당 class의 글자색을 변경하면 된다.
참고로 값이 2번 이상 사용되면 무조건 변수로 지정하는 것이 좋다.
raw value의 반복된 사용은 에러의 확률을 높인다.
function handleTitleClick(){
const clickedClass = "active";
if(h1.className === clickedClass){
h1.className = "";
} else{
h1.className = clickedClass;
}
}
여기서 또 하나 예상되는 문제점이 h1의 class가 여러개일 경우이다.
className은 해당 태그의 class 전체를 교체하기 때문에
본래 있던 class들에 적용된 css가 다 사라지는 문제에 봉착하게 된다.
그 때 사용 가능한 method가 ClassList이다.
classList을 통해 HTML element에 특정 class가 포함되어 있는지를 확인할 수 있고,
element의 class 내용물을 조작할 수도 있다.
DOMTokenList.contains(token) : token이 해당 token-list에 포함되어 있는지 확인.
DOMTokenList.add(token1[, token2[, ...tokenN]]) : token을 해당 token-list에 추가
DOMTokenList.remove(token1[, token2[, ...tokenN]]) : token을 해당 token-list에서 제거
function handleTitleClick(){
const clickedClass = "active";
if(h1.classList.contains(clickedClass)){
h1.classList.remove(clickedClass);
} else{
h1.classList.add(clickedClass);
}
}
이렇게 class를 조작하면 오류없는 코드를 짤 수 있다.
마지막으로 이 여러 줄의 코드를 한 줄에 퉁칠 수 있는 치트키 toggle이 등장한다.
DOMTokenList.toggle(token [, force])
token이 존재하는지 확인한 후, 존재하면 제거하고 존재하지 않으면 추가한다.
현재 예제로 대입해 보면 class name이 존재하면 class name을 제거,
class name이 존재하지 않으면 class name를 추가한다는 것이다.
function handleTitleClick(){
h1.classList.toggle("active");
}
결국 한 줄의 코드로 마무리 완료!
'기타 언어 > JavaScript' 카테고리의 다른 글
[Nomad Coders -JS로 크롬앱 만들기] Login- Saving Username (0) | 2022.08.08 |
---|---|
[Nomad Coders -JS로 크롬앱 만들기] Login- Getting Username (0) | 2022.07.31 |
[JavaScript] Array 배열의 삽입과 삭제(push, pop, shift, unshift) (0) | 2022.07.27 |
[JavaScript] Array Searching 배열의 검색 (indexOf, lastIndexOf, includes) (0) | 2022.07.27 |
[JavaScript] Array Looping 배열 반복문 (for/for of/for in/ forEach) (0) | 2022.07.27 |