본문 바로가기
디노 code.html

웹디자인 기능사 실기 탭 메뉴 구현 / html css jQuery

by f_fren 2021. 8. 6.

웹디자인 기능사 실기 탭 메뉴 구현 / html css jQuery

 

웹디 기능사에서 css 소스가 제일 복잡한 구간이 바로 탭 메뉴입니다.

 

하지만 jQuery 소스가 그만큼 쉬우니 잘 따라오실 수 있습니다!

 

html 소스

 

<body>
    <div class="tab">
        <dl>
            <dt class="on"><a href="#">공지사항</a></dt>
            <dd>
                <ul class="notice">
                    <li><a href="#">공지1</a></li>
                    <li><a href="#">공지2</a></li>
                    <li><a href="#">공지3</a></li>
                    <li><a href="#">공지4</a></li>
                    <li><a href="#">공지5</a></li>
                </ul>
            </dd>
            <dt><a href="#">갤러리</a></dt>
            <dd class="hidden">
                <ul class="gallery">
                    <li><a href="#"><img src="http://placehold.it/80x100/335566?text=gall1" alt="gall1"></a></li>
                    <li><a href="#"><img src="http://placehold.it/80x100/112244?text=gall2" alt="gall2"></a></li>
                    <li><a href="#"><img src="http://placehold.it/80x100/552244?text=gall3" alt="gall3"></a></li>
                </ul>
            </dd>
        </dl>
    </div>
</body>

 

html부터 조금 복잡하죠?

 

tab이라는 박스로 감싸주고 제목이 있기 때문에 <dl> , <dt> , <dd>를 사용해 주었습니다.

 

<dt>는 제목 <dd>는 내용 이 둘을 감싸는 <dl>이 있다고 생각하면 쉽습니다.

 

먼저 "공지사항"과 "갤러리" 두 가지의 제목을 탭 했을 때 내용들이 나올 것이기 때문에 <dt>에 공지사항과 갤러리를 만들어 주었습니다.

 

공지사항과 갤러리 둘 중 하나를 눌렀을 때, on이라는 클래스를 이용해 배경색의 변화를 줄 것이기 때문에 첫 번째 <dt>에 on 클래스를 주었습니다.

 

공지사항의 내용을 <dd> 안에 <ul>, <li>를 사용하여 넣어주었고 <ul>에 각 공지사항과 갤러리의 내용에 맞게 클래스 명을 주어 구분해 주었습니다.

 

같은 공간 안에 두 개의 내용을 넣고, <dt>를 탭 하였을 때 내용을 숨겼다가 보였다가 하게끔 만들 것이기 때문에 갤러리의 내용인 <dd>에 class="hidden"을 넣어주었습니다.

 

 

html부터 조금 복잡하긴 한데 이렇게 풀어서 이해를 하나씩 하나씩 해보면 생각보다 쉽습니다!

 

 

css 소스

div.tab {
    width: 400px;
    height: 200px;
}
div.tab dl {
    width: 400px;
    height: 200px;
    position: relative;
}
div.tab dl dt {
    width: 200px;
    height: 50px;
    font-size: 18px;
    font-weight: bold;
    text-align: center;
    line-height: 50px;
    float: left;
}
div.tab dl dt.on {
    background-color: lightgray;
    color: white;
}
div.tab dl dd {
    width: 400px;
    height: 150px;
    position:absolute;
    top: 50px;
    left: 0;
}
div.tab dl dd.hidden {
    display: none;
}
div.tab dl dd ul.notice {
    width: 400px;
    height: 150px;
}
div.tab dl dd ul.notice li {
    margin: 10px;
    list-style: square;
    list-style-position: inside;
}
div.tab dl dd ul.gallery {
    width: 400px;
    height: 150px;
}
div.tab dl dd ul.gallery li {
    width: 80px;
    height: 100px;
    margin-left: 40px ;
    margin-top: 25px;
    float: left;
}

 

내용과 제목을 감싸는 <dl>에 position: relative를 주었고

 

<dt>에 폰트 사이즈와 폰트 위치를 정렬해 준 뒤 넓이 값 200씩 주어서 float: left로 한 줄 정렬해주었습니다.

 

중요한 dt.on은 공지사항에만 주었죠! 나중에 jQuery를 사용해서 클릭했을 때 background-color와 color를 없어졌다 만들었다를 동작하기 위해 배경색, 폰트 색을 바꿔주었습니다.

 

<dt>를 클릭했을 때 <dd>가 나타나고 사라지고 해야 하기 때문에 position: absolute를 주어 공간을 띄워주었고 <dt>의 높이 값인 50만큼 top 50을 주어 위치해주었습니다.

 

여기서 갤러리의 내용인 <dd>가 처음엔 보이지 않아야 하기 때문에. hidden에  display: none을 넣어주었습니다.

 

공지사항의 내용을 이쁘게 꾸미기 위해서 글자 간격을 10씩 띄워 주었으며 list-style: square을 주어서 글자 앞에 네모난 점을 만들어 주었습니다.

 

list-style: square만 준다면 네모난 점이 박스 밖으로 빠져나가기 때문에 list-style-position: inside를 줘서 박스 안으로 점과 글씨가 들어오게 만들어주었습니다.

 

갤러리 <li>들도 간격을 맞추고 float: left를 줘서 한 줄로 위치 조정을 해주었고, 이제 jQuery를 사용해서 동작을 시켜보도록 하겠습니다.

 

 

jQuery 소스

$(document).ready(function(){
    $('div.tab dl dt').click(function(){
        $('div.tab dl dt').removeClass('on');
        $(this).addClass('on');
        $('div.tab dl dd').addClass('hidden');
        $(this).next().removeClass('hidden');
    })
})

 

제이쿼리 시작을 알리고

     선택자 <dt>를 클릭했을 때 (할 일

            선택자 <dt>는 클래스를 빼준다('on클래스를');

            this는 클래스를 더해준다 ('on클래스를');                               //this는 부모 요소의 선택자를 그대로 가져온다.

            선택자 <dd>는 클래스를 더해준다('hidden클래스를');

            this의 next는 클래스를 빼준다 ('hidden클래스를');               //next는 선택자의 바로 다음 요소를 말한다.

})

 

 

탭 메뉴는 html, css가 조금 복잡한 대신 jQuery가 조금 간편하죠?

 

다 이해하면서 넘어간다면 다들 쉽게 할 수 있을 거라고 생각합니다!

 

마지막으로 영상 첨부하면서 마치도록 하겠습니다.

 

댓글