2005/11/22

[Web]IE対策: baseタグを削除。すると・・・

以前からずーーーっと気になってた、IEで文字列の選択ができないバグを直した。放置していた理由は、明確な原因が分からなく、対応できなかったから とりあえずではあるが、baseタグを使用しているページで、親要素にpositionを指定している子要素に対して再現するようだ。positionfloatってバグ多いよね。なんとかしてよ…

で、対策としてbaseタグをなくしました。やったね!! これだけで解決!! と言いたい所ですが、別の問題が持ち上がりました

baseタグとは、そのページ内で使用するURLのルートディレクトリとなる文字列を指定するタグ。例えばhead内に
<base href="http://www.geocities.jp/kissasoftware/"/>
と書いた場合、以下のように
<img src="img/smiles/smile.png"/>
と指定したURLは全て
<img src="http://www.geocities.jp/kissasoftware/img/smiles/smile.png"/>  
に置き換えられる。baseタグを用いることで、絶対パスでURLを指定するときのような冗長さをなくすことが出来る。

ところが今回やむなくこのbaseタグの使用を止めたので、このサイトで用いている全てのURLが無効になっている もっともトップページのURLはbaseタグがなくなっても同じものを指しているので、問題なく表示できる。しかし個々の記事のpermalinkへ飛ぶと顔文字が消えるなどの症状が出る

問題はblogのディレクトリ管理にある。私のサイトのディレクトリ構造は
+ kissasoftware
  + img
    + smiles
      - smile.png
          :
      - worry.png
  + archive
    - 2005_07_01_neutoria_archive.htm
    - 2005_08_01_neutoria_archive.htm
        :
    - 2005_11_01_neutoria_archive.htm
  - index.htm
となっている。つまり、太字で書いたトップページのindex.htm2005_11_01_neutoria_archive.htmとでは、smile.pngを参照するまでの相対パスが違うのだ

これを解決するには全てのパスを絶対パスで指定するしかない。しかしそうすると、冗長にURLを記述する必要がある上、ファイル容量が大きくなってしまうという欠点がある。baseタグはこのあたりを実にうまく処理していた。使えないのは本当に残念だ (全部IEが悪いというのは言うまでもない)

blogはCMSとしては手軽で有能だが、こういうところにも欠点(!?)もある。これらを統一するいい方法あるかなー?? 思いついた人教えてください