고정 vs 동적 Nav Links 메뉴 토글 스타일링 in React

발행: (2026년 1월 15일 오전 03:48 GMT+9)
3 min read
원문: Dev.to

Source: Dev.to

Fixed Height Approach

이 접근법에서는 메뉴가 열릴 때 고정된 높이를 지정합니다. 메뉴 높이를 미리 알고 있을 때 잘 작동합니다.

import { useState } from 'react';
import { FaBars } from 'react-icons/fa';
import { links } from './data';

const Navbar = () => {
  const [showLinks, setShowLinks] = useState(false);

  return (
    
       setShowLinks(!showLinks)}>
        
      

      
        

          {links.map(link => (
            
              {link.text}
            
          ))}
        

      
    
  );
};

export default Navbar;
.links-container {
  height: 0;
  overflow: hidden;
  transition: height 250ms ease-in-out;
}

.links-container.open {
  height: 10rem; /* Adjust as needed */
}

이 예시에서는 메뉴 컨테이너의 높이가 기본적으로 0으로 설정되고, 메뉴가 열리면 높이가 10rem으로 설정됩니다.

Dynamic Height Approach

동적 높이 접근법은 메뉴 내용에 따라 자동으로 높이를 조절합니다. 항목 수가 가변적인 경우에 좋은 선택입니다.

import { useState, useRef } from 'react';
import { FaBars } from 'react-icons/fa';
import { links } from './data';

const Navbar = () => {
  const [showLinks, setShowLinks] = useState(false);
  const linksRef = useRef(null);

  const linksContainerStyles = {
    height: showLinks ? `${linksRef.current?.offsetHeight}px` : 0,
  };

  return (
    
       setShowLinks(!showLinks)}>
        
      

      
        

          {links.map(link => (
            
              {link.text}
            
          ))}
        

      
    
  );
};

export default Navbar;
.links-container {
  overflow: hidden;
  transition: height 250ms ease-in-out;
}

이 경우 높이는 메뉴 내부 콘텐츠를 기반으로 동적으로 계산됩니다. 메뉴가 열리면 높이가 콘텐츠에 맞게 조정됩니다.

Key Differences

  • Fixed Height: 높이가 수동으로 설정되며 업데이트하지 않는 한 변하지 않습니다. 간단하지만 유연성이 떨어집니다.
  • Dynamic Height: 높이가 콘텐츠에 따라 자동으로 조정됩니다. 더 유연하지만 약간 복잡합니다.

Conclusion

두 방법 모두 상황에 따라 유용합니다. 메뉴에 고정된 항목 수가 있다면 고정 높이 접근법을 사용하고, 항목 수가 변하거나 더 큰 유연성이 필요하면 동적 높이 접근법을 선택하세요.

Credits: John Smilga’s course

Back to Blog

관련 글

더 보기 »

freeCodeCamp와 학습하기

새해가 몇 가지 변화를 가져왔고, 바람직하게도 약속들을 가져왔습니다. 저는 DEV Community에 가입했고, freeCodeCamp에서도 새 계정을 만들었으며, 버전…