Conditional Selector

コンディショナルセレクタは、html.className に【jsが使えるか】【先進的なブラウザか】【メジャーなブラウザか】【どのブラウザか】【どのOSか】といった情報を設定します。

約半年前に作成したものをベースに色々と修正しました。

uu.consel.js

// Conditional Selector
//
// <style>
//  div>ul { color: black }               /* for Generic browser */
//  html.ifwebkit div>ul { color: blue }  /* for Safari, Chrome, iPhone */
//  html.ifadv div>ul { color: red }      /* for Safari4, Chrome2, Firefox3.5, Opera10.50 */
//  html.ifnoadv div>ul { color: green }  /* for IE, Opera10, Firefox3 */
// </style>

// <html class="ifnojs addua addos">
// default -> ifjs ifadv ifmajor
// "addua" -> ifie ifie6 ifie7 ifie8 ifie67 ifopera ifgecko ifwebkit ifiphone ifadv ifmajor
// "addos" -> ifwin ifnomac ifnounix
//
(function(ver, html) {
  var cn = html.className, v, i = 0,
      ary = [cn.replace(/ifnojs|addua|addos/g, ""), "ifjs"],
      id = "adv,major",
      ua = ",ie,ie6,ie7,ie8,ie67,opera,gecko,webkit,iphone",
      os = ",win,mac,unix";

  /addua/.test(cn) && (id += ua);
  /addos/.test(cn) && (id += os);
  id = id.split(",");

  while ( (v = id[i++]) ) {
    ary.push((ver[v] ? "if" : "ifno") + v);
  }
  // <html class="..."> modify
  /ifnojs/.test(cn) && (html.className = ary.join(" ").trim());
})(uu.ver, uu.html());

使いかた

<!doctype html><html class="ifnojs"><head><meta charset="UTF-8" />
<title></title>
<script src="uupaa.js"></script>
</head><body></body></html>

の、<html class="ifnojs"> の部分が <html class="ifjs ifadv ifmajor"> といったように変化します。
class="ifnojs" が設定されていなければ何もしません。

デモ

http://pigs.sourceforge.jp/blog/20100101/consel.htm
# altcss(uu.css3)を組み込んでいないため、CSSセレクタ的に IE6 だと動きません。

ブラウザの情報 や OSの情報 がほしければ
<!doctype html><html class="ifnojs addua addos"><head><meta charset="UTF-8" />

とすると、<html class="ifnojs addua addos"> を以下のように変更します。

IE6
  ifjs ifnoadv ifmajor ifie ifie6 ifnoie7 ifnoie8 ifie67 ifnoopera ifnogecko ifnowebkit ifnoiphone ifwin ifnomac ifnounix
IE7
  ifjs ifnoadv ifmajor ifie ifnoie6 ifie7 ifnoie8 ifie67 ifnoopera ifnogecko ifnowebkit ifnoiphone ifwin ifnomac ifnounix
IE8
  ifjs ifnoadv ifmajor ifie ifnoie6 ifnoie7 ifie8 ifnoie67 ifnoopera ifnogecko ifnowebkit ifnoiphone ifwin ifnomac ifnounix
Chrome4
  ifjs ifadv ifmajor ifnoie ifnoie6 ifnoie7 ifnoie8 ifnoie67 ifnoopera ifnogecko ifwebkit ifnoiphone ifwin ifnomac ifnounix
Safari3.2
  ifjs ifnoadv ifmajor ifnoie ifnoie6 ifnoie7 ifnoie8 ifnoie67 ifnoopera ifnogecko ifwebkit ifnoiphone ifwin ifnomac ifnounix
Safari4
  ifjs ifadv ifmajor ifnoie ifnoie6 ifnoie7 ifnoie8 ifnoie67 ifnoopera ifnogecko ifwebkit ifnoiphone ifwin ifnomac ifnounix
iPhone3.1.2
  ifjs ifadv ifmajor ifnoie ifnoie6 ifnoie7 ifnoie8 ifnoie67 ifnoopera ifnogecko ifwebkit ifiphone ifnowin ifmac ifnounix
Firefox2.0
  ifjs ifnoadv ifnomajor ifnoie ifnoie6 ifnoie7 ifnoie8 ifnoie67 ifnoopera ifgecko ifnowebkit ifnoiphone ifwin ifnomac ifnounix
Firefox3.5
  ifjs ifadv ifmajor ifnoie ifnoie6 ifnoie7 ifnoie8 ifnoie67 ifnoopera ifgecko ifnowebkit ifnoiphone ifwin ifnomac ifnounix
Opera10.10
  ifjs ifnoadv ifmajor ifnoie ifnoie6 ifnoie7 ifnoie8 ifnoie67 ifopera ifnogecko ifnowebkit ifnoiphone ifwin ifnomac ifnounix
Opera10.50
  ifjs ifadv ifmajor ifnoie ifnoie6 ifnoie7 ifnoie8 ifnoie67 ifopera ifnogecko ifnowebkit ifnoiphone ifwin ifnomac ifnounix

addua や addos は省略可能です。

追加される class の一覧

IDENT SWITCH CONDITION
"ifjs" ifnojs Enable JavaScript
"ifadv" ifnojs Advanced browsers: Firefox3.5+, Safari4+, Chrome2+, Opera10.50+
"ifmajor" ifnojs Major/Majority browsers: IE6+, Opera9.5+, Firefox3+, Safari3.1+, Chrome
"ifie" addua IE6, IE7, IE8
"ifie6" addua IE6
"ifie7" addua IE7
"ifie8" addua IE8
"ifie67" addua IE6, IE7
"ifopera" addua Opera9.5+
"ifgecko" addua Firefox3+
"ifwebkit" addua Safari3.1+, Chrome, iPhone, iPod
"ifiphone" addua iPhone, iPod
"ifwin" addos Windows OS
"ifmac" addos Mac, Mac OS X
"ifunix" addos Unix like OS, Linux, FreeBSD, SunOS
"ifnojs" ifnojs Disable JavaScript
"ifnoadv" ifnojs Classic browsers: IE, Firefox<3.5, Safari<4.0, Opera<10.50
"ifnomajor" ifnojs Minor/Minority browsers: IE<6, Firefox<3, Safari<3.1, Opera<9.5
"ifnoie" addua !(IE6, IE7, IE8)
"ifnoie6" addua !IE6
"ifnoie7" addua !IE7
"ifnoie8" addua !IE8
"ifnoie67" addua !(IE6, IE7)
"ifnoopera" addua !(Opera9.5+)
"ifnogecko" addua !(Firefox3+)
"ifnowebkit" addua !(Safari3.1+, Chrome, iPhone, iPod)
"ifnoiphone" addua !(iPhone, iPod)
"ifnowin" addos !(Windows OS)
"ifnomac" addos !(Mac, Mac OS X)
"ifnounix" addos !(Unix like OS, Linux, FreeBSD, SunOS)

問題が無ければ次回のリリースから利用可能になります。