레이아웃 구성 연구 - divider

IT/공통라이브러리 2024. 12. 10. 00:11

디자인 시안 중 아래와 같이 각 요소 사이에 동일한 divider 요소가 들어가고 일정한 간격을 유지하는 시안이 있다.

 

 

 

가운데 원이 각 사각형 요소들을 나누는 divider요소가 된다.

 

해당 레이아웃을 구성하기 위해 Layout컴포넌트를 아래와 같이 먼저 구성을 해줬다.

 

type LayoutProps = {
  children?: React.ReactNode;
  className?: string;
  divider?: React.ReactNode;
};

const Layout = ({ children, className }: LayoutProps) => {
  return <div className={className}>{children}</div>;
};

 

Layout 컴포넌트의 사용은 아래와 같이 구성할 수 있다.

 

const TestBox = () => <div className="flex-1 aspect-square bg-blue-100"></div>;

const LayoutPage = () => {
  return (
    <main>
      <div className="px-32 flex flex-row gap-12 my-[100px]">
        <TestBox />
        <TestBox />
        <TestBox />
        <TestBox />
      </div>

      <Layout
        divider={<TestBox></TestBox>}
        className="my-[100px] px-32 flex flex-row gap-12"
      >
        <TestBox />
        <TestBox />
        <TestBox />
        <TestBox />
      </Layout>
    </main>
  );
};

 

 

main의 첫번째 div 컨테이너는 먼저 별도의 컴포넌트를 구성하지 않고 유틸리티 css로 구성을 한것으로 아래와 같이 divider가 없이 구성된 화면을 구성할 수 있다.

 

 

 

여기서 divider를 구성하기 위해 아래의 divider컴포넌트를 구성해본다.

const Divider = () => (
  <div className="bg-blue-300 rounded-full w-[30px] h-[30px]"></div>
);

 

 

그리고 divider 컴포넌트를 추가하기 위해 원래의 gap-12를 gap-6으로 하여 간격을 유지할 수 있도록 한다.

const LayoutPage = () => {
  return (
    <main>
      <div className="px-32 flex flex-row gap-6 items-center my-[100px]">
        <TestBox />
        <Divider />
        <TestBox />
        <Divider />
        <TestBox />
        <Divider />
        <TestBox />
      </div>

      <Layout
        divider={<TestBox></TestBox>}
        className="my-[100px] px-32 flex flex-row gap-12"
      >
        <TestBox />
        <TestBox />
        <TestBox />
        <TestBox />
      </Layout>
    </main>
  );
};

 

 

이렇게 구성하여 아래와 같은 레이아웃을 구성해 볼 수 있다.

 

 

 

 

이제는 부모의 컨테이너에서 자식의 요소 사이에 divider 요소를 자동으로 추가하고, 별도의 추가 속성을 수정하지 않고, 추상화를 구현해 본다.

'IT > 공통라이브러리' 카테고리의 다른 글

소스코드 정리 - 주석  (0) 2025.01.09
grid 레이아웃 구성  (0) 2024.12.12
editor.js + nextjs header 이슈  (0) 2024.12.11
레이아웃 구성 연구 - divider 2  (0) 2024.12.10
공통 라이브러리  (0) 2023.07.11