スタイルシート

 このページはサイト運営している人向け。主にスタイルシートについてです。

フレームページの検索エンジン対策
 訪れていたら、CSS「display: none」でリンク消し
 フレームページへジャンプ
  フレーム強制表示ジャバスクリプト
 CSS2「position:fixed」で擬似フレーム
画像を両側に表示する
モニタ解像度によってJavaScriptでCSSを分岐 UP
参考書籍

フレームページの検索エンジン対策

 このサイトではフレームページをつくったことはありませんでした。理由の一つに、Googleなどのロボット型検索エンジンから検索した場合、フレームの中のそのキーワードのあるページだけが表示され、フレームの他のページ(目次ページなど)は表示されないということがあります。なんらかの方法を講じないと、検索した人がそのページからどこへも行けなくなってしまいます。

 私も、たまたま買ったパソコン専門誌で「URLの末尾を消していくと上の階層に行く」ということを知るまでは、何度も検索していたのにトップページへの行き方がわからないサイトがありました。(例えばこのページ《http://www.geocities.jp/gamersafternoon/pc/css.html》なら、「/」から下の「css.html」や「pc/css.html」を順に消していくとトップページに行きつく。)

 フレーム内ページを直接表示された時のための対策としては、全てのページにリンクを張る方法、ジャバスクリプトで対応する方法、CGIで対応する方法、スタイルシートで擬似フレームをつくる方法があります。以下は詳細です。

訪れていたら、CSS「display: none」でリンク消し

 全てのフレーム構成ページにトップページへのリンクを張るのは、「普通にフレーム全体を表示した時はトップページへのリンクが複数できてしまうので不恰好。同じ場所へのリンクが複数見えるのも使いにくい。」と思っていましたが、スタイルシートで訪れたリンクの表示を消す方法がありました。一番基本的、かつお勧めな方法

  1. 全てのフレーム構成ページにトップページへのリンクを張ります。
  2. トップページへのリンクをclass指定します。
  3. トップページを訪れていたら(a:visited)、スタイルシートのdisplay: noneまたはvisibility: hiddenでトップページへのリンクを消します。
   
 
display:none
対応Win: NN7, IE6
未対応Win: Op, DP
 
   

 こうすると、検索エンジンから直接飛んできた人にはトップページへのリンクが見えて、トップページがブラウザーのキャッシュに残っている人にはリンクが見えません。
(ただし、display: noneやvisibility: hiddenに未対応のブラウザーの場合はリンクが普通に見えます。)

記入例

<html>
<head>
<meta http-equiv="content-style-type" content="text/css">
<style type="text/css"><!--
a:visited.no{
	display: none;
}
a:visited.hi{
	visibility: hidden;
}
-->
</style>
</head>
<body>
<a class="no" href="../index.html">ホームへ戻る</a>
<a class="no" href="test1.html">スタイルシートdisplay: noneのリンクテスト</a>
<a class="hi" href="test2.html">スタイルシートvisibility: hiddenのリンクテスト</a>
</body>
</html>

表示例

このサイトのトップページへのリンクはホームへ戻るです。

 スタイルシートのdisplay: none対応のブラウザー(IE 6、NN 7等)を使用し、このサイトのトップページからこのページに来た人には、上の「」の間のリンクが見えないはずです。トップページから来た場合でも「履歴をクリア」すれば上のリンクは表示されます。

スタイルシートdisplay: noneのリンクテスト「リンクテスト1」。
スタイルシートvisibility: hiddenのリンクテスト「リンクテスト2」。

 対応ブラウザーを使用の場合、上のリンクをクリックしてからこのページに戻ってくるとリンクが消えているはずです。

補足

display:none未対応ブラウザー

 スタイルシートで訪れたリンクの色を「body{background-color:white} a:visited.c{color: white;」などとして背景色と同じ色にすれば、見なくなります(ただし、反転表示すると見える)。

スタイルシート未対応ブラウザー

 <BODY>タグに記述する「<body bgcolor="white" vlink="white">」の方法だと、全ての訪れたリンクが見えなくなってしまいます。そのフレーム構成ページに書くリンクがトップページへのリンクだけなら、この<BODY>タグに記述する方法も使えます。

フレームページへジャンプ

 フレーム内ページに飛んだ時に自動的にフレーム全体を表示させる方法。

JavaScriptでジャンプ

 Javascriptを使ってフレーム内ページに飛んだら他のページにジャンプさせる。
1.フレーム強制表示ジャバスクリプト(パスをGET引数で指定)

 実は、時々自分のサイトがリンクされているか調べているんですが、その時にフレームセットを強制表示する[スパイラルウェア]というページからリンクされていることを見つけました。フレームセットから呼び出され、引数で指定されたフレームにGET引数で指定されたURLを指定するという方法です。この方法はクッキーの設定に依存しないので、より着実に動作すると思われます。(Macintoshのブラウザでも動作するのかな……?)うちのサイトでは、このフレーム強制スクリプトを無線LANとノートパソコンのページにてお借りしています。(2004/04/25)
 ドリームキャストのブラウザ、ドリームパスポートプレミヤだとこのジャバスクリプトは認識しませんでした。普通のフレームページを表示した時の状態になります。(2005/7/24追記)

2.フレーム強制ジャバスクリプト(パスをクッキーで指定)

 JavaScriptでフレーム内文書のパスをクッキーに退避しておいて、フレームセット文書側でクッキーを参照する方法です。掲示板にてcedarさんより教えてもらいました。この方法なら検索したページがフレームの一部としてちゃんと表示されます。ただし、表示者側にてMacintoshを使用していたり、WindowsのIEを使用していてもクッキー表示がオフだと、ブラウザクラッシュが起こってしまうそうです。WindowsのIEでクッキー表示がオンにしてあれば有効でいい方法なのに、なかなか難しいんですね。(cedarさんのサイトにスクリプトはあったのですが、閉鎖されたため参照不能。)
 OKWebにもcookieを使用したJavaScriptが載っていました

3.フレーム内を直接表示したら、別のページへジャンプするジャバスクリプト

このスクリプトは、ジャンプ先でジャンプ元のページが表示されるように指定しておかないと、検索エンジンから飛んできた人が見たいページが表示されないという問題があります。(私の場合、検索したページとは違うページに飛ばされたらそのサイトで探すことはやめて、他の検索結果を探すことがとても多いです。)


<SCRIPT language="JavaScript">
<!--
if(parent.location == location) location = "ジャンプ先に<FRAMESET>タグを記述しているファイルを指定";
//-->
</SCRIPT>
||||| Breaker Castle ||||| > Tuning of the Web Page > Direct Access is Avoided in the Frame Contentsより)

CGIで対応

 CGIを使う方法もあるらしいです。
http://www.okweb.ne.jp/kotaeru.php3?q=315500
http://okweb.jp/kotaeru.php3?q=967863

CSSの「position:fixed」で擬似フレーム

 ブラウザーが対応しているなら、スタイルシート2のposition:fixedでスクロールしない目次リンクをつくって、フレーム代わりに使うこともできます。これなら1枚のHTMLで済むのでファイル管理もすっきりします。

   
 
position: fixed
対応Win: NN7, OP 6; Mac: IE4以上, NN4以上;
未対応Win: IE6, DP;
 
   
 ただ、 2003年6月現在はまだまだposition:fixedに対応するブラウザーが少ないのです。例えば、WindowsのOpera6ではposition: fixedに対応していますが、表示が一部おかしく、position:fixedのbottomとrightには未対応で、bottomをtop、rightをleftと解釈してしまいます。JavascriptでブラウザーごとにCSSを振り分ける方法もあるけど、CSSをブラウザーごとに用意するのもめんどくさいし……。

 WindowsのIEとOperaがposition:fixedに対応した時、スタイルシートでの擬似フレームに挑戦したいと思います。
HTML記入例

<html>
<head>
<meta http-equiv="content-style-type" content="text/css">
<style type="text/css"><!--
body{
	margin-left: 200;
	padding: 300 0; /* わかりやすくするため、padding上下を300に設定。 */
}
.to_bottom{
	position: fixed;
	top: 110;
	left: 10;
}
span.back{
	position: fixed;
	top: 160;
	left: 10;
}
-->
</style>
</head>
<body>
<span class="to_bottom"><a href="#bottom">最下部へ</a></span><br>
<a name="bottom" >ここが最下部。</a>
<span class="back"><a href="../css.html">戻る</a></span>
</body>
</html>

表示例はこちら

擬似フレームその2(いまいち)

   
 
対応Win: IE 6
未対応Win: NN7
 
   

 from DFJの「grayscale」のスタイルシートみたいにスクロールしない目次をつくりたいと思い、OKWebを参考にして書いてみました。スタイルシートのoverflow:autoとposition:absoluteを使用。しかし、IE 6だとちゃんと表示されるのにNN7だとページ自体のスクロールもできなくなってしまうのでやめました。JavaScriptでスタイルシートをブラウザーごとに振り分ければいいんだろうけど、めんどくさい……。

HTML記入例

<html>
<head>
<meta http-equiv="content-style-type" content="text/css">
<style type="text/css"><!--
body{
	overflow: hidden;
	margin:0;
}
.to_bottom{
	position: absolute;
	top: 100;
	left: 0;
}
.back{
	position: absolute;
	top: 200;
	left: 0;
}
#o{
	overflow: auto;
	height: 100%;
	width: 100%;
	padding: 600 50; /* わかりやすくするため、padding上下を600に設定。*/
}
-->
</style>
</head>
<body>
<span class="to_bottom"><a href="#shita">下へ</a></span>
<span class="back"><a href="../css.html">戻る</a></span>
<div id="o" ><br>
<a name="shita">ここが最下辺。</a>
</div>
</body>
</html>

