본문 바로가기

카테고리 없음

탭 레이아웃 + 네비게이션 바 구현하기 (Navigation bar template)

이해를 위해 디자인요소는 최소화하여 시궁창수준이므로 눈은 가리고 보는걸 추천한다.



1
2
3
4
5
<nav>
    <ul id='game'>게임</ul>
    <ul id='paint'>그림</ul>
    <ul id='song'>노래</ul>
</nav>
cs



무난하게 네비게이션에 3개의 요소만 넣었다.


navigation bar에 대한 이미지 검색결과

이런 식으로 네비게이션에 마우스를 올렸을 때 숨겨진 탭이 등장하도록 기획한다. 




일단 nav요소의 디자인을 대충 css로 만져준다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

    *{margin: 0;padding: 0}
    nav{
        width: 300px;
        height: 40px;
        border: 1px solid #747474;
        border-radius: 5px;
        background: #fff;
    }
    nav ul{
        padding: 10px 5px;
        box-sizing: border-box;
        float: left;
    }
    nav ul:hover{background: #000}

cs




일단 이대로만 구동시켜보자.


https://jsfiddle.net/6xo1k7zq/



아무도 안 쓸 것 같은 네비게이션이 탄생했다.


이제 절반은 온것이다.


본격적으로 제이쿼리를 이용해 탭 레이아웃을 만들어보자.



일단 탭 레이아웃은 네비게이션의 요소 안에 숨겨진 채로 존재해야한다.


예를 들면


1
2
3
4
5
6
7
8
<nav>
    <ul id='game'>
        게임
        <div>탭 레이아웃</div>
    </ul>
    <ul id='paint'>그림</ul>
    <ul id='song'>노래</ul>
</nav>
cs


이런 식으로 nav의 요소에 해당되는 ul안에 또다른 요소로 탭 레이아웃이 비집고 들어왔다.


하지만 ul에 마우스를 올렸을 때 탭 레이아웃이 보여야 하기 때문에


일단 처음엔 보이지 않아야 하는것이 정상이다.


그러니 css에서 스타일로 display:none 설정을 해줘야 한다.


그리고 ul을 hover했을 때 비로소 보이도록 해주어야만 한다.


이때 필요한것이 바로 자바스크립트 단이다. (이 글에서는 제이쿼리를 쓸것이다.)



<html>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<nav>
    <ul id='game'>
        게임
        <div>탭 레이아웃</div>
    </ul>
    <ul id='paint'>그림</ul>
    <ul id='song'>노래</ul>
</nav>
 
<!-- # Jquery Include -->
<script src="https://code.jquery.com/jquery-2.2.4.min.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.min.js"></script>
<script>
    $('nav ul').hover(function(){ // nav ul에 마우스를 올릴 경우
        $('nav ul div').css('display','block');
    },
    function(){ // nav ul에 마우스를 내릴 경우
        $('nav ul div').css('display','none');
    });
</script>

cs




<css>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
*{margin: 0;padding: 0}
    nav{
        width: 300px;
        height: 40px;
        border: 1px solid #747474;
        border-radius: 5px;
        background: #fff;
    }
    nav ul{
        padding: 10px 5px;
        box-sizing: border-box;
        float: left;
    }
    nav ul:hover{background: #000}
    nav ul div{ /* 탭 레이아웃 css, 크기와 색깔 그리고 display:none 속성만 대충 넣었다. */
        width: 100px;
        height: 100px;
        background:#2cf8e1;
        display: none;
    }
cs



이 결과물을 링크에서 확인해보자.


https://jsfiddle.net/xpvt214o/311323/


여전히 개 쓰레기같은 디자인이지만 코드에 어딘가 또 장애가 있다.


전혀 탭 레이아웃 같지 않은 이벤트같다.


그 이유는, 탭 레이아웃의 위치를 바꾸지 못해서이다.


탭 레이아웃을 ul 요소에 상대적으로 위치시키기 위해서는


부모의 position을 relative로 바꾸어야 하고,

또 자식은 absolute상태여야 한다.


css를 통해 저 영역만 따로 알아보자.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
nav ul{
    padding: 10px 5px;
    box-sizing: border-box;
    float: left;
    position: relative;
}
nav ul:hover{background: #000}
nav ul div{
    width: 100px;
    height: 100px;
    left:0;
    background:#2cf8e1;
    display: none;
    position: absolute;
}
cs



이런 식으로 바꿔주면


https://jsfiddle.net/buxsk23j/2/



결과처럼 그래도 이렇게 탭같은 면모를 갖춘 네비게이션이 탄생하게 된다.


이제 여기서 탭을 ul로 바꾸고 네비게이션의 냄새날것같은 디자인까지 바꿔주면 완성이다.



<All Code>

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<style>
    *{margin: 0;padding: 0}
    nav{
        width: 300px;
        height: 40px;
        border: 1px solid #747474;
        border-radius: 5px;
        background: #fff;
    }
    nav ul{
        padding: 10px 5px;
        box-sizing: border-box;
        float: left;
        position: relative;
    }
    nav ul:hover{background: #000}
    nav ul div{
        width: 100px;
        height: 100px;
        background:#2cf8e1;
        display: none;
        position: absolute;
    }
</style>
 
<nav>
    <ul id='game'>
        게임
        <div>탭 레이아웃</div>
    </ul>
    <ul id='paint'>그림</ul>
    <ul id='song'>노래</ul>
</nav>
 
<!-- # Jquery Include -->
<script src="https://code.jquery.com/jquery-2.2.4.min.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.min.js"></script>
<script>
    $('nav ul').hover(function(){
        $('nav ul div').css('display','block');
    },
    function(){
        $('nav ul div').css('display','none');
    });
</script>
cs