TechScribe Notes

4. 드롭다운 메뉴 만들기 본문

프론트엔드/Online Tutorial

4. 드롭다운 메뉴 만들기

yunmee0704 2021. 12. 19. 13:30

<HTML>

  <div class="dropdown">
        <input type ="text" class ="textBox" placeholder="Dropdown Menu" readonly>
        <div class="option">
            <div onclick="show('Html')"><ion-icon name="logo-html5"></ion-icon>Html</div>
            <div onclick="show('CSS')"><ion-icon name="logo-css3"></ion-icon>CSS</div>
            <div onclick="show('Javascript')"><ion-icon name="logo-javascript"></ion-icon>Javascript</div>
            <div onclick="show('Figma')"><ion-icon name="logo-figma"></ion-icon>Figma</div>
            <div onclick="show('ReactJS')"><ion-icon name="logo-react"></ion-icon>ReactJS</div>
        </div>
    </div>
 
                                                                         <CSS>
 
 *{
        margin:0;
        padding:0;
        box-sizing: border-box;
    }

    body{
        display: flex;
        justify-content: center;
        min-height: 100vh;
        background: white;
    }

    .dropdown{
        position: relative;
        margin-top: 100px;
        width: 300px;
        height: 50px;
    }

    .dropdown::before{
        content:  '';
        position: absolute;
        width:8px;
        height: 8px;
        border:2px solid #333;
        right:20px;
        top:15px;
        z-index: 10000;
        border-top:2px solid #fff;
        border-right:2px solid #fff;
        transform: rotate(-45deg);
        transition: 0.5s;
        pointer-events: none;
    }
    .dropdown.active::before{
        top:22px;
        transform:rotate(-225deg);
    }
    .dropdown input{
        position:absolute;
        top:0;
        left:0;
        width: 100%;
        height: 100%;
        cursor: pointer;
        background: fff;
        border:none;
        outline: none;
        box-shadow: 0 5px 20px rgba(0,0,0,0.05);
        padding:12px 20px;
        border-radius: 10px;

    }

    .dropdown .option {
        position:absolute;
        top:70px;
        width: 100%;
        background: fff;
        box-shadow: 0 30px 30px rgba(0,0,0,0.05);
        border-radius: 10px;
        overflow:hidden;
        display:none;
    }
    .dropdown.active .option{
        display: block;
    }
    .dropdown .option div{
        padding:12px 20px;
        cursor: pointer;
    }
    .dropdown .option div:hover{
        background: #62baea;
        color:#fff;

    }

    .dropdown .option div ion-icon{
        position: relative;
        top:4px;
        font-size: 1.2em;
    }
 
                                                                <js>
 <script type="module" src="https://unpkg.com/ionicons@5.5.2/dist/ionicons/ionicons.esm.js"></script>
<script nomodule src="https://unpkg.com/ionicons@5.5.2/dist/ionicons/ionicons.js"></script> //아이콘 사용을 위한 소스
<script>
    function show(anything){
        document.querySelector('.textBox').value =
        anything;
    }
    let dropdown = document.querySelector('.dropdown');
    dropdown.onclick = function(){
        dropdown.classList.toggle('active');
    }
   
</script>
Box-sizing
-box-sizing: border-box; => 테두리,패딩 까지 포함해서 너비값 지정함/ 테두리와 패딩 값 상관없이 지정된 너비와 높이를 유지하고 싶다면 사용.
-box-sizing : content-box; => 콘텐츠 영역에 대한 너비값만 지정. 기본값


overflow: 요소의 크기 이상으로 내용이 넘쳤을때 (부모요소의 영역을 넘을 때) 보여짐을 제어하는 단축속성
-visible: 넘친 내용을 그대로 보여줌
-hidden: 넘친 내용을 잘라냄
-scroll: x축, y축 모두 스크롤바 생성( 내용이 넘치지 않는 경우에도 설정 가능)
-auto: 넘친 내용이 있는 경우에만 잘라내고 스크롤바 생성

-overflow-x: x축으로 넘치는 부분을 제어함
-overflow-y: y축으로 넘치는 부분을 제어함