tetsunosukeのnotebook

tetsunosukeのメモです

UserAgentでCSSを切り替える

mixiのコミュニティで話題になっていた話。一般的にはJavaScriptを利用して切り替えるらしい。とりあえず「JavaScript CSS ブラウザ」で検索すると以下がひっかかった。

navigator.useragentプロパティで判定を行うのだ。 http://www5e.biglobe.ne.jp/~access_r/hp/javascript/js_085.html

しかしこれ、実はnoscript要素はhead内に書けない。

そこで考えてみたのだが、サーバサイドでプログラムを仕込むことで、CSSを出力させればよいのではないか?と思った。

ためしにPHPで書いてみるとこんな感じになる。

<?php
  // cssのためのヘッダー出力
  header("Content-type:text/css");
  // 環境変数HTTP_USER_AGENTを使う
  $ua = $HTTP_SERVER_VARS['HTTP_USER_AGENT'];
  // IEかどうかを判定
  if( preg_match("/IE/", $ua)){
    // IE用のCSSファイルを読み込んで内容を出力
    $cssSpec = file_get_contents("ie.css");
  } else {
    // その他の場合
    $cssSpec = file_get_contents("others.css");
  }
  print $cssSpec;
?>

利用する側はもちろん

<link rel="stylesheet" href="xxxx.php">

とすればよい。

例えばGETのパラメータでxxxx.php?file=hogeとかやっておいて、hoge_ie.cssとhoge_others.cssと分岐するようにしたり、ie用とそれ以外、またその共通部分を読み込んで出力するように工夫する手もあるだろう。