728x90

레이아웃(Layout)은 웹페이지나 애플리케이션의 UI(User Interface)를 설계하는데 매우 중요한 요소입니다. React에서 레이아웃을 만드는 것은 HTML과 CSS를 사용하는 일반적인 웹 개발과 비슷하지만, React에서는 컴포넌트(Component)를 사용하여 레이아웃을 구성합니다.

최종적으로는 위와 같은 결과물을 만드는 것이 목표입니다.

 

 

1. Layout 구성

 

레이아웃 구성은 크게 4부분으로 이루어져 있습니다.

헤더 - 컨텐츠 + 사이드바 - 푸터 여기서 사이드바는 헤더에 추가될 버튼으로 나왔다가 사라졌다가 할거기 때문에

헤거 - 컨텐츠 - 푸터 크게 3부분으로 우선 나누어 줄 예정입니다.

 

2. 디렉토리 생성

components 디렉토리에 Layout 디렉토리를 만들고 index.js 파일을 하나 만들어 줍니다.

추가적으로 Header 와 Footer 도 마찬가지로 만들어 줍니다.

2. 코드 작성

먼저 Header/index.js에 Header 컴포넌트를 하나 만들어 줍니다.

// components/Header/index.js

export default function Header() {
  return <header></header>;
}

Footer 도 마찬가지로 만들어 주겠습니다.

// components/Footer/index.js

export default function Footer() {
  return <footer></footer>;
}

이제 Layout/index.js 에 Layout 컴포넌트를 만들어 주면 됩니다. 

main 태그로 헤더 - 컨텐츠 - 푸터를 감싸고, 컨텐츠 부분은 section 태그에 id = "content"를 사용해 주겠습니다.

section#content 에는 props 중 children 속성을 넣어 주면, Layout 컴포넌트를 사용하는 컴포넌트들을 동일한 Layout을 가지는 것으로 만들어 줄 수 있습니다.

 

// Layout/index.js

import Footer from "../Footer";
import Header from "../Header";

export default function Layout({ children }) {
  return (
    <main>
      <Header />
      <section id="content">{children}</section>
      <Footer />
    </main>
  );
}

3. Layout으로 감싸주기

우선은 main 화면을 제외하고는 만들어 져있는 메뉴들의 페이지들은 모두 같은 Layout을 사용한다고 생각하고, 각 컴포넌트를 Layout으로 감싸주면 될것같습니다. 그런데 그러면 비효율적일 수도 있다는 생각이 들어 App.js 에서 Layout 을 import 해서 각 페이지 Route 들을 한번에 감싸 줍니다.

 

 

import { BrowserRouter, Route, Routes } from "react-router-dom";
import "./App.css";
import Layout from "./components/Layout";
import Main from "./pages/Main";
function App() {
  return (
    <div className="App">
      <BrowserRouter>
        <Routes>
          {/* Main */}
          <Route path="/" element={<Main />} />
        </Routes>
        <Layout>
          <Routes>
            {/* Introduction */}
            {/* Work */}
            {/* Demo */}
            {/* Component */}
          </Routes>
        </Layout>
      </BrowserRouter>
    </div>
  );
}

export default App;

 

그런데 아직 모든 페이지가 컴포넌트들을 하나도 안만들었기 때문에 Test 컴포넌트를 하나 만들어서 Layout의 스타일만 우선 지정해 보겠습니다.

 

4. Style

Test 컴포넌트를 하나 생성해 줍니다.

// components/Test/index.js

export default function Test() {
  return <div>테스트 입니다.</div>;
}

App.js 에 Route로 추가 해 줍니다.

 

import { BrowserRouter, Route, Routes } from "react-router-dom";
import "./App.css";
import Layout from "./components/Layout";
import Main from "./pages/Main";
import Test from "./components/Test";
function App() {
  return (
    <div className="App">
      <BrowserRouter>
        <Routes>
          {/* Main */}
          <Route path="/" element={<Main />} />
        </Routes>
        <Layout>
          <Routes>
            {/* Introduction */}
            {/* Work */}
            {/* Demo */}
            {/* Component */}

            {/* Test */}
            <Route path="/test" element={<Test />} />
          </Routes>
        </Layout>
      </BrowserRouter>
    </div>
  );
}

export default App;

localhost:3000/test 주소로 접속해 보면 아래와 같이 나오게 됩니다.

우선 처음 구상한 헤더-컨텐츠-푸터 3부분으로 이루어진 Layout 스타일을 만들기 위해서 

flex 속성을 사용하려고 합니다.

layout.css 파일을 만들어서 import 해주고 각 태그의 style을 지정해 줍니다.

main {
  display: flex;
  flex-direction: column;
  height: 100%;
  min-height: 500px;
  max-width: 1200px;
  width: 100%;
  margin: 0 auto;
}

header {
  height: var(--headerHeight);
  width: 100%;
  background-color: aqua;
}

section#content {
  width: 100%;
  flex-grow: 1;
  background-color: crimson;
}

footer {
  height: var(--footerHeight);
  width: 100%;
  background-color: blanchedalmond;
}

PortFolio : https://hiio420.com  

Figma: https://www.figma.com/file/WJVwsW99LwZ2B1W3PKDASM/Hiio420?node-id=0%3A1&t=W1IV0P9M12hXOVpp-1

 

 

728x90

+ Recent posts