[따라만들기] 드롭 다운 메뉴

파송송계란빡 ㅣ 2022. 3. 2. 21:37

https://youtu.be/nrd9xjHbIjE

 

 

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title>JavaScript for frontend developer</title>

    <link rel="stylesheet" href="style.css">
</head>

<body>
    <header>
        <nav>
            <ul class="clearfix mainmenu">
                <li>1st menu
                    <ul class="submenu">
                        <li>2nd menu</li>
                        <li>2nd menu</li>
                    </ul>
                </li>
                <li>2nd menu
                    <ul class="submenu">
                        <li>2nd menu menu</li>
                        <li>2nd menu</li>
                        <li>2nd menu</li>
                        <li>2nd menu</li>
                    </ul>
                </li>
                <li>3rd menu
                    <ul class="submenu">
                        <li>2nd menu</li>
                        <li>2nd menu</li>
                    </ul>
                </li>
                <li>4th menu
                    <ul class="submenu">
                        <li>2nd menu</li>
                        <li>2nd menu</li>
                        <li>2nd menu</li>
                    </ul>
                </li>

            </ul>
        </nav>
    </header>
    <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Esse, voluptatem delectus. Molestias corrupti veniam
        consequatur et, dolorem quaerat qui quod doloribus, tempore perspiciatis debitis! Quas, nam. Eius voluptas
        provident iure.</p>
    <script src="script.js"></script>
</body>

</html>
* {
    margin:0; padding:0;
}
ul li {
    list-style:none;
}
.clearfix:after{
    content:'';
    display:block; 
    clear:both;
}
body {
    background:#c4a8a5; 
    overflow-y:scroll;
    padding-top: 70px;
}
header {	
	margin-top:20px;
	background:linear-gradient(white 50px, rgba(255,255,255,0.5) 50px, rgba(255,255,255,0.5) );
	height:50px; 
	overflow:hidden;
    transition: height 0.4s ease-in-out;
    position: absolute;
    left: 0;
    right: 0;
    top : 0;
}

nav {
    width:960px; margin:0 auto;
}
nav > ul > li {
    float:left; 
    line-height:50px; 
    margin-right:70px;
    padding: 0 35px; 
    position: relative;
}
nav > ul > li ul{ 
    width:100%; 
    display: none; 
    position: absolute;
}
nav > ul > li ul li{
    white-space:nowrap;
}

nav > ul > li:hover ul {
    display: block;         /*내가 마우스를 올렸을때만 서브메뉴를 보이게 한다*/
}

 

const header = document.querySelector("header");
const nav = document.querySelector("nav");
const mainMenuList = document.querySelectorAll(".mainmenu > li");
const submenu = document.querySelectorAll(".submenu");
const headerHeight = header.offsetHeight;
let subMenuHeight = 0;

//submenu 별로 높이를 조정하기
//mainMenuList에 마우스를 올리면 header의 높이를 headerHeight와 subMenuHeight를 더한 최종 크기로 변경
//mainMenuList에 마우스를 나가면 headerHeigh로 변경
for (let i = 0; i < mainMenuList.length; i++) {
    mainMenuList[i].addEventListener("mouseover", function (event) {
        //마우스가 올라가 그 요소의 자식요소(ul)의 높이를 변수명 subMenuHeight 저장하고
        //header의 높이를 headerHeight + subMenuHeight로 변경
        subMenuHeight = this.querySelector("ul").offsetHeight;
        header.style.height = `${headerHeight + subMenuHeight}px`;
    });

    mainMenuList[i].addEventListener("mouseout", function () {
        header.style.height = `${headerHeight}px`;
    });
}

'웹 개발 > 바닐라js' 카테고리의 다른 글

[따라만들기] 공룡게임  (0) 2022.03.02
[따라만들기] 간트 차트  (0) 2022.03.02
[따라만들기] menu hover animation  (0) 2022.03.02
[따라만들기] number auto animation  (0) 2022.03.02
[따라만들기] multiple slider  (0) 2022.02.20
[따라만들기] 드롭 다운 메뉴