9-1. 반응형 컴포넌트 PageWrapper 만들기

현재 헤더가 position: fixed 로 최상단에 위치하다보니, 컴포넌트 하단에 다른 뷰를 렌더링 하게 된다면, 헤더의 크기만큼 가려질 것입니다.

그러므로, 우리는 헤더 하단의 내용을 감싸주고 상단 여백 58px (헤더의 크기를) 주는 래핑 컴포넌트를 만들고 추가적으로 이 컴포넌트에 반응형 디자인 속성을 적용하여 브라우저의 크기에 따라 width 가 설정되도록 만들어보겠습니다.

이 컴포넌트는 프로젝트 기반에 관련된 컴포넌트 이므로 Base 로 분류하겠습니다.

src/components/Base/PageWrapper.js

import React from 'react';
import styled from 'styled-components';
import { media } from 'lib/styleUtils';

// 헤더 아래에 위치하도록 상단 패딩
const Wrapper = styled.div`
    margin-top: 58px;
    padding: 1rem;

    width: 1200px;
    margin-left: auto;
    margin-right: auto;

    ${media.wide`
        width: 992px;
    `}

    ${media.desktop`
        width: 100%;
    `}
`;

const PageWrapper = ({responsive, children}) => (
    <Wrapper responsive={responsive}>
        {children}
    </Wrapper>
);

export default PageWrapper;

이제, 이 컴포넌트를 Home 페이지에서 불러와볼까요?

src/pages/Home.js

import React, { Component } from 'react';
import PageWrapper from 'components/Base/PageWrapper';

class Home extends Component {
    render() {
        return (
            <PageWrapper>
                Home
            </PageWrapper>
        );
    }
}

export default Home

이제, 내용이 헤더에 가려지지 않고, 브라우저가 너비에 따라 PageWrapper 의 크기가 알맞게 조정이 되고 페이지의 중앙에 위치하게 됩니다.

수정사항

9-1 이전에 git clone 을 한 경우에는 Header 컴포넌트의 Positioner 부분에 top: 0px 가 누락되어있습니다. 프로젝트를 클론했었더라면 Header 컴포넌트의 Positioner 를 다음과 같이 수정하세요:

const Positioner = styled.div`
    display: flex;
    flex-direction: column;
    position: fixed;
    width: 100%;
    top: 0px;
    ${shadow(1)}
    z-index: 10;
`;

클론을 하지 않은 경우엔 이 부분은 무시하시면 됩니다.

results matching ""

    No results matching ""