301 Moved Permanently

Moved to https://vow.g.hatena.ne.jp/vow/

じたばたとかげのこと

... not present in the proposed standard replacement (float-displace).

(続き)

いや、まあ、それ自体は、わからないでは、ないん、ですが。ない、けど。

仕様上の欠陥であるとn年前(しかも確かn〜8程度)からわかっている件について、仕様上も正しい代替手段の用意がまだこれっぽっちもできていない今の時点で、とりあえず邪魔くさいから外しちまえとノリノリでいわれてもですね、いやまあ確かに邪魔くさそうな見た目をしているし、実際それを残しておいたって仕様的には何の足しにもならないんでしょうけど、だからってそれでさっくり外されてしまったら欠陥仕様から逃れる術が無くなるんじゃいこのアホ。

根本的にはn年前に欠陥仕様をそのまま出してしまったW3Cが諸悪の根源であってmozilla単独が責めを負うべきことではないのかもしれないけれど、それ自体が使われない限りは特に他にインパクトもない余剰コードが、ただちょっと邪魔くさいというそれだけの理由で、正しい代替手段が用意されるよりも前にあっさりさっぱり引っ込められてしまうというのは、やはり何か順番が間違っているような気がする。

もっともこういうのは結局のところ程度とバランスの問題だから、世間一般の平均値的見地からすれば至極当然の帰結に過ぎないのかもしれない。こういう“ゴミ”を放置すると際限なくブクブク膨れていくのも事実だし。


ここで急に矛先を変えて、そもそもなぜ float-edge の始末が問題になったのかというと、普通に <IMG> を書くとはてなマークアップによってあっさり <P> の中に入ってしまうのが諸悪の根源であるような気がする。これだからCMSと名の付くモノはダメなんだ・・・と宗教戦争を始めても意味無いか。建設的でもないし。

状況を整理しよう。とりあえず今は P で代表するが実際は UL 等も同様である。

  1. 現状DOM的には IMG[float] は直近の P の子になってしまっている(これは邪悪である)
  2. 見た目の上では DIV.section の中に IMG[float]P が同じ余白で並ぶべき
    • 故に IMG[float] の余白のうち外壁側は0でなければならない(floatの側のmarginは絶対にcollapseしないので)
  3. 見た目の上では IMG[float]P の中の字との間に多少余白がほしい
    • 故に IMG[float] の側に余白がなければならない(P の側の余白はそれ自身の子同士の間には入らない)
  4. 見た目の上では IMG[float] を内包する P 自体の文と、次の段落の P の文は同じになるべき
    • 故に IMG[float]P の間のcollapse後の余白は P 単独の余白と同じにならなければならない

collapse後、と気楽に書いているけれど、何度も言っているとおりfloatのmarginはもはや二度とcollapseしない仕様であって、ここでいっているのはfloatにぶつかる側のmarginやpaddingが float-edge 的な意味でそもそもfloatに対して衝突しないために見かけ上collapseしたような気がするという話である。で今回の問題は、-moz-float-edge の実装が content-boxmargin-box だけになってしまったため、P 側の余白についてできることが、marginもpaddingも一切完全に衝突回避して消失するか、さもなくばmarginもpaddingも一切完全に正面衝突して居座るかの二択になってしまったと、こういう話なわけだ。

ではここで問題の邪悪を排除すれば状況にどの程度の改善があるかというと・・・無くはないがあまり本質的ではない。ええとつまり外側・内側ともに IMG[float] の側で余白を確保することになるので、P との衝突に関しては余計な配慮は一切不要となる。すなわち IMG[float]P の間には(float-edge の既定動作が content-box である以上) P 側の余白は入らないので、単に PIMG[float] に等量のmarginを与えておけば、見かけ上 P 側のmarginがcollapseしてうまくいくように見える。しかし UL の類に関してはどうかというと、UL の側のmarginおよびpaddingはcollapseしているのではなく衝突回避によって完全に無力化しているのが現実なので、bullet分のインデントだけを追加する直接の手段が無い件はそのままでは覆らない(ここで float-edgemargin-box にしてしまうと今度はcollapseするべきだった分まで復活してしまう)。すなわち IMG[float]P の間の余白の確保を float-edge: margin-boxP の側に移す、言い換えれば今までの方針とは逆に IMG[float] の内側の余白を0にして P ないし UL 側での余白を全て生かすようにしない限り、UL に固有のインデントを与えることはできない。確かにこれが邪悪排除の恩恵なのだけど・・・それで全て問題なしかというとさにあらず、この方針のつもりで float-edge に失敗した場合には IMG[float]P の間の余白が全て消失してしまうという大問題が残る。float-edge の動作可否によってまるで正反対のmargin配分をするというのが現実的に可能なのかどうか。

081214追記

float-edge: margin-box 化とこれに伴うマークアップ修正を完了。都合バカIE対策が一つ落下して微妙に悪化しているのだけどそこは一時保留。とりあえず読めなくはないし。