본문 바로가기

Frontend/JS

[JS] 자바스크립트에 CSS 적용하기/classList/toggle

728x90
가져온 Element를 이용해 해당 Element의 스타일을 바꾸는 방법을 포스팅하려고 한다.
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <div id="title">
       Hello
    </div>
    <script src="./src/index.js"></script>
</body>
</html>
const title=document.querySelector('.title');
  • 먼저 querySelector( )을 이용해 HTML 파일에서 div Element를 가져온다.

 Element 객체를 이용해 값을 바꾸는 방법

element 객체의 내부를 보면,

  • 객체 내부에 style 값이 있는 것을 확인할 수 있다.
  • 이를 이용하면 간단하게 바꿀 수 있다.
const title=document.querySelector('.title');
title.style.color='blue';

  • style값을 이용해 element 내부 text 값을 간단하게 파란색으로 바꿨다.
  • 하지만 자바스크립트는 동적인 부분을 관리하고, Style은 CSS에서 바꿔주는 것이 훨씬 깔끔하다.

CSS파일을 import해서 style을 지정해 주는 방법

  • CSS파일에서 글자색을 파란색으로 해주는 스타일을 만든다.
.blue {
  color: blue;
}

이제 이 clicked라는 class를 추가해주면 된다.

자바스크립트에서는 classList라는 element의 class를 추가, 삭제 등의 기능을 해주는 프로퍼티가 있다.
위의 title element의 classList를 콘솔에 찍어봤다.

import "./styles.css";
const title = document.querySelector(".title");
console.log(title.classList);

 

  • 위와 같이 해당 element가 가진 class list를 볼 수 있다.
  • 이 list에 원하는 class를 추가하면 그 element의 스타일을 추가할 수 있다.
import "./styles.css";
const title = document.querySelector(".title");
title.classList.add("blue");

  • 위에서 만든 blue class를 추가했다.
  • 자바스크립트의 이벤트 리스너를 이용해 이벤트 발생 시에 class를 추가하는 것도 가능하다.
import "./styles.css";
const title = document.querySelector(".title");
const handleClick = () => {
  title.classList.add("blue");
};
title.addEventListener("click", handleClick);
  • 저번 포스팅의 내용처럼 click 이벤트 발생 시에 handleClick 함수가 동작하게 했다.
  • 그렇다면 다시 element를 클릭했을 때 색이 돌아오게 할 수는 없을까?
  • 이를 해결해주는 것이 toggle 메소드이다.

classList.toggle( )

  • toggle 메서드는 전달된 class가 있으면 해당 class를 삭제하고, 없으면 해당 class를 추가해주는 메서드이다.
  • 위에서 말했던, element를 클릭하면 색을 바꿔주고, 다시 클릭하면 원래대로 돌아오게 해주는 기능을 구현해보자.
	import "./styles.css";
const title = document.querySelector(".title");
const handleClick = () => {
  title.classList.toggle("blue");
};
title.addEventListener("click", handleClick);
  • 이는 앞서 작성했던 코드에서 add 메서드를 위와 같이 toggle 메서드로 바꿔주기만 하면 된다.
728x90