본문 바로가기
Font-end/CSS

[CSS] Javascript 없이 Tab Menu 구현하기

by 허도치 2020. 4. 24.
서론

  HTML 태그 중에 <label>태그의 for속성은 연결된 태그로 Focus를 이동시키는 기능을 한다. 예를들어, 그 대상이 <input type="text">이면 바로 입력할 수 있도록 커서가 깜빡이며,  <input type="checkbox">나 <input type="radio">라면 해당 태그의 checked 상태가 'on/off'된다. 이 예제는 이러한 <label>태그의 for속성을 이용한 방법이다.

 

 

 

1. 예제
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
<!DOCTYPE html>
<html>
  <head>
    <style type="text/css">
      #root { width: 300px; height: 350px; }
      
      /* Display: None */
      .invisible { display: none; }
      
      /* Menu Tab Style */
      #toggle_menu_tabs { 
        display: table;
        width: 100%;
        height: 50px;
        border: 3px;
        border-spacing: 1px;
        text-align: center;
      }
      
      .toggle-menu-tab {
        display: table-cell;
        height: 30px; 
        vertical-align: middle; 
        cursor: pointer; 
        padding: 5px 10px;
        box-shadow: 1px -4px 1px 0 darkgray inset;
      }
      .toggle-menu-tab:hover { 
        background-color: lightcoral;
      }
      .toggle-menu-tab:hover::before {
        content: "*";
        display: inline-block;
      }
      .toggle-menu-tab:hover::after {
        content: "*";
        display: inline-block;
      }
      .toggle-menu-tab:first-child {
        border-top-left-radius: 20px;
        border-bottom-left-radius: 20px;
      }
      .toggle-menu-tab:last-child {
        border-top-right-radius: 20px;
        border-bottom-right-radius: 20px;
      }
      
      /* Menu View Style */
      #toggle_menu_views {
        box-sizing: border-box;
        height: 300px;
        padding: 10px;
        border: 1px dotted gray;
      }
      .toggle-menu-view {
        display: none;
      }
      input[name=toggle_menu_sel]:checked + div.toggle-menu-view {
        display: block;
      }
    </style>
  </head>
  <body>
    <div id="root">
      <div id="toggle_menu_tabs">
        <label for="toggle_menu_1" class="toggle-menu-tab">Menu1</label>
        <label for="toggle_menu_2" class="toggle-menu-tab">Menu2</label>
        <label for="toggle_menu_3" class="toggle-menu-tab">Menu3</label>
      </div>
      <div id="toggle_menu_views">
        <input type="radio" id="toggle_menu_1" name="toggle_menu_sel" class="invisible" checked>
        <div class="toggle-menu-view menu-1">
          <span>I'm Menu-1.</span>
        </div>
        <input type="radio" id="toggle_menu_2" name="toggle_menu_sel" class="invisible">
        <div class="toggle-menu-view menu-2">
          <span>I'm Menu-2.</span>
        </div>
        <input type="radio" id="toggle_menu_3" name="toggle_menu_sel" class="invisible">
        <div class="toggle-menu-view menu-3">
          <span>I'm Menu-3.</span>
        </div>
      </div>
    </div>
  </body>
</html>
cs

 

 

 

2. 실행 결과

[ 실행 결과 화면 ]

 

 

 

마치며

  HTML태그와 CSS만으로 구현을 하다보니 한계가 있었다. 메뉴 변경은 잘되는데, 현재 선택된 탭을 고정할 수가 없었다. 이번 예제의 목표는 탭을 선택했을 때 보여지는 화면을 바꾸는 것이기 때문에 이정도로만 구현하기로 하자.

 

댓글