Conto 2.10でブラウザーのハックを忘れよう

(Contao公式サイトの記事: Forget about browser hacks in Contao 2.10の翻訳です。)

2011年4月19日 11:09 Leo Feyer

今度のContaoバージョン2.10はCSSハック、条件付きのコメント、他のブラウザー検出の評価手段を忘れることができる、強力な新しい機能を含んでいます。この機能はオペレーティングシステムとブラウザーに依存して、異なるCSSのclassをbodyタグに追加します。

確かに、このアイデアはまったく新しいものではありません。人気のあるスクリプトの多くは、ある機能を利用できる稼働亜を知らせるためにCSSのclassを使用しています。しかしながらContaoの解決策が100パーセントPHPに基づいたものであるのに対して、それらのほとんどはJavaScriptに頼っているため、JavaScriptを無効にしていると動作しません。

手っとり早い例

Windows 7でInternet 8を使用していると、bodyタグはこのようになります:

<body class="win ie ie8">

Mac OS XでFirefox 4を使用していると、bodyタグはこのようになります:

<body class="mac firefox fx4">

そしてiPhoneでページを表示しているなら、bodyタグはこのようになります:

<body class="iphone safari sf5 mobile">

ここでスタイルシートでは、セレクターのハックや条件付きのコメントを使用する代わりに、単純に以下のように書けます:

/* 一般的な書式指定 */
#wrapper { width:960px; }
 
/* Opera用に書式指定を調整 */
.opera #wrapper { width:940px; }
 
/* Windows上のIE6とSafari 2用の特別な書式指定を追加 */
.ie6 #wrapper, .win.sf2 #wrapper { width:980px; }
 
/* 携帯端末用に幅を調整 */
.mobile #wrapper { width:480px; }

完全なドキュメント

最初のclassはクライアントのオペレーティングシステム(例えばmacwinunix)を示します。2つ目のclassは完全なブラウザーの名前(例えばfirefox、ie、chrome、safari)に、2文字の短縮名とバージョン名を続けた文字列(例えばfx4ie9ch10sf5)から構成されます。クライアントが携帯端末の場合は、さらにmobileというclassが追加されます。

サポートするオペレーティングシステム

サポートするオペレーティングシステム
名前 class mobile
Macintosh mac なし
Windows CE win-ce あり
Windows win なし
Android android あり
Linux, FreeBSD, OpenBSD unix なし
iPad ipad あり
iPhone, iPod Touch iphone あり
Blackberry blackberry あり
Palm palm あり

サポートするブラウザー

サポートするブラウザー
名前 クラス名 短縮名
Firefox firefox fx fx4
Chrome chrome ch ch10
Safari safari sf sf5
IEMobile ie-mobile im im6
Internet Explorer ie ie ie9
Opera Mini opera-mini oi oi6
Opera Mobile opera-mobile om om11
Opera opera op op10
Camino camino cm cm2

開発者向けの情報

もちろん、新しい機能は独自の機能拡張でも使用できます。Environmentクラスに$this->Environment->agentとしてメソッドを追加しました。以下の情報を持ったオブジェクトを返します。

$this->import('Environment');
$ua = $this->Environment->agent;
 
echo $ua->os;      // オペレーゲィングシステム
echo $ua->browser; // ブラウザー名
echo $ua->shorty;  // ブラウザーの短縮名
echo $ua->version; // ブラウザーのメジャーバージョン
echo $ua->mobile;  // クライアントが携帯端末の場合にtrue
echo $ua->class;   // CSSのクラス文字列

新しい機能をリビジョン678からテストできます。

戻る