ネットスケープ 4.xでの問題。

ネットスケープ 4.xはCSSを実装しているものの、その実装に大きな問題があります。実装が完全な独自仕様と言うのならまだ許せますが、その独自仕様さえも守れない有り様です。正直言って欠陥商品以外の何物でもありません。

こんなブラウザなので、ネットスケープ 4.xでのCSSの利用は諦めた方がいいのですが、今以って結構な数のユーザが残っており、CSSを使わないプレーンなページを見せるのに躊躇している方もいると思います。

ここでは、製作者が知る限りのネットスケープ 4.xでの問題点を簡単に挙げてみたいと思います。

ネットスケープ 4.xでの問題・目次。

ネットスケープ 4.xで特に注意すべき事。(平成17年11月10日 更新)

ネットスケープ 4.xには、4.0xと4.5以降の二系統があります。4.0x系統はCSSの処理が4.5以降以上に不正確なだけでなく、ボーダ系プロパティを用いた場合はHTML文書のマークアップによってはクラッシュする事もあります。ですから、ネットスケープ 4.0xではボーダ系プロパティは絶対に使わないようにして下さい。

ネットスケープ 4.xの独自仕様。

ネットスケープ 4.xでのCSSの原理。

ネットスケープ 4.xでは、CSSの原理からして、本来あるべき姿から離れています。

CSSには、ブラウザのスタイル機能をウェブ制作者などが自由に再定義出来るようにするためのものと言う一面があります。

しかるにネットスケープ 4.xの場合は、予めブラウザに設定されたスタイルを後からCSSで修正すると言うやり方を採っているようなのです。

スタイルの修正は、JAVAスクリプトを拡張したJAVAスクリプトスタイルシート(JSS)によって実現されます。

CSSで記述した場合は、CSSでのプロパティ定義をJSSに変換して処理します。

CSSからJSSへの変換機能にバグがあるのか、JSS自体にバグがあるのか…その答えは恐らく両方でしょう。

marginプロパティ

通常、ブロックレヴェル要素のmarginプロパティで値を「0」とした場合、隣接する要素に接すると言うのが正しい解釈です。

しかし、ネットスケープ 4.xでは、予めデフォルトスタイルでの上余白幅を取った状態を「0」としています。

従って、例えば<p>要素(デフォルトスタイルは上に一文字分の余白が入る)で「line-height: 1.2em」としている場合、他のCSS対応ブラウザでの「margin-top: 0;」を実現するにはネットスケープ 4.xでは「margin-top: -1.2em」としないといけません(実際にはこれでも正常に表示されない事も珍しくありません)。

また、<blockquote>要素リスト要素群など、左右の余白を取る要素に関しては、左右のマージンも同様に予め決められた値が加算される事となります。

ブロックレヴェル要素の扱い。

スタイルを当てられない要素。

ネットスケープ 4.xではスタイルが適用出来ない要素があります。

<html>要素。
<head>要素, <meta>要素, <link>要素及び<title>要素。
インライン要素。
編集済みを表わす要素(<ins>要素及び<del>要素)。
<ins>要素及び<del>要素には一切のスタイルが適用出来ません。
リストアイテム要素。

リスト要素群リストアイテムを表わす<li>要素,<dt>要素及び<dd>要素にline-heightプロパティ及びmarginプロパティ群以外のスタイルを当てる事は出来ません(機能しないどころか不正な表示やクラッシュの原因にもなります)。

但し、<ul>要素,<ol>要素及び<dl>要素にはスタイルを当てる事が出来ますので、文字の色を変えるなどしたい時はこれらの要素に必要な値を当てる事になります。とは言うものの、<dl>要素に関しては<dt>要素と<dd>要素の二つがある為、それぞれのスタイルを別々に定める事は難しいと言う事になります。

表(テーブル)関連要素。

表に関しては、原則的に<th>要素と<td>要素での指定が有効です。<tr>要素や<table>要素での指定は継承されない場合があります。

枠線に関する指定は一切使えません。

整形済みテキスト。

<pre>要素にいろいろプロパティを当てると、整形済みテキストとしての表示(半角空白や改行をそのまま反映させるなど)が行われなくなります。

つまり、勝手にプロパティが書き換えられてしまう事があります。

対策としては、スタイル定義の一番最後に「white-space: pre;」プロパティを当てる事で解決します。

ネットスケープ 4.xのプロパティの問題。

ネットスケープ 4.xではプロパティの組合わせでおかしくなる事があります。また特定のプロパティに問題があります。

ネットスケープ 4.xでのHTML文書の問題。

終了タグは省略しないできちんと書く。

省略されていると、そこでの処理がいい加減になってしまいます。

間違った終了タグを入れない。
間違って終了タグを入れてしまうと、そこから先の処理がおかしくなります。

ネットスケープ 4.x向けCSS作成の指針。

ネットスケープ 4.xにおいては、JAVAスクリプトとの併用に注意が必要です。

欠陥1・JAVAスクリプトが入るとHTML文書のタグが認識出来なくなる事があります。

ネットスケープ 4.xでは、「JAVAスクリプトを用いて」且つ「そのスクリプトが改行文字を書出している」場合、読み込んだHTML文書の途中で勝手に改行を入れてしてしまいます。この改行が偶然タグの途中に入ると、そのタグは正常に認識出来なくなり、結果表示の崩れに繋がります。しかも厄介なのは、この改行の挿入される位置が環境によって前後する事です。

CSSを使う使わないに拘らず、JAVAスクリプトを用いている限りこの問題は避けられません。実際、この欠陥によってアンカーが機能しないとか画像が表示出来ない等の問題がしばしば起こります。しかし、CSSで複雑なデザインをするとタグのエラーがそのままスタイルに影響して見るに堪えないページとなる可能性があります。

欠陥2・<noscript>要素が入るとスタイルが崩れます。

<noscript>要素の直後からマージンが無効になってしまいます。

このため、以下のように表(テーブル)の内部に<noscript>要素を収めます。

こうすると、スタイルの崩れが表(テーブル)内部で収まって外部には影響が出なくなります。

<srcipt type="text/javascript" src="○○.js"></script>
<table border="0">
    <tr>
         <td>
             <noscript>
                 (スクリプトが実行出来ない場合の代替コンテンツ(ブロックレヴェル要素))
                 </noscript>
             </td>
         </tr>
    </table>

この他の対処法としては、<noscript>要素を利用しないで済むような仕掛けにすると言うものもあります。

例えば画像を切替えるスクリプトを用いるのであれば、予めスクリプトが利用出来ない場合に表示させるデフォルトの画像を普通に<img>要素で埋め込んで、それを切替えるスクリプトを実行するようにすればいいでしょう。

最後にネットスケープ 4.xについてもう一度言います。

もう一度言います。ネットスケープ 4.xは言い訳出来ない欠陥商品です

しらぎくのウェブサイト作成入門サイトマップ

ページ外へのご案内。

marguerite.site@gmail.com