[解決済み] チェックボックスとそのラベルをクロスブラウザーで一貫して揃える方法
質問
これは、私が常に悩まされているCSSのマイナーな問題の一つです。
スタックオーバーフローでは、どのように
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のresetを使っているので、form要素は比較的きれいにオーバーライドされています。何かヒントやコツがあれば教えてください。
どのように解決するのですか?
警告! この回答は 古すぎる そして は機能しません をご利用ください。
<サブ 私はこの回答の投稿者ではありませんが、これを書いている時点では、肯定票・否定票ともに圧倒的にこの回答が多く(+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 ハック (the star-property hack) です。 IE 6と7はそれに気づくが、SafariとFirefoxはちゃんと無視する。有効なCSSかもしれないが、条件付きコメントを使った方がまだましだ。ただ、簡単のために使っただけだ。 -
私の知る限りでは、唯一の
vertical-align
の文は、ブラウザ間で一貫していました。vertical-align: bottom
. これを設定し、相対的に位置を上にすると、Safari、Firefox、IEでほぼ同じ動作となり、1~2ピクセルのずれが生じただけでした。 -
アライメントを扱う上で大きな問題となるのは、IEが入力要素の周りに謎のスペースを大量に貼り付けることです。 これはパディングでもマージンでもなく、しかもやたらとしつこい。 チェックボックスに幅と高さを設定し、さらに
overflow: hidden
を使うと、なぜか余分なスペースがなくなり、IEのポジショニングがSafariやFirefoxと非常によく似た動作をするようになります。 - テキストのサイズによっては、相対的な位置、幅、高さなどを調整して、正しく表示する必要があります。
これが誰かの役に立つといいのですが 今朝作業していたプロジェクト以外ではこのテクニックを試していないので、もっと安定的に動作するものを見つけたら、ぜひ教えてください。
警告! この回答は 古すぎる そして うまくいかない をご利用ください。
関連
-
[解決済み] HTMLのid属性に有効な値は何ですか?
-
[解決済み] 画像の横のテキストを縦に揃える?
-
[解決済み] div 内の画像を縦に並べる方法
-
[解決済み] divの中のテキストを縦に揃えるにはどうしたらいいですか?
-
[解決済み] divの内容を下に揃える方法
-
[解決済み] CSSコンテンツによるHTMLエンティティの追加
-
[解決済み] div内の要素を縦に並べるにはどうしたらいいですか?
-
[解決済み] フレックスアイテムを右寄せにするには?
-
[解決済み】全てのブラウザで、Webページのキャッシュを制御するには?
-
[解決済み】CSSを使用して、すべてのブラウザでdiv要素を垂直方向に中央に配置するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] HTML IFステートメント
-
[解決済み] XHTMLの自己完結型タグを除くオープンタグにマッチするRegEx
-
[解決済み] 入力テキストボックスの値を取得する
-
[解決済み] 複数のノンブレイキングスペース("nbsp")ではなく、タブスペースを使用しますか?
-
[解決済み] HTMLでBase64画像を表示する方法
-
[解決済み] hr要素の色を変更する
-
[解決済み] CSS 背景の不透明度 [重複]について
-
[解決済み] IMGとCSSのbackground-imageはいつ使い分ける?
-
[解決済み] テーブル内のテキストアラインクラス
-
[解決済み] CSSでdivを縦にスクロールできるようにする