Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

coding etude

[Css] DropDown 메뉴 만들기 예시 본문

css

[Css] DropDown 메뉴 만들기 예시

코코리니 2023. 3. 22. 17:06

우선 리스트의 구조는 메인 메뉴 리스트에 각 메뉴의 서브 메뉴가 들어있는 구조로 진행 하려고 한다.

 

우선 HTML을 살펴보자

<div>
	<ul class="main">
    	<li class="mainMenu">
        	<div class="mainText">
            	<span><a href="">메인1</a></span>
            </div>	
        	//여기서 부터 서브메뉴
            <ul class="sub">
            	<li>서브1</li>
                <li>서브2</li>
                <li>서브3</li>
            </ul>
        </li>
    </ul>
</div>

뭐 요딴 구조로 되어 있다고 가정을 해보자. 그럼 저 메인1을 :hover 했을 때 아래 서브메뉴가 뿅 하고 나오게 하는것이 주기능이다.

 

1. 우선 메인 메뉴가 하나가 아니라 하나 이상일 경우 가로 or 세로로 정렬을 해주는것이 보기도 사용하기도 편할 것이다.

.main {
	display:flex;
    flex-direction: row
}

요렇게 하면 main에 속해있는 <li> 들이 가로로 정렬을 한다.

 

2. 메인 메뉴와 서브메뉴를 동일 선상으로 정렬한다.

간단하게 말해서 메인메뉴 아래 쪽으로 서브 메뉴의 위치를 고정하는것이다.

.mainMenu{
    display: inline-block; // 메인메뉴의 크기를 설정하기 위해 inline block를 사용
    width: 112px; // 넓이는 원하는 크기로 조정해 주면 됨
    position: relative; // 하위 태크가 포지션을 받기위해 우선 설정해준다.
}
.subMenu{
	position: absolute; // 가장 가까운 상위 태그의 위치를 본인의 위치로 설정함.
}

이렇게 진행하면 메인메뉴 아래쪽으로 서브메뉴들이 나열 된다.

hover를 통하여 다른 class를 수정하기 위해서는 hover되는 자신의 하위 class 여야만 한다.

상위 class 또는 형제 class 는 수정될 수 없다.

 

3. 서브메뉴를 안보이게 설정하고 :hover 했을 때 나타나도록 한다.

1) display 사용

2) opacity 사용

3) height 사용

.mainMenu{
    display: inline-block; 
    width: 112px; 
    position: relative; 
}

//1) display 수정
.mainMenu:hover .subMenu{
	display: block;
}
.subMenu{
	position: absolute;
    // absolute를 사용한다면 준비되지 않은 공간에서 갑자기 생성되기 때문에 
    // 하위 객체들이 밀리게 된다.
    // 그래서 아예 fixed를 사용하여 고정시키는 방법도 있다.
    display: none; // 표시되지 않음
    transition: 0.3s; // 속성에 변화가 생기면 서서히 변경하도록 시간 설정
}

//2) opacity 수정
.mainMenu:hover .subMenu{
	opacity: 1; //mainMenu가 hover되면 subMenu의 opacity를 1로 변경한다.
}
.subMenu{
	position: absolute;
    opacity: 0; // 렌더링 될 때 투명하게 설정
    transition: 0.3s; // 속성에 변화가 생기면 서서히 변경하도록 시간 설정
}
//3) height 수정
.mainMenu:hover .subMenu{
	height: 100px; 
}
.subMenu{
	position: absolute;
    height: 0; // 렌더링 될 때 높이값을 주지 않아서 표시되지 않음.
    transition: 0.3s; 
}

 

생각보다 간단하게 드롭다운 메뉴효과를 설정 할 수 있다. 

'css' 카테고리의 다른 글

[css] margin 중앙 정렬하기  (0) 2023.12.13
[css] background 관련 정리  (0) 2023.11.30
[css] gap  (0) 2023.03.08