2009年8月28日金曜日

Firefox 3.5 の display: table;(table-row; table-cell;) 関連の挙動について

※この記事は古いバージョンの Firefox について書いた内容です。最新バージョンでは正常に動作しています。

Firefox 3.5 の CSS のレンダリングには仕様なのかバグなのかよくわからない挙動が起きることがあります。

というか恐らくバグなのですが、簡単にいえば、CSSで display: table-cell; を指定してマルチカラムレイアウトを行っている場合に Firefox 3.5 だとまれにカラム落ちしてしまうという現象が起きてしまいます。

現象

まず以下のサンプルを見ていただきたいと思います。

新しいウィンドウで開く

Firefox 3.5 で見たときどのように表示されていたでしょうか?

ソースは以下のようになっています。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>テスト</title>
<style type="text/css"> 
#main {
	display: table;
	table-layout: fixed;
	width: 400px;
}
#left {
	display: table-cell;
	width: 200px;
	background-color: aqua;
	overflow: hidden;
} 
#right {
	display: table-cell;
	width: 200px;
	background-color: orange;
}
</style>
<body>
<div id="main"> 
<div id="left">
<p>200px</p>
<input type="button" value="ボタン" onclick="aaa()" />
<script type="text/javascript"> 
function aaa() {
	alert("Hello World.");
}
</script>
</div>
<div id="right">200px</div>
</div>
</body>
</html>

CSS で ブロック要素をテーブルに見立てる場合は親のボックス、このソースの場合は #main に対し、display: table; を指定します。

次に、#main の子要素には display: table-cell; を指定するすると以下の図のような表示になるはずです。(IE8 による正しい表示)

default

そして Firefox では以下の図のように表示されていたと思います。ただし、これは必ずではなく正しく表示される場合と誤って表示される場合があります。

mistake

ここで、HTML に詳しい方はすでに以下のことに気づいているかもしれしません。

  • display: table; = <table>
  • display: table-row = <tr>
  • display: table-cell; = <td>

だとするなら、上記のソースでは <tr> に該当する指定がどこにも見当たらないということに。

しかし、CSS の仕様では table-cell,HTMLでいう<td> の直接の親要素(この場合は table-row, HTMLでいう <tr>)にあたるモノが存在しない場合、レンダリングエンジンはそれらの要素の前後に必要な要素を追加しレンダリングすることになっています。

これは、レンダリングエンジンがその要素をあるものとして仮定しレンダリングをするので、DOM上では追加されていないままになっています。

つまり、Firefoxではパースを行いレンダリングする際に、何らかの不備があり、まれに<tr>要素の追加をできないまま、横並びにならずカラム落ちしてしまうことになります。

注意

ただ、どんな環境でも等しくカラム落ちするというわけではありません。ローカルでプレビューした場合は特に問題なく表示されていることでしょう。

上記のHTMLの場合はおそらく忍者のサーバーに置いていることに原因があります。このサーバーは HTML に広告を追加するような設定になっていますが、その際に<tr>の追加に悪い影響を与えているのではないかと思います。

広告が追加されないサーバーでも F5 キーを押して何度も再読み込みをすればカラム落ちすることがあります。

解決方法

<tr> の生成に不具合があることは次のようにソースを修正することによって予測できます。

#main {
	display: table;
	display: table-row;
}

これでプレビューしてみましょう。すると、Firefoxで何度ページを読み直してもカラム落ちしないようになっているはずです。

新しいウィンドウで開く

これで、原因はおそらく上記のように <tr> の生成に問題があったということが証明できそうです。

<table>に該当する要素がありませんが・・・ と、思った人もいるでしょうが、この場合も<tr>の前後には<table>があるものとしてレンダリングが行われています。

同じように<table>の生成に不具合があったとしても、この場合は<tr>と<td>の関係によって見た目上は正しく表示できているのでしょう。

最後に

どうでしょうか、これは Firefox のバグだと思いますか?もしバグだとするなら Firefox も完璧ではないということになりそうです。

そして逆に IE8 が(少なくともこの点に関しては)しっかり作られていると言えそうです。

2009年8月20日木曜日

bing Webmaster Center

Micorosoft の検索サービス、bing にも GoogleYahoo! Japan と同じようにウェブマスターツールが存在します。

bing Webmaster Center

ちなみに、Google と Yahoo! Japan のウェブマスターツールはこちら。

bing は米国で一時期 Yahoo! を抜き、2位の検索シェアを得るなど注目を集めている検索エンジンです。この検索エンジンにも Google や Yahoo! と同じくらいSEO上、重要な価値があります。

