본문 바로가기

Frontend/HTML + CSS

[CSS] CSS로 네비게이션 롤오버

홈페이지에 들어가면 다양한 메뉴를 보여주는 네비게이션바가 있습니다. 

네비게이션 바

위와 같이 너무 많은 메뉴가 있을 경우에는 아래쪽의 리스트들은 접었다가 폈다하는 롤오버기능을 통해 사이트의 공간을 효율적으로 사용할 수 있습니다.

저는 3가지 정도의 유형에 대해서 css만사용해서 코딩을 해보겠습니다.

 

기본 세팅

<!DOCTYPE html>
<html lang="ko">
  <head>
    <meta charset="UTF-8" />
    <title>기본세팅</title>
    <style>
      body,
      ul,
      li {
        margin: 0;
        padding: 0;
      }
      li {
        list-style-type: none;
      }
      a {
        text-decoration: none;
        color: black;
      }
      #gnb {
        width: 100%;
        background: #eef1ff;
      }
      #gnb > ul{
        margin:0 auto;
        width:1000px;
        display:flex;
        justify-content:space-between;
      }
      #gnb > ul > li > a{
        display:block;
        width:200px;
        background:#D2DAFF;
        text-align: center;
        line-height: 50px;
      }
      #gnb .snb {
        width:100%;
        height:200px;
        display:flex;
        flex-direction: column;
        justify-content: space-around;
        align-items: center;
        background-color: #AAC4FF;
      }
    </style>
  </head>
  <body>
    <nav id="gnb">
      <ul>
        <li>
          <a href="#">리스트1</a>
          <ul class="snb">
            <li>안쪽리스트1</li>
            <li>안쪽리스트2</li>
            <li>안쪽리스트3</li>
          </ul>
        </li>
        <li>
          <a href="#">리스트2</a>
          <ul class="snb">
            <li>안쪽리스트1</li>
            <li>안쪽리스트2</li>
            <li>안쪽리스트3</li>
          </ul>
        </li>
        <li>
          <a href="#">리스트3</a>
          <ul class="snb">
            <li>안쪽리스트1</li>
            <li>안쪽리스트2</li>
            <li>안쪽리스트3</li>
          </ul>
        </li>
        <li>
          <a href="#">리스트4</a>
          <ul class="snb">
            <li>안쪽리스트1</li>
            <li>안쪽리스트2</li>
            <li>안쪽리스트3</li>
          </ul>
        </li>
        <li>
          <a href="#">리스트5</a>
          <ul class="snb">
            <li>안쪽리스트1</li>
            <li>안쪽리스트2</li>
            <li>안쪽리스트3</li>
          </ul>
        </li>
      </ul>
    </nav>
  </body>
</html>

먼저 예시로 보여준 네비게이션바의 기본 소스코드입니다. 여기서 소스코드를 추가해서 다양한 유형의 롤오버 기능을 완성 시켜보겠습니다.

1. gnb전체가 내려오기

버전1
#gnb {
	width: 100%;
	background: #eef1ff;
	height:50px;
	overflow:hidden;
	transition:0.5s;
}
#gnb:hover{
	height:200px;
}

overflow:hidden을 통해서 아래의 메뉴들을 감춰주고 gnb에 hover했을시 높이를 주어서 롤오버기능을 완성시켰습니다.

 

2. 하나씩 내려오기

버전2

 

 

#gnb .snb {
	width:100%;
	height:200px;
	display:flex;
	flex-direction: column;
	justify-content: space-around;
	align-items: center;
	background-color: #AAC4FF;
	opacity:0;
	transition:0.5s;
}
#gnb ul li:hover .snb{
	opacity: 1;
}

아래쪽의 메뉴인 snb에다 미리 opacity:0을 주어서 안보이게 하고, snb의 부모인 li에 hover되었을 경우 opacity:1로 설정해주었습니다.

 

3. 전체 배경이 내려오면서 리스트 하나씩 내려오기

버전3

 

#gnb {
    width: 100%;
    background: #eef1ff;
    height:50px;
    overflow:hidden;
    transition:0.5s;
}
#gnb:hover{
    height:200px;
}
#gnb .snb {
    width:100%;
    height:200px;
    display:flex;
    flex-direction: column;
    justify-content: space-around;
    align-items: center;
    background-color: #AAC4FF;
    opacity:0;
    transition:0.5s;
 }
#gnb > ul > li:hover .snb{
    opacity:1;
}

위의 두가지 버전을 합친 버전입니다.

네비게이션 롤오버연습.zip
0.00MB