Snow-Materia > expression() の問題点


本文

前書き

expression() を使う上での問題点を挙げていきます。

ブラウザクラッシュ

expression() を使う上で(作る上で)、一番嫌なのがこれ。 すぐ無限ループ入っちゃったり、不思議な挙動sたがるんですよねー。 もう何度 Ctrl + Alt + Delete 押したことか…。

作るときは、ほんとに、何度も何度も実験しなくちゃいけないです。

あと、分かってるブラウザクラッシュは必ず避けてください(笑)
失敗ノートのとこに、 全部じゃありませんが、まあそれなりに書いてます。

あと検索してるとこんなものも見つかります。
「offsetWidth」でテーブル幅を指定したサイトでIE6が無反応に
ブラウザと動的な計算がかち合うのはやっちゃダメ、ということでしょうね。

IEのみ

IEの独自拡張なので、当然 IE しか使えません。
つまり、これをむやみやたらに使用する、ってことは、 他のブラウザのことは考えていない、とも考えられます。

何度も言うようですが、 ここのサンプルでいくつか挙げたのは、 ほとんど、他のブラウザで使えるけどIEでは使えない機能を、 IEでもどうにかそれなりに動くようにする、のが目的です。
IEのせいでサイトのデザインの幅が狭められる、というのはホント悲しいことです。

ということで、あんまりコレを使って凝ったコトはしないようにしましょう。
(つーか expression() くらいじゃそんな凝ったことはできないですけどね)

動的

動的であるということは expression()最大の長所である。
動的であるということは expression()最大の短所である。

とにかく、ページ表示がされてから、何らかの動き (マウスが画面上動いた とか スクロールした とか 一挙一動) がある度に、expression() が働くので、
もし、 文章がクソ長いページで、 数がクソ多い要素なんかに、 その度に計算が必要なようなクソ重いスクリプトなんか書いたら・・・、
・・・まあ、ブラウザさんは詰まって便秘になって病院送りでしょうねw

expression() はあくまでもスクリプトってことなんですよ。
言ってみれば、CSS内に劣化JavaScriptが書ける感じでしょうか。

ファイルの分割

onload 時に expression() を停止する でも書きましたが、 やっぱり、普通のCSSファイルと、expression() を記述するCSSファイルは、 2つに分けたほうが絶対いいです。

expression() の中身は結構長いもんだし、 しかもそれはIEにしかいらないものだし、 もし、その中に () とか {} とか ; とか , とかあった場合、 IEはいいのだけど、 そういう記号で、「スタイルが途切れてる」、と判断するブラウザがあったら、 (これからいろいろなブラウザで試してみますが) たぶん、おかしなことになるでしょう。

そういった意味で、onload 時に~でやった、

  1. IE独自の behavior という属性から、 HTCファイルを読み込む
  2. (ここで「IEのみ」と仕分けされている)
  3. expression()用のCSSを読み込む
  4. 適用

というパターンは、結構、理に適っていると思います。
いかがか。

備考

最後に。
サイトのCSSで expression() を使うときは、とりあえず、 何でここで expression() を使いたいのか、 ということを考えてください。
(ユーザースタイルシートとしてなら、使おうが使わなかろうが、 本人だけの趣味なので、どうだっていいです。笑)

CSS に動的な振る舞いを書ける、ってのは便利だし、 使いどころと使いようによっては、万能ナイフになります。

反面、扱いが難しいので、 使いどころと使いようによっては、諸刃の剣となります。

JavaScriptで代替可能なものなら、 わざわざCSSに同じようなの書かなくても、それ使えばいいし、 HTCで代替可能なら、そっちのが便利でしょう。

「CSSに書く」というのは、 そのスタイルでしか適用・適応しない、させたくないような振る舞いを、 expression() で簡単に書こう、っていうものだと思います。
簡便性と利便性というか。

実際、仮想-position:fixed; や、仮想-max-width なんかは、 JSとかだと結構適応が難しいです。 CSS切り替えできないし・・。 それに、仮想position:fixed; はかなり「動的」なものですしね。

そんなわけで、いろいろ気をつけながら使っていきましょう、というお話。

ページ情報
関連
目次
公開
2005.01.11