表示例はこちら

画像を両側に表示する

★  本文  ★
★  本文  ★
★  本文  ★

こんなふうに画像を両端に表示するにはどうするのかなと思い、両端に画像を表示しているサイトを周ってみました。以下のような方法がありました。

  1. スタイルシートを使う CSS未対応ブラウザーだと表示できない。少しHTMLに手を加えなければならないが、解像度に関係無く画像が左右に表示されるのでお勧め。
  2. フレームにする ウィンドウをフレームで縦に3つに分けて、左右のフレームに背景を設定し、真ん中のフレームに本文を書くという方法です。解像度に関係無く画像が左右に表示されますが、HTMLをフレームにしないといけないのがめんどう……。でも、四方を画像で囲みたい場合でもこの方法ならきれいにできます。
  3. 両端にもようが出るような画像を背景にする 解像度によっては両端に画像が出ない。また、両端に画像が出ていても、ウィンドウサイズを変えるとやはり両端に画像が出なくなる。
  4. ページ全体をテーブルで囲む ただ、テーブルは内容を全て読み込んでから、表示し始める。ページ全体を囲んでしまうと、データ量が多いため表示までの時間もかかるので適していない……。
ここでは、スタイルシートを使った方法を紹介します。

HTML記入例

外部スタイルシートファイル(both.css)


