どもです。
フォームのCSSは永遠の課題感あります。
インラインブロック要素であるボタンが2つ以上並んでいて、サイズが違うものがある。
このとき、ボタンを下揃えで並べたい。
通常は、ボタンにvertical-align:bottom;でおk。
インラインな要素なら、普通はこれで解決できます。
が、
事情があって、このボタンはfloat:right;されているのです。
具体的には、このボタンたちはフォームのsubmit用ボタンで、
フォームをエンターしたときは一番前に記述したsubmitのイベントが発生するけれど、
一番右のボタンのイベントを発生させたいためにfloat:rightで並び順を逆にしているのです。
この状態ではvertical-align:bottom;が意味を成しません。要素が全て上付きになってしまいます。
どーしよう。
Menu
①margin-top調整できないか ←ブラウザ差異によって失敗。
あ゛あ゛あ゛あ゛あ゛あ゛ぁ(怒)
calc()で調整できないかなーとも思ったのですが、
そもそもボタンのデフォルトデザインが違うから親のdivの高さが違くなって、ダメですな!もう!
ん? ボタンのデフォルトデザインが違うからdivの高さが違くなる??
あ、そうか。
ボタンの高さが違うから差異になるんだ。
逆に言えば、ボタンの高さが同じなら差異は起きない。
②ボタンの高さを定めてしまえばどうとでもなる。
ボタン群の親{
text-align:right;
height:3em;
line-height:3em;
overflow:hidden;
}
button{
box-sizing:border-box;
height:3em;
float:right;
}
button.smallButton{
font-size:0.8em;
height:2em;
vertical-align:bottom;
float:none;
}
こうすればvertical-align:bottom;が効くし、margin-topで調整することもできるじゃないか。
ほらー!!
こーいうことが起きるので、新規サイトならいっそ
ボタンのデザインはデフォルトから変えてしまうのがGood!ですな!
また僕の前に立ちはだかるか、IE。
ボタンの中の文字がline-heightに従って押し広げられるよう。
まぁ、
致命的ではないし。
IEはもうサポート外で、いいかな。
追記:そもそもdisplay:flex使えばこんなことに悩む必要ないじゃん!
<div style="display:flex; flex-direction:row-reverse; align-items:flex-end;">
<button type="button" style="font-size:1.2em; margin-left:4px">大きいボタン</button>
<button type="button" style="font-size:0.8em;">小さいボタン</button>
</div>
レイアウトのためにfloatを使う時代は終わったんや!(;'∀')