teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

誤りがあったので修正

2019/04/02 10:10

投稿

researcher
researcher

スコア87

answer CHANGED
@@ -1,28 +1,138 @@
1
- 下記のように修正すれば良いかと思います
1
+ 下記のようにすれば良いかと思います
2
+ 一応、コメントアウトで変更箇所を示してあります
2
3
 
3
- ```HTML
4
+ ```HTML5
5
+ <html lang="ja">
4
- // 変更前
6
+ <head>
7
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
5
- <a href="#tabpage1">タブ1</a>
8
+ <title>タブサンプル</title>
6
- <a href="#tabpage2">タブ2</a>
7
- // 変更後
8
- <a id="tabpage1" href="#tabpage1">タブ1</a>
9
+ <meta name="viewport" content="initial-scale=1">
9
- <a id="tabpage2" href="#tabpage2">タブ2</a>
10
+ </head>
10
- ```
11
+ <body>
11
12
 
12
- ```CSS
13
- // 変更前
13
+ <h1>タブサンプル</h1>
14
- #tabcontrol a:nth-child(1) { background-color: #BBFFFF; }
15
- #tabcontrol a:nth-child(2) { background-color: #FFCCFF; }
16
- // 変更後
17
- #tabpage1:target{ background-color: #BBFFFF;}
18
- #tabpage2:target{background-color: #FFCCFF;}
19
- ```
20
14
 
21
- JS
22
- ---
23
- // changeTabのreturn falseを消す
24
15
 
16
+
17
+ <!-- ================ -->
18
+ <!-- ▼タブを作るHTML -->
19
+ <!-- ================ -->
20
+ <div class="sample-area">
21
+
22
+ <p id="tabcontrol">
23
+ <!-- idを追加。0スタートに変更 -->
24
+ <!-- <a href="#tabpage1">タブ1</a>
25
+ <a href="#tabpage2">タブ2</a> -->
26
+ <a id="tabpage0" href="#tabpage0">タブ1</a>
27
+ <a id="tabpage1" href="#tabpage1">タブ2</a>
28
+ </p>
29
+ <div id="tabbody">
30
+ <!-- <div id="tabpage1">タブ1の中身<br><h2>■CSS3:</h2><ul><li>テスト1</li><li>テスト2</li><li>テスト3</li><li>テスト4</li><li>テスト5</li></ul></div>
31
+ <div id="tabpage2">タブ2の中身<br><h2>■JavaScript:</h2><ul><li>テスト6</li><li>テスト7</li><li>テスト8</li><li>テスト9</li><li>テスト10</li></ul></div> -->
32
+ <!-- id削除 -->
33
+ <div id="">タブ1の中身<br><h2>■CSS3:</h2><ul><li>テスト1</li><li>テスト2</li><li>テスト3</li><li>テスト4</li><li>テスト5</li></ul></div>
34
+ <div id="">タブ2の中身<br><h2>■JavaScript:</h2><ul><li>テスト6</li><li>テスト7</li><li>テスト8</li><li>テスト9</li><li>テスト10</li></ul></div>
35
+ </div>
36
+
37
+ </div>
38
+
39
+ <style type="text/css">
40
+
41
+ /* ▼タブ領域全体 */
42
+ #tabcontrol {
43
+ margin: 0;
44
+ }
45
+
46
+ /* ▼タブ */
47
+ #tabcontrol a {
48
+ display: inline-block; /* インラインブロック化 */
49
+ border-width: 1px 1px 0px 1px; /* 下以外の枠線を引く */
50
+ border-color: black; /* 枠線の色:黒色 */
51
+ border-radius: 0.75em 0.75em 0px 0px; /* 枠線の左上角と右上角だけを丸く */
52
+ padding: 0.75em 3.5em; /* 内側の余白 */
53
+ text-decoration: none; /* リンクの下線を消す */
54
+ color: black; /* 文字色:黒色 */
55
+ background-color: white; /* 背景色:白色 */
56
+ font-weight: bold; /* 太字 */
57
+ position: relative; /* JavaScriptでz-indexを調整するために必要 */
58
+ }
59
+
60
+ /* ▼タブの中身 */
61
+ #tabbody div {
62
+ display: none; /* 追加 */
63
+ max-width: 100%;
64
+ margin-top: -1px; /* 上側にあるタブと1pxだけ重ねるために「-1px」を指定 */
65
+ padding: 1em; /* 内側の余白 */
66
+ background-color: white; /* 背景色:白色 */
67
+ position: relative; /* z-indexを調整するために必要 */
68
+ z-index: 0; /* 重なり順序を「最も背面」にするため */
69
+ min-height: 5em; /* 最低の高さが必要なら指定(不要なら省略可) */
70
+ }
71
+
72
+ /* ▼タブの配色 */
73
+ /* 変更 */
74
+ /* #tabcontrol a:nth-child(1) { background-color: #BBFFFF; }
75
+ #tabcontrol a:nth-child(2) { background-color: #FFCCFF; } */
76
+ #tabpage0:target{ background-color: #BBFFFF;}
77
+ #tabpage1:target{background-color: #FFCCFF;}
78
+ </style>
79
+
80
+ <script type="text/javascript">
81
+
82
+ // 対象の要素を得る
83
+ var tabs = document.getElementById('tabcontrol').getElementsByTagName('a');
84
+ var pages = document.getElementById('tabbody').getElementsByTagName('div');
85
+
86
+ function changeTab() {
87
+ // ▼href属性値から対象のid名を抜き出す
25
- // 変更
88
+ // 変更
89
+ // var targetid = this.href.substring(this.href.indexOf('#')+1,this.href.length);
26
- tabs[0].onclick()
90
+ let targetid = this.href.slice(-1);
91
+
92
+ // ▼指定のページだけを表示する
27
- // 変更
93
+ // 変更
94
+ // for(var i=0; i<pages.length; i++) {
95
+ // if( pages[i].id != targetid ) {
96
+ // pages[i].style.display = "none";
97
+ // }
98
+ // else {
99
+ // pages[i].style.display = "block";
100
+ // }
101
+ // }
102
+ for(var i=0; i<pages.length; i++) {
103
+ if( i != targetid ) {
104
+ pages[i].style.display = "block";
105
+ }
106
+ else {
107
+ pages[i].style.display = "none";
108
+ }
109
+ }
110
+
111
+ // ▼クリックされたタブを前面に表示する
112
+ for(var i=0; i<tabs.length; i++) {
113
+ tabs[i].style.zIndex = "0";
114
+ }
115
+ this.style.zIndex = "10";
116
+
117
+ // 削除
118
+ // ▼ページ遷移しないようにfalseを返す
119
+ // return false;
120
+ }
121
+
122
+ // すべてのタブに対して、クリック時にchangeTab関数が実行されるよう指定する
123
+ for(var i=0; i<tabs.length; i++) {
124
+ tabs[i].onclick = changeTab;
125
+ }
126
+
127
+ // 最初は先頭のタブを選択
128
+ // 変更
129
+ // tabs[0].onclick();
28
- window.location.href = "#tabpage1"
130
+ window.location.href = "#tabpage0"
131
+ pages[0].style.display = "block";
132
+
133
+ </script>
134
+
135
+ </body>
136
+ </html>
137
+
138
+ ```

