タグにCSSのスタイル'display:none'を適用すると、適用されたタグを含むその子供のタグ に関しても非表示にする事ができます。非表示になった領域は、そこに何も存在しない扱いとなり再レイアウト された際に、間が詰められます。
この性質を利用して、'display:none'と'display:block'を切り替える事でURLによる ページ遷移を発生させずに、疑似的にページ遷移を再現します。
選択されたページだけ'display:block'に設定する事で常に1つのページだけ見えるようにします。
見えているブロックが変化するだけですが、ページ遷移しているように見えます。
<!doctype html> <html> <head> <meta charset="UTF-8"> <style type="text/css"> .page1 { display:block; width:320px; height:320px; background-color:red; color:white; font-weight:bold; } .page2 { display:none; width:320px; height:320px; background-color:green; color:white; font-weight:bold; } .page3 { display:none; width:320px; height:320px; background-color:blue; color:white; font-weight:bold; } </style> <script type="text/javascript" language="javascript"> <!-- function SelectPage( page ) { /* 各ページのエレメントを取得 */ var elementPage1 = document.getElementById( "page1" ); var elementPage2 = document.getElementById( "page2" ); var elementPage3 = document.getElementById( "page3" ); switch( page ) { case 1: elementPage1.style.display = 'block'; elementPage2.style.display = 'none'; elementPage3.style.display = 'none'; break; case 2: elementPage1.style.display = 'none'; elementPage2.style.display = 'block'; elementPage3.style.display = 'none'; break; case 3: elementPage1.style.display = 'none'; elementPage2.style.display = 'none'; elementPage3.style.display = 'block'; break; } }; // --> </script> </head> <body> <h1>CSSの'display:none'によるページの切り替え</h1> <input type='button' value='page1を表示' onclick="SelectPage(1);"> <input type='button' value='page2を表示' onclick="SelectPage(2);"> <input type='button' value='page3を表示' onclick="SelectPage(3);"> <div id='page1' class='page1'> ページ1です。 <ul> <li>ページ1の中身 </ul> </div> <div id='page2' class='page2'> ページ2です。 <ul> <li>ページ2の中身 </ul> </div> <div id='page3' class='page3'> ページ3です。 <ul> <li>ページ3の中身 </ul> </div> </body> </html>