- 締切済み
カラムにホームページを表示させたい
例えば、cssで添付画像のように2カラムのレイアウトを作ったとします。 左のdiv#subContentに <a href="a.html">a</a> <a href="b.html">b</a> <a href="c.html">c</a> とし、それぞれa、b、cをクリックしたとき 右のdiv#mainContentにa.html、b.html、c.htmlを表示させたいのです。 こういうことは出来ないのでしょうか? 検索しても方法を書いたサイトに辿り着けません。 今までは、こういいうことをして作っていたのですが・・・ <frameset cols="160,*" border="0"> <frame src="sub.html" name="subFrame"> <frame src="main.html" name="mainFrame" > </frameset> まだcssは勉強したてです。ちょっと混乱してきました。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- ORUKA1951
- ベストアンサー率45% (5062/11036)
それで動作するなら ^^^^^^^^^^^^^^^^^^^^^ /ssiSample に [.htaccess] Options +Includes AddHandler server-parsed html を入れておく。ファイル名、リンク先の.shtmlを.htmlに変更する。 ※保存時に".htaccess"として""で括らないと勝手に.htaccess.txtとするエディタもある。 [index.html] <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html lang="ja"> <head> _<meta http-equiv="content-type" content="text/html; charset=Shift_JIS"> _<title>サンプル</title> _<meta name="author" content="ORUKA1951"> _<meta http-equiv="Content-Style-Type" content="text/css"> _<link rev="made" href="mailto:oruka1951@hoge.com" title="send a mail" > _<link rel="START" href="../index.html"> _<link rel="stylesheet" type="text/css" media="screen" href="./CSS/test.css"> </head> <body> _<div class="header"> __<h1>タイトル</h1> __<p>このページでは・・・・</p> _</div> _<div class="section" id="section1"> __<h2>このサイトの目次</h2> __<p>本文はsection</p> __<div class="section"> ___<h3>項見出し</h3> ___<p>本文項記事</p> ___<div id="contentTable"> ____<ol> _____<li><a href="./index.html">トップ</a></li> _____<li><a href="./P1.html">1章</a></li> _____<li><a href="./P2.html">2章</a></li> _____<li><a href="./P3.html">3章</a></li> ____</ol> ___</div> __</div> __<!--#include file="SSI/nav.html" --> __<!--#include file="SSI/aside.html" --> _</div> _<div class="footer"> __<h2>文書情報</h2> __<!--#include file="SSI/history.html" --> __<!--#include file="SSI/address.html" --> _</div> </body> </html> [nav.html] <div class="nav"> ___<h3>目次</h3> ___<ol> ____<li><a href="./index.html">トップ</a></li> ____<li><a href="./P1.html">1章</a></li> ____<li><a href="./P2.html">2章</a></li> ____<li><a href="./P3.html">3章</a></li> ___</ol> __</div> SSIは、とても古い技術で、質素で目立ちませんが、簡単に実現できるため意外と多くのサイトで使われています。いくつか理由があります。 ・javascriptを使用すると、それを利用できないユーザーエージェントや検索エンジンに利用できない ・別途プログラムを用意したりしなくて良い。 目安として 数ページなら一つのページにまとめてフレーム風に(今回のCSS) 数~数十ページなら、同じ項目はコピペ それを越えた場合や、動的に変化する場合はPHPやPerlやRubyを使用 単に同一コンテンツだけの場合はわざわざ使わない CSSをframeset風に書き換えると [test.css] @charset "Shift_JIS"; html,body{margin:0;padding:0;} h1,h2,h3,h4,h5,h6,p{margin:0;line-height:1.6em;} p{text-indent:1em;} div.header,div.section,div.footer{width:90%;min-width:470px;max-width:900px;margin:0 auto;padding:5px;} div.header{height:100px;} div.section{position:relative;} div.section div.nav,div.section div.aside{font-size:0.9em;} div.section div.nav{position:fixed;top:110px;width:100%;left:0;} div.section div.aside{position:absolute;top:0;width:150px;height:100%;padding:0 5px;} div.section div.aside{right:0;} div.section div.section{width:auto;min-height:400px;min-width:0;margin:0 160px;} div.section h2,div.section p{margin:0 160px;} div.section div p{margin:0;} div.section div.nav ol{width:90%;margin:0 auto;padding:0;} div.section div.nav ol li{width:150px;list-style:none;line-height:2em;text-align:center;} div.section div.nav h3{display:none;} /* 色分け */ body{background-color:gray;} div.header{background-color:aqua;} div.section{background-color:white;} div.section div.section{background-color:transparent;} div.section div.aside{background-color:lime;} div.section div.nav ol li{background-color:silver;} div.footer{background-color:fuchsia;} #section2{background-color:yellow;} #section1{background-color:orange;}
- tracer
- ベストアンサー率41% (255/621)
全部の説明は長くなるため最後まで書けませんが、アプローチだけ紹介します。 まず、2通りのアプローチが考えられます。 ひとつめは、サイトのすべて情報を1つのhtmlに記述し、表示だけを切り替えるという手法です。これは、サイト全体の情報が少ない場合に有効です。この方法であれば、難しい技術は必要なく、html/cssレベルの作業です。 ふたつめは、javascriptを利用する方法です。 質問文から察するに、おそらく質問者さんとしては少し難しい内容になると思いますが、javascriptを利用することで、外部にある情報を差し込むことができます。 単純に考えるなら、質問内容を何も難しく考えずに、単に以下の様なhtmlでmain部分だけを変更して量産すれば、結果は同じです。ただ、framesetのように共通する部分を単一で扱えないだけです。 HTML <div id="container"> <div id="sub">A Sub</div> <div id="main">B Main</div> </div> すでに回答もありますが、共通の情報を一元管理したいという目的でframesetを選ばれたのであれば、通常のWeb制作ではサーバー側でhtmlを出力する方法を取ることが多いです。つまり、ひな形をつくって差し込む機能をサーバー側が持つことになります。ただ、SSIを利用するケースはかなり稀で、PHPやRubyなどの言語を使われるのが一般的だと思います。たとえば、PHPであれば、読み込みたい箇所に一行書くだけです。 //B subのhtmlを読み込む <?php include(sub.html);?>
- ORUKA1951
- ベストアンサー率45% (5062/11036)
SSI用のファイルと、スタイルシートです。 それぞれを、指定されたディレクトリ(/ssiSample/SSI, /ssiSample/CSS に入れる ★今回はframesetのようにナビゲーション固定にはしてありません。 固定にすることもスタイルシートを書き換えるだけで可能です。 / |-- ssiSample | |-- P.1.html | |-- P.1.html | |-- P.1.html | |-- /SSI | | |- address.html | | |- aside.html | | |- history.html | | |- nav.html | |--/CSS | | |-- test.cssl [address.html] <address>© ORUKA1951 2012 - 2016 All Rights Reserved mailto:*****</address> [aside.html] __<div class="aside"> ___<h3>補足記事</h3> ___<p>ここには、本題から外れた(aside)、本題とは直接関係しない記事を書く</p> __</div> [history.html] <dl class="documentHistory"> ___<dt id="FIRST-PUBLISHED">First Published</dt> ___<dd>2013-03-03</dd> ___<dt id="LAST-MODIFIED">Last Modified</dt> ___<dd>2013-03-03 12:00:00 (JST)</dd> __</dl> [nav.html] <div class="nav"> ___<h3>目次</h3> ___<ol> ____<li><a href="./P1.shtml">1章</a></li> ____<li><a href="./P2.shtml">2章</a></li> ____<li><a href="./P3.shtml">3章</a></li> ___</ol> __</div> [test.css] @charset "Shift_JIS"; html,body{margin:0;padding:0;} h1,h2,h3,h4,h5,h6,p{margin:0;line-height:1.6em;} p{text-indent:1em;} div.header,div.section,div.footer{width:90%;min-width:470px;max-width:900px;margin:0 auto;padding:5px;} div.section{position:relative;} div.section div.nav,div.section div.aside{position:absolute;top:0;width:150px;height:100%;padding:0 5px;font-size:0.9em;} div.section div.nav{left:0;} div.section div.aside{right:0;} div.section div.section{width:auto;min-height:400px;min-width:0;margin:0 160px;} div.section h2,div.section p{margin:0 160px;} div.section div p{margin:0;} /* 色分け */ body{background-color:gray;} div.header{background-color:aqua;} div.section{background-color:white;} div.section div.section{background-color:transparent;} div.section div.aside{background-color:lime;} div.section div.nav{background-color:silver;} div.footer{background-color:fuchsia;} #section2{background-color:yellow;} #section1{background-color:orange;}
補足
セットしましたが、肝心のindex.htmlはどうすればいいのでしょうか?
- ORUKA1951
- ベストアンサー率45% (5062/11036)
私はここ15年framesetは使用していません。 『HTML文書を作る場合には、この仕様における、他のDTDセットではなく strict DTD に適合する文書を作るよう推奨する。(1999年勧告HTML4.01仕様書 http://www.asahi-net.or.jp/%7Esd5a-ucd/rec-html401j/conform.html#h-4.1 )』 framesetの、ブックマークに登録できない、検索エンジンに登録されないなど問題点はすでに御存知でしょう。 ・最も初歩的な対策は、同一の目次なども各ページにすべて書いておく。 ・SSI(Server Side Includes)を利用して共通部分はサーバーに出力させる。 HTTPサーバーの初期からある非常に古い枯れた技術です。 (サーバーによったら許可していない場合がある) ・PHP,CGIなどプログラムを使用してページを出力する。 ※下の二つは、デフォルトの拡張子は.shtml.php,cgiなどですが、拡張子を.htmlにすることも可能です。 SSIのサンプル 下記ファイルを指定するフォルダーにれる。 文字コードはすべてShift_JIS タブは_に置換してあるので戻す。 /ssiSample [P1.shtml] <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html lang="ja"> <head> _<meta http-equiv="content-type" content="text/html; charset=Shift_JIS"> _<title>サンプル</title> _<meta name="author" content="ORUKA1951"> _<meta http-equiv="Content-Style-Type" content="text/css"> _<link rev="made" href="mailto:oruka1951@hoge.com" title="send a mail" > _<link rel="START" href="../index.html"> _<link rel="stylesheet" type="text/css" media="screen" href="./CSS/test.css"> </head> <body> _<div class="header"> __<h1>タイトル</h1> __<p>このページでは・・・・</p> _</div> _<div class="section" id="section1"> __<h2>第一章の見出し</h2> __<p>本文はsection</p> __<div class="section"> ___<h3>項見出し</h3> ___<p>本文項記事</p> ___<p>sectionの階層でレベルが判断される</p> __</div> __<!--#include file="SSI/nav.html" --> __<!--#include file="SSI/aside.html" --> _</div> _<div class="footer"> __<h2>文書情報</h2> __<!--#include file="SSI/history.html" --> __<!--#include file="SSI/address.html" --> _</div> </body> </html> [P2.shtml] <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html lang="ja"> <head> _<meta http-equiv="content-type" content="text/html; charset=Shift_JIS"> _<title>サンプル</title> _<meta name="author" content="ORUKA1951"> _<meta http-equiv="Content-Style-Type" content="text/css"> _<link rev="made" href="mailto:oruka1951@hoge.com" title="send a mail" > _<link rel="START" href="../index.html"> _<link rel="stylesheet" type="text/css" media="screen" href="./CSS/test.css"> </head> <body> _<div class="header"> __<h1>タイトル</h1> __<p>このページでは・・・・</p> _</div> _<div class="section" id="section2"> __<h2>第二章の見出し</h2> __<p>これは第二章です。</p> __<div class="section"> ___<h3>項見出し</h3> ___<p>本文項記事</p> ___<p>sectionの階層でレベルが判断される</p> __</div> __<!--#include file="SSI/nav.html" --> __<!--#include file="SSI/aside.html" --> _</div> _<div class="footer"> __<h2>文書情報</h2> __<!--#include file="SSI/history.html" --> __<!--#include file="SSI/address.html" --> _</div> </body> </html> [P3.shtml] <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html lang="ja"> <head> _<meta http-equiv="content-type" content="text/html; charset=Shift_JIS"> _<title>サンプル</title> _<meta name="author" content="ORUKA1951"> _<meta http-equiv="Content-Style-Type" content="text/css"> _<link rev="made" href="mailto:oruka1951@hoge.com" title="send a mail" > _<link rel="START" href="../index.html"> _<link rel="stylesheet" type="text/css" media="screen" href="./CSS/test.css"> </head> <body> _<div class="header"> __<h1>タイトル</h1> __<p>このページでは・・・・</p> _</div> _<div class="section" id="section3"> __<h2>第三章の見出し</h2> __<p>これは第三章です。</p> __<div class="section"> ___<h3>項見出し</h3> ___<p>本文項記事</p> ___<p>sectionの階層でレベルが判断される</p> __</div> __<!--#include file="SSI/nav.html" --> __<!--#include file="SSI/aside.html" --> _</div> _<div class="footer"> __<h2>文書情報</h2> __<!--#include file="SSI/history.html" --> __<!--#include file="SSI/address.html" --> _</div> </body> </html>
補足
ご回答ありがとうございます。 うぉーーー 私のスキルで追いつけるか判りませんが、今から試してみます(^^ゞ
- outbrave
- ベストアンサー率60% (231/380)
2カラムの場合は、同じレイアウトのページを複製して、部分的に変更することになります。 移動は部分的ではなく、ページ単位です。
お礼
ご回答ありがとうございます。 なんとなく仰ってる意味解ります。
お礼
ご回答ありがとうございます。 1さんが書かれているのが一つめの方法ですよね? 簡単ですが、なんと言いますか・・・ ま、最後の手段的方法として取っておきましょう。 二つめのjavascriptを利用ってことになりますね。 おおまかに理解出来る程度ですが、実際にやってみないとなんとも。。。 これを機に勉強してみようと思います。 ありがとうございました。