๋ฐ˜์‘ํ˜•

์ƒํ™ฉ ์„ค๋ช… ๋ฐ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•


https://cdpn.io/pen/debug/xmjRNo

CSS์˜ transition ์†์„ฑ์€ ์š”์†Œ์˜ ์ƒํƒœ ๋ณ€ํ™”์— ๋”ฐ๋ฅธ ์‹œ๊ฐ์ ์ธ ๋ณ€ํ™”๋ฅผ ์ ์ง„์ ์œผ๋กœ ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ display ์†์„ฑ์ด none์—์„œ block ์œผ๋กœ ๋ณ€๊ฒฝ๋  ๋•Œ๋Š” transition ์†์„ฑ์„ ์‚ฌ์šฉํ•ด์„œ ์ด ๋ณ€ํ™”๋ฅผ ํ‘œํ˜„ํ•  ์ˆ˜ ์—†๋‹ค.

display: none ์†์„ฑ์€ ๋ Œ๋” ํŠธ๋ฆฌ์—์„œ ์š”์†Œ๋ฅผ ์™„์ „ํžˆ ์ œ๊ฑฐํ•˜์—ฌ ํ™”๋ฉด์—์„œ ์‚ฌ๋ผ์ง€๊ฒŒ ๋งŒ๋“ค๊ณ , ์ด๋กœ ์ธํ•ด ์–ด๋– ํ•œ CSS ์†์„ฑ๋„ ์ ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค. ๋ Œ๋” ํŠธ๋ฆฌ์—์„œ ์‚ฌ๋ผ์ง€๋ฉด ์š”์†Œ์˜ ์ƒํƒœ ๋ณ€ํ™”๋ฅผ ์ถ”์ ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— transition ๋ณ€ํ™”๊ฐ€ ์‹œ์ž‘๋˜๋Š” ์ง€์  ์—ญ์‹œ ์ฐพ์„ ์ˆ˜ ์—†๋‹ค.

์ด ๋ฌธ์ œ๋Š” 2๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

  1. animation + display ์‚ฌ์šฉ : animation ์†์„ฑ์€ ์š”์†Œ์˜ ์ƒํƒœ ๋ณ€ํ™”์™€ ์ƒ๊ด€์—†์ด ์• ๋‹ˆ๋ฉ”์ด์…˜ ์‹คํ–‰
  2. transition + visibility ์‚ฌ์šฉ : visibility ์†์„ฑ์€ ๋ Œ๋” ํŠธ๋ฆฌ/๊ณต๊ฐ„์€ ์œ ์ง€ํ•œ ์ฑ„ ํ™”๋ฉด์—์„œ๋งŒ ์ˆจ๊น€
    • ์ ‘๊ธฐ : visibility: hidden; max-height: 0;
    • ํŽผ์น˜๊ธฐ : visibility: visible; max-height: 150px; (๋ธŒ๋ผ์šฐ์ € ๋†’์ด๋ฅผ ์ค„์ด๋ฉด ๊ธ€์ž๊ฐ€ ์ค„๋ฐ”๊ฟˆ ๋ผ์„œ ์š”์†Œ๊ฐ€ ๋†’์ด๋ฅผ ๋” ์ฐจ์ง€ํ•˜๊ฒŒ ๋˜๋ฏ€๋กœ height ๋Œ€์‹  max-height ์†์„ฑ์„ ์‚ฌ์šฉํ•œ๋‹ค)
// transition + visibility ์‚ฌ์šฉ ์˜ˆ์‹œ (Tailwind CSS)
function Accordion() {
  const [showDetail, setShowDetail] = useState(false);
  // ...
  return (
    <div
      className={classnames("transition-all ease-linear duration-200", {
        "invisible max-h-0 opacity-0 -mb-[13px]": !showDetail,
        "max-h-[150px]": showDetail,
      })}
    >
      <NoticeEntries />
    </div>
  );
}

 

์š”์†Œ ์ˆจ๊น€ ๋ฐฉ์‹ ์ฐจ์ด์ 


  ๋ Œ๋” ํŠธ๋ฆฌ ๋ฆฌํ”Œ๋กœ์šฐ ๋ฆฌํŽ˜์ธํŠธ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ DOM ํŠธ๋ฆฌ
