今更FizzBuzz問題をやってみた、CSS3で。

ほんと今更なんですが、FizzBuzz問題を解いてみたくなったのでやってみました。

って、CSS じゃないの。

以下、どうでもいい解説

まず、空のリストを100個用意します。ついでにolにfizzbuzzというクラスを名付けておきます。

<ol class="fizzbuzz">
  <li></li>
  <li></li>
  --- 中略 ---
  <li></li>
  <li></li>
</ol>

あとは、以下の様なCSSだけでおっけーです。

ol.fizzbuzz li {
  content: counter(count);
  counter-increment: count;
  display: inline;
  line-height: 1.5;
}
ol.fizzbuzz li:nth-child(3n) {
  content: "Fizz";
  font-size: x-large;
  color: blue;
}
ol.fizzbuzz li:nth-child(5n) {
  content: "Buzz";
  font-size: x-large;
  color: red;
}
ol.fizzbuzz li:nth-child(15n) {
  content: "FizzBuzz";
  font-size: x-large;
  color: green;
}

contentプロパティのcounter()を使って1から100までの数字を生成します。
次にその上から3の倍数の場合はFizz、5の倍数はBuzz、15の倍数はFizzBuzzと、表示するわけですが、それには:nth-child(n)セレクタを使います。かっこ内は数列になっているので、奇数や偶数、倍数など簡単に指定できます。
後は、共通の倍数の場合の処理ですが、CSSは記述した順序によって優先度が指定されるので、15の倍数を最後に記述しておけば何も問題ないわけです。
CSS3が全てのモダンブラウザで利用できる日が待ち遠しいです。
最後にOpera9.5 alpha で表示した結果のスクリーンショットでもはっておきましょう。