Web Dev/8. 메모

Tailwind css로 초간단 Dropdown 메뉴 구성하기

hYhY1234 2021. 6. 2. 11:23
728x90

 

const DropDown: FC<ChildrenProps> = ({ children, title }) => {
  const [open, setOpen] = useState(false);
  return (
    <div className="dropdown relative w-24 ">
      <button
        className="text-center w-full py-1 focus:outline-none"
        onClick={() => setOpen(!open)}
      >
        {title}
      </button>
      // children으로 받은 것들에 적용할때
      {cloneElement(children, {
        className: `transform ${
          open ? `scale-y-100` : `scale-y-0`
        } transition duration-500 
        ease-in-out origin-top 
        w-full bg-white absolute text-black text-center border-2`,
        onClick: () => setOpen(!open),
      })}
      
      // 바로 style 적용
      <ul className={
      `transform ${
          open ? `scale-y-100` : `scale-y-0`
        } transition duration-500 
        ease-in-out origin-top 
        w-full bg-white absolute text-black text-center border-2`
      }
      onClick={() => setOpen(!open)}
      >
        <li className="py-1">
          <button
            onClick={() => {
              alert("signOut");
            }}
          >
            Sign out
          </button>
        </li>
        <li>
          <button
            className="py-1"
            onClick={() => {
              alert("signOut");
              // auth.signout(() => history.push("/"));
            }}
          >
            Sign out
          </button>
        </li>
      </ul>
      
    </div>
  );
};

 

tailwindCSS에서 제공하는 요런 클래스들로 해결이 가능하다. 기본적인 원리는 open이 되어있지 않았을때는 scale을 0으로 잡은다음에, scale100으로 원래대로 키우는 것이다. 이때 transform origin을 위쪽으로 잡아서 드랍다운처럼 떨어지도록 구성가능하다. 

 

 

 

TailwindCSS가 편하긴한데, 확실히 좀 익숙하기 전까진 좀 성가신 면이 있는데 DropDown 구성하는거치고는 정말 빨리 끝난대다가 꽤나 부드러워서 만족한다.