๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
JavaScript/Nomad Coders

[TIL] ๐Ÿ’ก Day 5 - JS๋ฅผ ํ†ตํ•ด์„œ CSS๋ฅผ ์กฐ์ž‘ํ•˜๋Š” ๋ฐฉ๋ฒ•๋“ค

by vividmin 2022. 3. 13.
320x100

โœ” ์ด ํฌ์ŠคํŒ…์€ ๋…ธ๋งˆ๋“œ์ฝ”๋” - "๋ฐ”๋‹๋ผ JS๋กœ ํฌ๋กฌ ์•ฑ ๋งŒ๋“ค๊ธฐ๋ฅผ ๋“ค์œผ๋ฉด์„œ ๊นƒํ—ˆ๋ธŒ์— ๊ธฐ๋กํ•œ ํ•„๊ธฐ๋ฅผ ์˜ฎ๊ธด ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.

 

JS๋ฅผ ํ†ตํ•ด์„œ CSS๋ฅผ ์กฐ์ž‘ํ•˜๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์„ ๋ฐฐ์› ๋‹ค.๐Ÿ˜Š

 

 

๐ŸŒฑ CSS in Javascript 1๏ธโƒฃ

๐Ÿ‘‰ JS์•ˆ์—์„œ style๋กœ CSS์— ์ ‘๊ทผํ•˜์—ฌ ์กฐ์ž‘ํ•˜๋Š” ๋ฐฉ๋ฒ•

  • ์˜ˆ์ œ ์ฝ”๋“œ
    const h1 = document.querySelector("div.hello:first-child h1"); 
    
    function handleTitleClick() { 
        // getter - ๊ฐ’์„ ๊ฐ€์ ธ์˜ด 
        console.log(h1.style.color); 

        // setter - ๊ฐ’์„ ์„ค์ •ํ•จ 
        h1.style.color = "cornflowerblue"; 

        console.log(h1.style.color); 
    } 

    // console๊ฒฐ๊ณผ : ์ฒ˜์Œ์€ ๋นˆ์นธ์œผ๋กœ ๋‚˜์˜ค๊ณ , ๊ทธ ๋‹ค์Œ๋ถ€ํ„ฐ๋Š” blue๋กœ ๋‚˜์˜จ๋‹ค.๐Ÿ™‹๐Ÿป‍โ™€๏ธ

 

  • ๋ชฉํ‘œ โ“
    • ๊ธ€์ž๋ฅผ ๋ˆ„๋ฅด๋ฉด ๐Ÿ”ต, ํ•œ๋ฒˆ ๋” ๋ˆ„๋ฅด๋ฉด ๐ŸŸ ์ƒ‰์œผ๋กœ ๋ณ€ํ•˜๊ฒŒ
    function handleTitleClick() { 
        if(h1.style.color === "cornflowerblue") { 
        	h1.style.color = "tomato";
        }else { 
        	h1.style.color = "cornflowerblue"; 
        } 
    } 

    h1.addEventListener("click", handleTitleClick);
  • ์กฐ๊ธˆ ๋” ๋ฐœ์ „ ๋œ ๋ฒ„์ „ (๋ณ€์ˆ˜์— ๊ฐ’ ์ €์žฅํ•˜๊ธฐ)
    function handleTitleClick() { 
        const currentColor = h1.style.color; 
        let newColor; // new color๋Š” ์•„๋ฌด๊ฒƒ๋„ ์—†๋Š” ๋น„์–ด์žˆ๋Š” ๋ณ€์ˆ˜ 

        if(currentColor === "cornflowerblue") { 
            newColor = "tomato"; 
        }else { 
            newColor = "cornflowerblue"; 
        } 
            h1.style.color = newColor; 
        ๐Ÿ‘† 
        /** 
            ๐Ÿ“Œ ์กฐ๊ฑด๋ฌธ๊นŒ์ง€๋งŒ ์‹คํ–‰ํ•˜๋ฉด ์šฐ๋ฆฌ h1์—๊ฒŒ๋Š” ์•„๋ฌด์ผ๋„ ์ผ์–ด๋‚˜์ง€ ์•Š๋Š”๋‹ค. 
            ๋”ฐ๋ผ์„œ ๊ฐ’์„ ํ• ๋‹นํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค. 
        */ 
    }
    
    h1.addEventListener("click", handleTitleClick);

 

 

๐ŸŒฑ CSS in Javascript 2๏ธโƒฃ  

