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 の最新バージョンを提供しています。

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

2009年7月27日月曜日

SEO 業者の SEO 対策は信用できない。

基本的に彼らがやるSEOというのは検索エンジンの特徴を悪用するだけの一時的な対策に過ぎません。

SEO というのは皆さんご存じの通り Search Engine Optimization の略、検索エンジン最適化という意味です。つまり SEO 対策という言い方は 検索エンジン最適化対策ということになってしまいます。

最適化対策? おかしな言い方ですね。

業者が行う SEO というのは基本的に一時的な効果しか持たないものです。なぜなら彼らは SEO をビジネスで行っているので、長期間有効な SEO を行ってしまうとクライアントはそれ以上のお金を払ってくれないからです。定期的な更新が必要だと説明すればクライアントはそれを信じ続けてお金を払ってくれるでしょう。

それに、恐らく彼らは本当の SEO を理解していません。彼ら自身も SEO は一時的な効果しか持たない生もののような常に書き換えを必要とするものだと考えているのかもしれません。

では、正しい SEO というのは何か?

私個人の意見なのですが、まず技術的な SEO としては (X)HTML のガイドラインに沿って正しいコードを記述すること。次に最も重要なこととしてコンテンツを価値のあるものにすることです。

正直、これ以外にないと思います。

SEO 業者がよく行う、<h1>タグ内に いろんなキーワードを含むというやり方は良くないと思います。「○○、△△、××のことなら□□の~~」など。他にはフッターに関連ワードを大量に詰め込むことでしょうか。

HTMLに記述する内容というのは検索エンジンのためにあるわけではなく人間に情報を伝えるためにあるのです。人間にとって邪魔な情報を入れてある Web ページなどいつまでも検索エンジンで上位でいられるわけがありません。

昔の SEO 対策と比べればかなりマシな方法を使うようになってきてるとは思います。ですが、いまだに人が見るには邪魔な情報を多く含んだ汚い HTML であるということは変わっていません。

こういうやり方を「SEO 対策」と呼ぶのなら、いちばんの SEO は「SEO 対策」をしないことだと思います。

2009年7月18日土曜日

Firefox 3.5 の次のバージョンは Vista / 7 ネイティブな外観の UI になるのか

IE8, Chrome, Safari4 など、Windows Vista / 7 のUIガイドラインにそった形でデザインされたブラウザが増えてきました。

Firefox もその流れに沿って UI を変更しようという感じでしょうか。
https://wiki.mozilla.org/Firefox/Sprints/Windows_Theme_Revamp

実際どうなのでしょうか。個人的にはこの Vista 系の UI は使いやすいと感じますが、すべてのブラウザが同じようになる必要はないと思ったりもします。

Firefox はどの OS でもほぼ同じ UI を提供していることがひとつのメリットでもあるので、そこら辺が今後の Firefox のあり方に関わってくるのかなと思います。