body{ 
	background:white url(bg.gif) repeat-y left top;
	padding: 0px 0px 0px 150px;
	margin: 0px;
}
div#right{
	background:white url(bg.gif) repeat-y right top;
	padding: 30px 150px 300px 0px;
	/*画面いっぱいになるように上下空白を指定しないと右画像が切れてしまう。*/
	margin: 0px;
}

HTML記入


<html>
<head>
<LINK REL=STYLESHEET TYPE="text/css" HREF="both.css">
</head>
<body>
<div id="right">
本文をここに書きます。
</div>
</body>
</html>

表示例はこちら

モニタ解像度によってJavaScriptでCSSを分岐

 モニタサイズの幅が1024ピクセルならレイアウトがきれいなのに、幅800ピクセルだと幅が狭くなってかっこ悪くなってしまう場合があります。そこで、モニタサイズによってスタイルシートを振り分けるJavaScriptを書きました。

モニタサイズによってCSSファイルを呼び出す方法


<html>
<head>
<script language='JavaScript'>
<!--
var w = screen.width  //画面幅
var cssHTML = '<link rel="stylesheet" type="text/css" href="'
if( w <= 640 ){//画面幅が640以下なら、スタイルシートsize640.cssを呼び出す。
	cssHTML += 'size640.css';
}
else if( w <= 800 ){//画面幅が640より大きく、800以下なら、size800.cssを呼び出す。
	cssHTML += 'size800.css';
}
else if( w <= 1024 ){//画面幅が800より大きく、1024以下なら、size1024.cssを呼び出す。
	cssHTML += 'size1024.css';
}
else{//画面幅が1024より大きいなら、size1024ov.cssを呼び出す。
	cssHTML += 'size1024ov.css';
}
cssHTML += '">'
document.write(cssHTML)
//-->
</script>
</head>
<body>
</body>
</html>

HTMLに書き込む方法


<html>
<head>
<script language='JavaScript'>
<!--
if( screen.width <= 800 ){
	document.write('<meta http-equiv="content-style-type" content="text/css"><style type="text/css"><!--body{margin: 0px 150px 0px 0px;padding: 0px;}--></style>'); 
}
//モニタ幅が800以下なら、スタイルシートでマージンを上0px 右150px 下0px 左0px、パッディングを0pxにする。-->
</script>
</head>
<body>
</body>
</html>

(参考:「JavaScript Lab.」−「第2回 アクセスユーザーのブラウザや環境をチェックする」
(2004/11/28作成)

参考文献

『HTML + CSS Handbook』C&R研究所 ソフトバンク パブリッシング 2002年4月5日初版発行 1800円+税

 HTMLCSSのリファレンスはウェブ上でも読めますが、手元に一冊欲しいと思って買いました。ウェブ上のリファレンスは通読する気になれなかったんですが、本だと全部読めました。この本はフルカラーで、スクリーンショットも多いです。これを読んで、HTMLのclearやCSSのpositionや、IDの使い方を知ることができました。

 ただ、巻末の索引はもっと充実させるべきです。私は索引にalign、iframe、targetなどを書き足しました。また、索引はタグ、CSS、アルファベット別に分けられていますが、総索引も欲しかったです。うろ覚えの時に索引を使うため、タグだかCSSだかアルファベットだか覚えていないので。
 2002年4月発行のため、WindowsのNN7とOperaの対応状況が載っていないのはしかたないんですが、ドリームキャストやプレイステーション2などゲーム機のブラウザーの対応状況は載せてほしかったところです。

 この本より詳しいウェブ上のHTMLとCSSのリファレンスはたくさんありますが、手元に置く一冊としてはよいです。