dukDukz

0727 Styled Component 의 장점 - props 값 전달 가능 본문

웹 개발/React

0727 Styled Component 의 장점 - props 값 전달 가능

헤일리_HJ 2021. 7. 27. 17:15
import Styled from 'styled-components'
import { useState } from 'react'

const Toggle = Styled.div`
     background : transparent;
    border-color : transparent;

    & > .nav-toggle {
        display : none;
    }

    & > .nav-toggle + label{
        display : block;
        width : 2.5rem;
        height : 2rem;
        position : relative;
        cursor : pointer;
    }

    & > .nav-toggle + label > span{
        display : block;
        position : absolute;
        width : 100%;
        height : 5px;
        border-radius : 30px;
        background : #000;
        transition : all .35s;
    }

    & > .nav-toggle + label > span:nth-child(1){ top : 0 }
    & > .nav-toggle + label > span:nth-child(2){ top : 50%; transform : translateY(-50%) }
    & > .nav-toggle + label > span:nth-child(3){ bottom : 0 }


    & > .nav-toggle:checked + label > span:nth-child(1){ top : 50%; transform: translateY(-50%) rotate(45deg); }
    & > .nav-toggle:checked + label > span:nth-child(2){ opacity : 0 }
    & > .nav-toggle:checked + label > span:nth-child(3){ bottom : 50%; transform: translateY(50%) rotate(-45deg); }
`


const Accordion = Styled.div`
    position: absolute;
    width: 100%;
    left : 0px;
    top: 10vh;
    z-index : 5;
    background: #fff;
    padding : 5vh 0;

    /* javascript 영역이다 - 아코디언이 visible 값에 따라 보이고 안보이게끔 함 */
    display:  ${props=>(props.flag? 'block' : 'none')};

    & > ul {
        display: flex;
        flex-direction : column;
    }

    & > ul >li {
        margin-top : 20px;
        text-align : center;
    }
`

const NavToggle =()=>{

    const [visible, setVisible] = useState(false)

    const handleToggle = () => {
        setVisible(!visible)
    }
    
    return(
        <>
            <Toggle>
                <input type="checkbox" id='nav-toggle' className='nav-toggle' onClick={handleToggle}/>
                <label htmlFor="nav-toggle">
                    <span></span>
                    <span></span>
                    <span></span>
                </label>
                <Accordion flag = {visible}>
                    <ul>
                        <li>menu1</li>
                        <li>menu1</li>
                        <li>menu1</li>
                        <li>menu1</li>
                        <li>menu1</li>
                    </ul>
                </Accordion>
            </Toggle>
        </>
    )
}

export default NavToggle

'웹 개발 > React' 카테고리의 다른 글

0730 제너레이터  (0) 2021.08.05
0729 Redux  (0) 2021.07.29
0727 useInput 커스텀 훅  (0) 2021.07.27
0727 Styled Components 환경설정 / useInput  (0) 2021.07.27
0726 Next의 기본 구조  (0) 2021.07.26