본문 바로가기
JS/JS_BASE

[기본문법 14] CSS in JavaScript part Two

by David.Ho 2023. 2. 14.
728x90
반응형
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="'viewport" content="width=device-width, initial-scale=1.0">
        <link rel="stylesheet" href="style.css">
        <title>Momentum App</title>
    </head>
    <body>
        <div class="hello">
            <h1 class="sexy-font asas">Click me!</h1>
        </div>
        <script src="app.js"></script>
    </body>
</html>
body {
    background-color: beige;
}

h1 {
    color: cornflowerblue;
    transition:color .5s ease-in-out;
}

.active {
    color: tomato;
}

.sexy-font{
    font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
}​
// event
const h1 = document.querySelector("div.hello:first-child h1");

function handleTitleClick() {

    const clickedClass = "active sexy-font"

    if(h1.className === clickedClass) {
        h1.className = "";
    } else {
        h1.className = clickedClass;
    }
}

h1.addEventListener("click", handleTitleClick);

style에 적합한 도구는 CSS
animation에 적합한 도구는 JS
css파일에
h1 {
color: cornflowerblue;
}
.clicked {
color: tomato;
}
를 적고
js에서는 h1에 active class를 전달하는거다.
const h1 = document.querySelector("div.hello:first-child h1");
function handleTitleClick() {
if(h1.className === "clicked") {
h1.className = "";
} else {
h1.className = "clicked";
}
}
h1.addEventListener("click", handleTitleClick);
여기서 JS는 HTML을 변경할거고, CSS는 HTML을 바라보고 style을 변경한다.
근데 조금 문제가 있는 active는 우리가 지어준 이름이다. raw value라고 하는데, 이름을 바꾸다가 에러가 발생할 수도 있다. const로 지정해라.
function handleTitleClick() {
const clickedClass = "clicked";
if(h1.className === clickedClass) {
h1.className = "";
} else {
h1.className = clickedClass;
}
}
이렇게 작성하면 에러가 발생할 수 있는 부분을 축소한다.

그런데, html의 h1에 sexy-font라는 class name이 있었는데 js를 실행하니 교체되었다.
최초의 class name이 사라졌고.., sexy-font라는 class name을 간직하고 싶은데 이건 어떻게 해야하는가.
const clickedClass = "clicked sexy-font";에 추가하면 되긴 하는데 좋은 방법은 아니다. class를 추가할 때마다 js랑 css에서 업데이트를 계속 해야하니까.
우리가 해야하는건 js로 모든 class name을 변경하지 않는거다. 이 sexy-font를 삭제하지 않고 clicked class를 변경하고 싶다는거지. 다음영상에서.

728x90
반응형

'JS > JS_BASE' 카테고리의 다른 글

[기본문법 15] CSS in JavaScript part Three  (0) 2023.02.14
[기본문법 13] CSS in JavaScript  (0) 2023.02.14
[기본 문법 12] More Events  (0) 2023.02.14
[기본 문법 11] Events part Two  (0) 2023.02.14
[기본 문법 10] Events  (0) 2023.02.14

댓글