たまに忘れてFirebugで調査して「あーそうだった! これだよ! クソが! 俺か!」みたいな。これはFirefoxのフォーム系の置換要素に設定してあるデフォルト・スタイルで、入力ボックスとボタンの高さを揃えるのが面倒くさい原因のひとつ(もちろんこれだけではない)。これはかなり昔からあるけど「置換要素がline-height
プロパティーで高さ変わるわけねーだろクソが」という理由によりWon't Fixなので、死ぬまで付き合うことになりそう。
!important
なため制作者スタイルからはどうあがいても上書きするのは無理なので、他のブラウザー向けにline-height: normal
を設定してやるのがまず必要。その上で入力ボックスとボタンのbox-sizing
プロパティーが違うことに気をつけ、高さを指定する。
input[type="text"] {
height: 1.75em;
line-height: normal;
box-sizing: border-box;
}
input[type="submit"] {
height: 1.75em;
line-height: normal;
}
height
プロパティーだけではテキストが中央揃えにならないんじゃないかと思いがちだが、appearance
プロパティーの効果(多分)によりちゃんと中央揃えになるので特に気にする必要はない(どうせline-height
プロパティーを使えないので揃わなかったらどうしようもないけど)。box-sizing
プロパティーにはFirefox向け(Firefox 14でもまだ外れていない)にプリフィックスが必要になることには注意。
box-sizing
プロパティーを揃えない場合は、padding
プロパティーで調節するという手もあるが、その場合は入力ボックスやボタンの高さがブラウザーに依存することになる(line-height: normal
がブラウザーによって違うので)。またline-height
プロパティーはnormal
の場合、その値はブラウザーだけでなくfont-family
プロパティーにも影響を受けるので、padding
プロパティーで高さを揃える場合はfont-family
プロパティーも揃える必要が出てくる。
最後に-moz-focus-inner
擬似要素(擬似クラスではない気がする)の存在も頭に入れる必要がある。この擬似クラスについてはドキュメントがないので正確なことはわからないんだけど、border
とpadding
プロパティーがデフォルトで指定されており、これが高さと位置ずれの原因になったりする。なのでnormalize.cssからコードを拝借してリセットしてやると良い。
これ以外にもappearance
プロパティーがウボァとか色々あって、フォームは魔窟のままなくせに機能追加だけはどしどしされてて大変。デザインが許すならスタイル無指定で……といきたいところ。検索フォームとかはそろそろボタンなしでtype="search"
にすれば良い感じな気はするので、そういうところでは積極的にフォーム部品を少なくしていくとかもまぁアリなのかも。そういうのが許されない時は上記のことを忘れずに気長に頑張りましょう。