質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

2回答

10459閲覧

CSSで作成したタブ切り替えメニューで別ページからタブごとにアンカーリンクを付けたい

kii.32

総合スコア67

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2019/11/14 02:54

編集2019/11/14 04:59

前提・実現したいこと

CSSのみでタブ機能を実装しコンテンツの表示を切り替える方法
こちらを参考にCSSを使ってタブ切り替えを作成しました。

このタブ1−4に別ページからリンクを飛ばしたいのですが、
urlの後ろに#***(https://example.com/#tab02の様な)がないので、
どのようにリンクを飛ばせば良いか躓いています。

javascript,jqueryについて初学者で知識不足で、
有識者の方がいらっしゃいましたら、ご教授頂ければ幸いでございますm(_ _)m
どうぞよろしくお願いいたします。

該当のソースコード

html

1<div class="tabs"> 2 <!-- タブ --> 3 <input id="tab01" type="radio" name="tab_item" checked> 4 <label class="tab_item" for="tab01"><div><img src="" alt=""></div></label> 5 <input id="tab02" type="radio" name="tab_item"> 6 <label class="tab_item" for="tab02"><div><img src="" alt=""></div></label> 7 <input id="tab03" type="radio" name="tab_item"> 8 <label class="tab_item" for="tab03"><div><img src="" alt=""></div></label> 9 <input id="tab04" type="radio" name="tab_item"> 10 <label class="tab_item" for="tab04"><div><img src="" alt=""></div></label> 11 12 <!-- タブ1の中身 --> 13 <div class="tab_content" id="tab01_content"> 14 <div class="tab_content_description"> 15 <p><img src="" alt=""></p> 16 </div> 17 </div> 18 <!-- タブ2の中身 --> 19 <div class="tab_content" id="tab02_content"> 20 <div class="tab_content_description"> 21 <p><img src="" alt=""></p> 22 </div> 23 </div> 24 <!-- タブ3の中身 --> 25 <div class="tab_content" id="tab03_content"> 26 <div class="tab_content_description"> 27 <p><img src="" alt=""></p> 28 </div> 29 </div> 30 <!-- タブ4の中身 --> 31 <div class="tab_content" id="tab04_content"> 32 <div class="tab_content_description"> 33 <p><img src="" alt=""></p> 34 </div> 35 </div> 36</div>

css

