チェックボックスとそのラベルをブラウザ間で一貫して配置する方法 質問する

チェックボックスとそのラベルをブラウザ間で一貫して配置する方法 質問する

これは、私が常に悩まされている小さな CSS の問題の 1 つです。

Stack Overflow の人々はどのようにして垂直方向に整列しcheckboxeslabels一貫してクロスブラウザを実現しているのでしょうか?

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 時間以上かけて調整、テスト、さまざまなマークアップ スタイルを試した結果、適切なソリューションが見つかったと思います。この特定のプロジェクトの要件は次のとおりです。

  1. 入力は独自の行に記述する必要があります。
  2. チェックボックスの入力は、すべてのブラウザで同様に(同一ではないにしても)ラベル テキストと垂直に揃える必要があります。
  3. ラベル テキストが折り返される場合は、インデントする必要があります (チェックボックスの下で折り返されないようにするため)。

説明に入る前に、コードを紹介します。

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 と非常によく似た動作をします。
  • テキストのサイズに応じて、適切な外観にするために相対的な配置、幅、高さなどを調整する必要があることは間違いありません。

今朝取り組んでいたプロジェクト以外では、この特定のテクニックを試したことがないので、もっと一貫して機能するものを見つけたら、ぜひ教えてください。


警告! この回答は古すぎるため、最新のブラウザでは動作しません。

おすすめ記事