これは、私が常に悩まされている小さな CSS の問題の 1 つです。
Stack Overflow の人々はどのようにして垂直方向に整列しcheckboxes
、labels
一貫してクロスブラウザを実現しているのでしょうか?
Safari で正しく配置すると (通常vertical-align: baseline
は を使用input
)、Firefox と IE では完全にずれてしまいます。
Firefox で修正すると、Safari と IE は必然的におかしくなります。フォームをコーディングするたびに、これに時間を無駄にしています。
私が使用している標準コードは次のとおりです。
<form>
<div>
<label><input type="checkbox" /> Label text</label>
</div>
</form>
私は通常、Eric Meyer のリセットを使用しているため、フォーム要素は比較的クリーンなオーバーライドになっています。皆さんが提供できるヒントやコツを楽しみにしています。
ベストアンサー1
警告! この回答は古すぎるため、最新のブラウザでは動作しません。
私はこの回答の投稿者ではありませんが、これを書いている時点では、これは肯定票と否定票の両方で圧倒的に最も投票された回答 (+1035 -17) であり、まだ承認された回答としてマークされています (おそらく、質問の最初の投稿者がこの回答を書いた人であるためです)。
コメントで何度も指摘されているように、この回答はほとんどのブラウザでは機能しません (2013 年以降は機能しなくなっているようです)。
1 時間以上かけて調整、テスト、さまざまなマークアップ スタイルを試した結果、適切なソリューションが見つかったと思います。この特定のプロジェクトの要件は次のとおりです。
- 入力は独自の行に記述する必要があります。
- チェックボックスの入力は、すべてのブラウザで同様に(同一ではないにしても)ラベル テキストと垂直に揃える必要があります。
- ラベル テキストが折り返される場合は、インデントする必要があります (チェックボックスの下で折り返されないようにするため)。
説明に入る前に、コードを紹介します。
label {
display: block;
padding-left: 15px;
text-indent: -15px;
}
input {
width: 13px;
height: 13px;
padding: 0;
margin:0;
vertical-align: bottom;
position: relative;
top: -1px;
*overflow: hidden;
}
<form>
<div>
<label><input type="checkbox" /> Label text</label>
</div>
</form>
実際の例は以下をご覧ください。JSFiddle。
このコードは、フォーム入力のマージンとパディングを上書きしない Eric Meyer のようなリセットを使用していることを前提としています (したがって、マージンとパディングのリセットを入力 CSS に含めます)。明らかに、実際の環境では、他の入力要素をサポートするためにネストや上書きを行うことになりますが、ここではシンプルにしておきたいと思いました。
注意事項:
- この
*overflow
宣言は、インライン IE ハック (スター プロパティ ハック) です。IE 6 と 7 はどちらもこれを認識しますが、Safari と Firefox はこれを適切に無視します。これは有効な CSS であると思いますが、条件付きコメントを使用する方がまだ良いでしょう。単純にするために使用しただけです。 - 私の知る限り、
vertical-align
ブラウザ間で一貫していた唯一の記述は でしたvertical-align: bottom
。これを設定して相対的に上方に配置すると、Safari、Firefox、IE で 1 ピクセルか 2 ピクセルの差があるだけで、ほぼ同じように動作しました。 - 配置を扱う上での大きな問題は、IE が入力要素の周囲に謎のスペースをたくさん残してしまうことです。これはパディングでもマージンでもなく、非常にしつこいものです。チェックボックスの幅と高さを設定すると、
overflow: hidden
何らかの理由で余分なスペースがカットされ、IE の配置が Safari や Firefox と非常によく似た動作をします。 - テキストのサイズに応じて、適切な外観にするために相対的な配置、幅、高さなどを調整する必要があることは間違いありません。
今朝取り組んでいたプロジェクト以外では、この特定のテクニックを試したことがないので、もっと一貫して機能するものを見つけたら、ぜひ教えてください。