๐Ÿ‘‰ element์—์„œ className ๋ณ€๊ฒฝ, ์ œ๊ฑฐ, ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•(๋งค์šฐ ์ถ”์ฒœ๋˜๋Š” ๋ฐฉ๋ฒ•์€ โŒ)

  • ์˜ˆ์‹œ ์ฝ”๋“œ
    • ํด๋ฆญ ์‹œ ๊ธ€์ž ์ƒ‰์ƒ ๋ณ€๊ฒฝ
    /* CSS์ฝ”๋“œ */

    h1 {
    color: cornflowerblue;
    }

    .active {
        color: tomato;
    }
    // JS์ฝ”๋“œ
    const h1 = document.querySelector("div.hello:first-child h1");

    function handleTitleClick() { 
    h1.className = "active";
    }

    h1.addEventListener("click", handleTitleClick);
    // ๊ฒฐ๊ณผ : ํด๋ฆญ → ๊ธ€์ž์ƒ‰์ด ๐Ÿ”ต → ๐ŸŸ 
  • ๋ชฉํ‘œ โ“ → ํด๋ฆญํ•˜๋ฉด ๐Ÿ”ต → ๐ŸŸ  ๋˜๊ณ , ๋‹ค์‹œ ํด๋ฆญํ•˜๋ฉด ๐ŸŸ  → ๐Ÿ”ต ๋˜๋„๋ก!
    function handleTitleClick() { 
        if( h1.className === "active") { 
            h1.className=""; 
        }else { 
            h1.className = "active"; 
        } 
    } 

    h1.addEventListener("click", handleTitleClick); 

    /** 
        ๊ฒฐ๊ณผ : ๋ชฉํ‘œ๋Œ€๋กœ ๋™์ž‘ํ•จ, 
        butโ— active๋ผ๋Š” string ๋ฐ˜๋ณต์‚ฌ์šฉ => error์˜ ์†Œ์ง€๐Ÿ˜ฑ 
    */
  • ๐Ÿ”ฅ ๊ฐœ์„ ๋œ ๋ฒ„์ „ ๐Ÿ™‹๐Ÿป‍โ™€๏ธ - ์กฐ๊ฑด๋ฌธ ์‚ฌ์šฉ โž• Class๋ฅผ ๋ณ€์ˆ˜๋กœ ์ ์šฉ
    function handleTitleClick() { 
        const clickedClass = "clicked"

    /** 
    ์ด๋ ‡๊ฒŒ ๋ณ€๊ฒฝ! ๐Ÿ‘‰ ํ•œ ๋ฒˆ๋งŒ ๋ณต๋ถ™ํ•˜๋ฉด ๋˜์„œ error๊ฐ€๋Šฅ์„ฑ ↓, 
    ๋˜ํ•œ ๋ณ€์ˆ˜๋ฅผ ์ž˜๋ชป์“ฐ๋ฉด console์—์„œ ์•Œ๋ ค์ฃผ๊ฒŒ ๋จ : ์‹ค์ˆ˜ ํ™•๋ฅ  ↓ 
    */ 

    if( h1.className === clickedClass) { 
            h1.className="";
        }else { 
            h1.className = clickedClass; 
        } 
    }
  • ClassName์˜ ๋ฌธ์ œ์  โ‰ ๐Ÿ˜ฑ
    • ๋งŒ์•ฝ element์— ์ด๋ฏธ class๊ฐ€ ์กด์žฌํ•  ๊ฒฝ์šฐ
      → event ์‹คํ–‰ ํ›„์—๋Š” ๊ธฐ์กด์˜ class๊ฐ€ ์‚ฌ๋ผ์ ธ ๋ฒ„๋ฆฐ๋‹ค.
<div><h1 class="sexy-font">Click me!</h1></div>
<!-- ์—ฌ๊ธฐ์— ํด๋ฆญ ์‹œ className์ด "cliked"๊ฐ€ ๋˜๋Š” ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด -->
๐Ÿ‘‡
<div><h1 class="clicked">Click me!</h1></div>
<!-- ์ด๋ ‡๊ฒŒ ๋˜์–ด๋ฒ„๋ฆฐ๋‹ค๐Ÿ˜ฅ → ๋‹ค๋ฅธ ๋ฐฉ๋ฒ• ํ•„์š”ํ•จโ—-->



๐ŸŒฑ CSS in Javascript 3๏ธโƒฃ

๐Ÿ‘‰ Class ์ „์ฒด๋ฅผ ๊ต์ฒดํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ์›๋ž˜ ์ƒํƒœ์— ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•

  • โœจClassListโœจ
    • element์˜ classs๋‚ด์šฉ๋ฌผ์„ ์กฐ์ž‘ํ•˜๋Š” ๊ฒƒ์„ ํ—ˆ์šฉ๐Ÿ™†‍โ™€๏ธ
    • 'contains' ์“ธ ์ˆ˜ ์žˆ๋‹ค → class๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธ
    const h1 = document.querySelector("div.hello:first-child h1");

    function handleTitleClick() {

        const clickedClass = "clicked";  

        if( h1.classList.contains(clickedClass)) {
            h1.classList.remove(clickedClass);
        }else {
            h1.classList.add(clickedClass);
        }
    }

    /** 
        ์ด์ œ font class๋Š” ๊ทธ๋Œ€๋กœ ์ ์šฉ๋œ ์ƒํƒœ์—์„œ
        "clicked" class๋„ ์ ์šฉ๊ฐ€๋Šฅํ•˜๋‹ค.
    */
  • ์ตœ์ข… Upgrade ๋ฒ„์ „ ๐Ÿ‘€ → toggle ์‚ฌ์šฉ
    • ํ† ํฐ์„ toggle ํ•œ๋‹ค : ํ† ํฐ์ด ์žˆ์œผ๋ฉด ์ œ๊ฑฐ, ์—†์œผ๋ฉด ์ถ”๊ฐ€
      ex. ๋ถˆ ๋„๊ธฐ - ์ผœ๊ธฐ, ์Šค๋งˆํŠธํฐ Lock - Unlock
    function handleTitleClick() { 
        h1.classList.toggle("clicked"); 
    } 
    
    // ๋งค์šฐ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋™์ผํ•œ ๊ธฐ๋Šฅ ์‹คํ–‰๊ฐ€๋Šฅ๐Ÿ™Š
  • ๋ฌผ๋ก  toggle์„ ๋จผ์ € ๋ฐฐ์›Œ๋„ ์ข‹์•˜๊ฒ ์ง€๋งŒ, ์•ž์˜ ๊ธฐ๋Šฅ์„ ์•Œ์•„์•ผ toggle์˜ ํŽธ๋ฆฌํ•จ์„ ๊ฐ•๋ ฌํ•˜๊ฒŒ ๋Š๋‚„ ์ˆ˜ ์žˆ๋‹ค.๐Ÿค—

 

 

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€