各タブを異なる HTML レイヤーとして実装し、ボタンでどのレイヤーを一番上に表示するかを制御する方がよいでしょうか? タブボタンが押されたときにその場で HTML を (再) 生成するほうがよいでしょうか?
特に作業の大部分がブラウザーで行われ、ページ上の要素とやり取りするときにサーバーに対して同期要求が行われない場合は、コンテンツを一度生成し、オンデマンドで表示/非表示にすることに傾倒します。脚注 1 を参照
タブのコンテンツを表示するとき...
各タブのコンテンツが迅速に生成されると仮定すると、最初に要求されたときにのみタブのコンテンツを作成することで、アプリケーションをより効率的にすることができます。このように、タブがアクセスされない場合、リソースは使用されません。
タブのコンテンツ
を非表示にする場合... マルチメディアを使用する場合、コンテンツを非表示にするときに追加のアクションを実行する必要がある場合があります。たとえば、ビデオを非表示にしたからといって、ビデオの再生が停止することはありません。オーディオ アプリケーションでは、現在のシーケンスの再生を停止する必要がある場合があります。
jQuery UI タブ(無料) やSliding Tabs (ライセンスはあるが安価)など、多くのタブ コントロールが利用可能です。
その他のシナリオ
タブは、ドキュメントなどの主要なコンテンツ ブロック (ブラウザー タブなど) や定期的に使用される機能 (連絡先情報用のタブと職歴用のタブがある人事フォームなど) を切り替えるために使用する必要があります。他のシナリオは、ダイアログ (モーダルまたは非モーダル) に適している場合があります。
オーディオの例を使用すると、「tempo」というラベルの付いたボタンがある場合、新しいタブに移動するのではなく、現在のビューの上に小さなダイアログ ウィンドウが開くと思います。Roland のワークステーション キーボードは、このパラダイムを使用しています。主要なコンテンツは現在のビューを置き換えますが、設定/構成ウィンドウは通常、既存のビューの上にポップアップします。
jQuery UIには、この目的のためのダイアログ プラグインもあります。JavaScript に精通していて、新しいブラウザーをターゲットにしている場合は、独自の単純なダイアログを作成するのはそれほど難しくありません。
1 オンザフライでコンテンツを生成することは、インタラクティブなクライアント/サーバー関係では依然として完全に受け入れられるかもしれませんが、ブラウザーにあるものとサーバー上のデータ モデル (存在する場合) との同期、不要なフォーム フィールド (リクエストのサイズの増加)、全体的なページ サイズなど。