display: none ์ œ์™ธ ๋ฐœ์ƒ ๋ฐœ์ƒ ๋น„ํ™œ์„ฑ ์œ ์ง€
visibility: hidden ์œ ์ง€ ๋ฐœ์ƒ ์•ˆํ•จ ๋ฐœ์ƒ ๋น„ํ™œ์„ฑ ์œ ์ง€
opacity: 0 ์œ ์ง€ ๋ฐœ์ƒ ์•ˆํ•จ ๋ฐœ์ƒ ํ™œ์„ฑ ์œ ์ง€

display: none

  • ๋ Œ๋” ํŠธ๋ฆฌ : ์ œ์™ธ (๋ Œ๋” ํŠธ๋ฆฌ์—์„œ ์™„์ „ํžˆ ์ œ๊ฑฐ)
  • ๋ฆฌํ”Œ๋กœ์šฐ : ๋ฐœ์ƒ (๋ Œ๋” ํŠธ๋ฆฌ์—์„œ ์ œ์™ธ๋์œผ๋ฏ€๋กœ ๋ ˆ์ด์•„์›ƒ ์žฌ๊ณ„์‚ฐ)
  • ๋ฆฌํŽ˜์ธํŠธ : ๋ฐœ์ƒ (๊ฐ€์‹œ์„ฑ ๋ณ€ํ™”๊ฐ€ ์ƒ๊ฒผ์œผ๋ฏ€๋กœ)
  • ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ : ๋น„ํ™œ์„ฑ
  • DOM ํŠธ๋ฆฌ : ์œ ์ง€ (์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ์กฐ์ž‘ ๊ฐ€๋Šฅ)

 

visibility: hidden

  • ๋ Œ๋” ํŠธ๋ฆฌ : ์œ ์ง€ (ํ™”๋ฉด์—” ์•ˆ๋ณด์ด์ง€๋งŒ ๊ณต๊ฐ„์€ ์ฐจ์ง€)
  • ๋ฆฌํ”Œ๋กœ์šฐ : ๋ฐœ์ƒ ์•ˆํ•จ (๋ ˆ์ด์•„์›ƒ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์œผ๋ฏ€๋กœ)
  • ๋ฆฌํŽ˜์ธํŠธ : ๋ฐœ์ƒ (๊ฐ€์‹œ์„ฑ ๋ณ€ํ™”๊ฐ€ ์ƒ๊ฒผ์œผ๋ฏ€๋กœ)
  • ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ : ๋น„ํ™œ์„ฑ
  • DOM ํŠธ๋ฆฌ : ์œ ์ง€ (์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ์กฐ์ž‘ ๊ฐ€๋Šฅ)

 

opacity: 0

  • ๋ Œ๋” ํŠธ๋ฆฌ : ์œ ์ง€ (ํ™”๋ฉด์—” ์•ˆ ๋ณด์ด์ง€๋งŒ ๊ณต๊ฐ„์€ ์ฐจ์ง€)
  • ๋ฆฌํ”Œ๋กœ์šฐ : ๋ฐœ์ƒ ์•ˆํ•จ (ํˆฌ๋ช…๋„ ๋ณ€๊ฒฝ์€ ๋ ˆ์ด์•„์›ƒ์— ์˜ํ–ฅ ์•ˆ ์คŒ)
  • ๋ฆฌํŽ˜์ธํŠธ : ๋ฐœ์ƒ (ํˆฌ๋ช…๋„๊ฐ€ ๋ณ€๊ฒฝ๋์œผ๋ฏ€๋กœ)
  • ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ : ํ™œ์„ฑ
  • DOM ํŠธ๋ฆฌ : ์œ ์ง€ (์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ์กฐ์ž‘ ๊ฐ€๋Šฅ)

 


๊ธ€ ์ˆ˜์ •์‚ฌํ•ญ์€ ๋…ธ์…˜ ํŽ˜์ด์ง€์— ๊ฐ€์žฅ ๋น ๋ฅด๊ฒŒ ๋ฐ˜์˜๋ฉ๋‹ˆ๋‹ค. ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ•ด ์ฃผ์„ธ์š”
๋ฐ˜์‘ํ˜•