1.tab_item { 2 width: 282px; 3 height: 140px; 4 background-color: #f5f4f1; 5 box-sizing: border-box; 6 border: 7px solid transparent; 7 border-radius: 26px; 8 text-align: center; 9 display: block; 10 float: left; 11 transition: all 0.2s ease; 12 margin-bottom: 45px; 13 } 14 15 .tab_item:hover { 16 opacity: 0.75; 17 } 18 19 /*ラジオボタンを全て消す*/ 20 input[name="tab_item"] { 21 display: none; 22 } 23 24 /*タブ切り替えの中身のスタイル*/ 25 .tab_content { 26 display: none; 27 clear: both; 28 overflow: hidden; 29 margin-bottom: 70px; 30 } 31 32/*選択されているタブのコンテンツのみを表示*/ 33#tab01:checked ~ #tab01_content, 34#tab02:checked ~ #tab02_content, 35#tab03:checked ~ #tab03_content, 36#tab04:checked ~ #tab04_content { 37display: block; 38} 39 40/*選択されているタブのスタイルを変える*/ 41input:checked + .tab_item { 42border: 7px solid #9bd200; 43box-sizing: border-box; 44}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

どのようにリンクを飛ばせば良いか
javascript,jqueryについて初学者で知識不足で

いい機会ですので、javascript を勉強しましょう。

  • A 要素は使わない方法です。

ラベル>ラジオボタンの連動を利用し、ラジオボタンに変化があるとURLの #部分 を差し替える挙動です
尚、ご質問ではアドレスバーに #tabXX_content を想定されていたようですが、
input#id (または label[for]) の値にしています。

javascript

1 2// イベントハンドラ(ページが読まれたら実行) 3window.addEventListener("load",function(){ 4 5 // アドレスバーに #id があるとき、 id を抽出 6 let hashId = location.hash && location.hash.substr(1); 7 8 // タブ用 input[name=tab_item] コレクション 9 let tabs = document.querySelectorAll( "input[name=tab_item]" ); 10 11 // 個々の タブ用input[name=tab_item] を調整 12 for ( let tab of tabs ) { 13 14 // URL欄に #inputId でアクセスされている場合 cheked 属性を切り替える 15 // => CSS でタブコンテンツが表示される。 16 if ( hashId ) { 17 tab.checked = tab.id==hashId; 18 } 19 20 // イベントハンドラ(アンカー代わりに location.href を置き換え) 21 tab.addEventListener( "input", function ( evt ) { 22 location.replace(`#${evt.target.id}`); 23 }); 24 25 }; 26 27 // アドレスバーに #id があるとき、div.tabs に移動する(追記) 28 if( hashId ) { 29 document.querySelector( "div.tabs" ).scrollIntoView(true) 30 } 31 32});

tab-radiotab_item にカスタマイズしているようですので、tab_item に合わせています。
<script></script> で囲ってみてください。

12行のコードですが、最初は「分からないことだらけ」と思います。
ネットで検索しまくってくださいね。

最後に:
CSSだけでタブ表現。この手法は初見でした。
お礼の意味でのコード提供です。

投稿2019/11/14 07:12

編集2019/11/14 11:14
AkitoshiManabe

総合スコア5432

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kii.32

2019/11/14 10:39

ご回答ありがとうございます! javascript でわからないことばかりで、一つずつ調べていきます! リンクでタグのあるページに飛んだ際に、指定のタグを開くことができました! ただ、タグのあるページに飛んだ際にタグの位置へのリンクではなく、ページの一番上へのリンクとなってしまいます。 (別ページからはhref="https://example.com/#tab01"という風にリンクを飛ばしています。) タグのあるページへ飛んでからjqueryでタグの位置までスクロールすればいいかと考え、 下記を参考に https://webdesignday.jp/inspiration/technique/jquery-js/4022/ ========================== var headerHeight = $('.header').outerHeight(); var urlHash = location.hash; if(urlHash) { $('body,html').stop().scrollTop(0); setTimeout(function(){ var target = $(urlHash); var position = target.offset().top - headerHeight; $('body,html').stop().animate({scrollTop:position}, 500); }, 100); } $('a[href^="#"]').click(function() { var href= $(this).attr("href"); var target = $(href); var position = target.offset().top - headerHeight; $('body,html').stop().animate({scrollTop:position}, 500); }); ========================== このコードを入れましたが、上手くいきませんでした。 この場合は、どの様に解決するべきなのでしょうか。 度々申し訳ございませんが、ご教授いただけますと幸いでございます。
AkitoshiManabe

2019/11/14 11:24

JavaScriptで動く仕組みは MDN( https://developer.mozilla.org/ja/docs/Learn )に、ブラウザ実装された内容を探しやすい形で網羅してます。今回の 10 数行をすべて理解することを最初の目標にし、遊び用のHTMLファイルで色々と試してみてください。
kii.32

2019/11/14 11:46

ありがとうございます! 無事実装できました! 非常に勉強になりました。また、さらに学ぼうと思います。 本当に助かりました。
guest

0

投稿2019/11/14 03:10

okurasuta

総合スコア37

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kii.32

2019/11/14 04:05

回答ありがとうございます。 #の部分は下記のようにIDを振って、そこに飛ばすという意味で書きました。 https://www.tagindex.com/html_tag/link/a_url_id.html <input id="tab01" type="radio" name="tab_item" checked> <label class="tab_item" for="tab01"><div><img src="" alt=""></div></label> ↓ <input id="tab01" type="radio" name="tab_item" checked> <label class="tab_item" for="tab01"><a href="#tab01_content"><img src="" alt=""></a></label> <input id="tab02" type="radio" name="tab_item" checked> <label class="tab_item" for="tab02"><a href="#tab02_content"><img src="" alt=""></a></label> ・ ・ ・ という風にaタグを入れてみたのですが、labelが先に反応してしまい、 上手く切り替えができず、また別ページからのリンクもタブがあるページの先頭に行くようになりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問