この Webmaster Center に登録することで自分の Web サイトを確実にインデックス化(検索エンジンに登録)してもらいましょう。

ウェブマスターツール とは

ウェブマスターツール は Web サイト管理者のために主に以下の機能を提供します。

  • ページのインデックス状況
  • 他サイトからのリンク状況
  • クローラーの巡回状況
  • 上位の検索クエリ

簡単にいえば、これらのツールに自分の Web サイトを登録することで検索エンジンに正しくサイトを巡回してもらい、その結果状況を教えてもらうことができます。

問題点

2009年8月現時点では日本語版は存在しないようです。ですが、登録して損は無いので、翻訳しながら登録することをおすすめします。

2009年8月11日火曜日

Microsoft の「反IE6」に対するコメントについて

Microsoft は「ブラウザのサブプライヤーとしてはセキュリティ、パフォーマンス、互換性などの理由から、最新のIEに乗り替えてもらいたい。しかし IE6 のサポートをやめるつもりはない」と発言しています。これは正しい考え方だと思います。

IE6 撲滅運動は、ブラウザをアップグレードすることを促すことで IE6 のシェアを減らそうというものだと私は解釈しています。だから Microsoft に IE6 のサポートを終了させて強制的にユーザーを移行させるというのでは問題が生じてきます。

重要なことは

ユーザーに乗り換えを強制するのではなく、ユーザーに“Web ブラウザをアップグレードする意識”を持ってもらうことが大切だと考えます。

2009年8月9日日曜日

『contentEditable』 HTML 5 で採用予定の機能で Microsoft が開発したモノ

contentEditable。

Internet Explorer 5.5 からサポートされている機能で、『contentEditable="true"』と書いてあるdiv内の領域は編集が可能になります。

Internet Explorer 8 は HTML 5 標準を一切サポートしていないように思われていますが、CNETなどの記事によれば

  • DOMストレージ
  • ドキュメント間メッセージング
  • ドメイン間メッセージング
  • AJAXナビゲーション

などをサポートしています。

Microsoft が新しい Web の規格に全く無関心なわけではないとわかります。

その他のベンダーは

他のブラウザメーカー、Apple、Opera、そして Mozilla までもが最近は実装の速さを競うだけで、正確な実装を行っていない印象すら受けます。そこに冷静で慎重な Microsoft が参加したことは重要なことだと思います。

Apple や Opera などは特に Acid 系テストをパスするのに不正を行うような企業です。とはいえ、彼ら(というか Apple)が新しい Web 標準を率先して業界を前進させていることも事実だとは思います。

まとめ

IE の独自機能も最終的に Web 標準として取り入れられ役に立つのであれば、独自実装も完全に悪いものだとは言えないかもしれません。

2009年8月6日木曜日

IE6 No More

IE6はもう必要ありません。下を見てください。

Warning!
あなたは旧式ブラウザをご利用中です
このウェブサイトを快適に閲覧するにはブラウザをアップグレードしてください。
Get Firefox 3.5
Get Internet Explorer 8
Get Safari 4
Get Google Chrome

これは IE6 を使っているユーザーに対し、ブラウザのアップグレードを促すメッセージです。http://www.ie6nomore.com/code-samples.html

なぜIE6ではダメなのか。

IE6は最新の Web 技術に対応していません。そしてセキュリティリスクも最新のブラウザと比べても多くあります。

Web 開発者は、他のブラウザと同じ機能を再現するためにわざわざ IE6 ために特別なコードを書く必要があります。それは時間の無駄であり、利益になりません。ユーザーが協力する(IE6の使用をやめる)ことによって Web 開発者はもっと高機能で高速で安全なサービスを短期間で開発できるようになります。

ではどうすればいいか。

ブラウザをアップグレードするだけです。上にもある通り、ブラウザにはいくつか種類があります。

上記のどのブラウザを選んでも良いのです。開発元が違うだけでインターネットをする際には使い勝手の違い以外は特にありません。

ただし、IE6 は必ず IE8 にアップグレードしておいてください。

アップグレードによって得られる利点

最新のブラウザにアップグレードする利点がいくつかあります。

  • 動作が高速になる。
  • タブブラウズが可能になる。
  • 安定性が向上する。
  • 安全性が向上する。

この数年、IE6 は変わっていなくても、Web は変わっています。Web のあり方が変わってきている今、IE6 が備えている機能だけでは今の Web にすべて対応することができなくなってきています。

Microsoft は今の Web に対応した IE の最新バージョンを提供しています。

私はこの活動を支持しています。