[웹 UI 개발] 메뉴 - 1 / 1단 메뉴

2023. 3. 21. 11:46

본문

 

1단 메뉴는 메뉴의 형태 중 가장 간단한 형태이다.

 

1단 메뉴


실습

 

아래 조건을 만족하는 1단 메뉴를 제작.

  • 5개의 항목을 갖는 가로 메뉴
  • 메뉴의 간격은 모두 동일
  • 선택 메뉴는 볼드 처리
  • 메뉴 활성화 시 배경색과 폰트 컬러 변경

 

<!DOCTYPE html>
<html lang="ko">
    <head>
        <meta charset="utf-8">
        <title>1단 메뉴</title>
        <link rel="stylesheet" href="css/menu1.css">
    </head>
    <body>
        <nav>
            <ul class="menu">
                <li class="menu_item"><a href="#" class="menu_link">메일</a></li>
                <li class="menu_item active"><a href="#" class="menu_link">카페</a></li>
                <li class="menu_item"><a href="#" class="menu_link">소프트웨어</a></li>
                <li class="menu_item"><a href="#" class="menu_link">지식백과</a></li>
                <li class="menu_item"><a href="#" class="menu_link">영화</a></li>
            </ul>
        </nav>
    </body>
</html>

 

/*menu1.css*/

@charset "UTF-8";

body {
    font-family: '나눔고딕', NanumGothic, Dotum, '돋움', sans-serif;
}

body, ul, ol, li, div, a {
    margin: 0;
    padding: 0;
}

ul, ol {
    list-style: none;
}

a {
    color: inherit;
    text-decoration: none;
}

nav {
    max-width: 700px;
    min-width: 500px;
    margin: 5px;
}

.menu {
    display: table;
    table-layout: fixed;
    width: 100%;
}

.menu_item {
    display: table-cell;

}

.menu_link {
    display: block;
    height: 36px;
    border: 1px solid #ddd;
    font-size: 12px;
    line-height: 36px;
    color: #333;
    text-align: center;
}

.menu_item + .menu_item .menu_link {
    margin-left: -1px;
}

.menu_item:hover .menu_link {
    color: green;
    font-weight: bold;
}

.menu_item.active .menu_link {
    position: relative;
    border-color: #555;
    font-weight: bold;
    color: #fff;
    background-color: gray;

}

 

브라우저 화면(소프트웨어에 커서가 있는 상태)

 

menu 클래스와 menu_item 클래스를 각각 "display: table", "display: table-cell"로 설정하여 테이블처럼 표현되도록 한다.

그 후 "table-layout을 fixed"로 설정하면 테이블의 각 셀이 모두 같은 너비를 같게 된다.

 

menu_link에 border를 설정하면 border끼리 겹치는 부분이 생기게 된다.

이 부분은 menu_item의 인접 형제인 (menu_item의 자식 menu_link)에 "margin-left: -1px"을 설정하면 해결된다.

메뉴의 첫번째 칸을 제외한 나머지 칸들이 왼쪽으로 1px 움직여서 겹치게 한 것이다.

설명

 

마지막으로 active 클래스에 "position: relative"를 설정해준 것도 위와 연관이 있다.

position을 설정하지 않고 스타일을 적용하면 아래와 같이 보인다.

브라우저 화면

active된 칸의 오른쪽 border가 적용되지 않은 것 처럼 보인다.

"margin-left: -1px"을 설정한 것 때문에 인접 형제 칸들이 상대적으로 왼쪽에 있는 칸들보다 위에 있기 때문이다.

설명

이 문제를 해결하기 위해 active된 메뉴가 가장 위로 오게끔 position을 relative로 설정한 것이다.


부스트코스의 강의 내용을 정리한 포스트입니다.

https://www.boostcourse.org/web344

 

웹 UI 개발

부스트코스 무료 강의

www.boostcourse.org

BELATED ARTICLES

more