1

見にくかったので修正

2019/04/02 10:09

投稿

researcher
researcher

スコア87

answer CHANGED
@@ -1,24 +1,28 @@
1
1
  下記のように修正すれば良いかと思います
2
2
 
3
3
  ```HTML
4
- 変更前
4
+ // 変更前
5
5
  <a href="#tabpage1">タブ1</a>
6
6
  <a href="#tabpage2">タブ2</a>
7
- 変更後
7
+ // 変更後
8
8
  <a id="tabpage1" href="#tabpage1">タブ1</a>
9
9
  <a id="tabpage2" href="#tabpage2">タブ2</a>
10
10
  ```
11
11
 
12
12
  ```CSS
13
- 変更前
13
+ // 変更前
14
14
  #tabcontrol a:nth-child(1) { background-color: #BBFFFF; }
15
15
  #tabcontrol a:nth-child(2) { background-color: #FFCCFF; }
16
- 変更後
16
+ // 変更後
17
17
  #tabpage1:target{ background-color: #BBFFFF;}
18
18
  #tabpage2:target{background-color: #FFCCFF;}
19
19
  ```
20
20
 
21
21
  JS
22
22
  ---
23
- changeTabのreturn falseを消す
23
+ // changeTabのreturn falseを消す
24
+
25
+ // 変更前
26
+ tabs[0].onclick()
27
+ // 変更後
24
- tabs[0].onclick()をwindow.location.href = "#tabpage1"にする
28
+ window.location.href = "#tabpage1"