最後に問題の原因を見てみましょう
チェックボックスは画像を使用してレンダリングされます(CSSを介してカスタムのものを設定できます)。FireFoxの(チェックされていない)チェックボックスは、DOMインスペクターで強調表示されています。
そして、これがChromeの同じスタイルのないチェックボックスです:
マージン(オレンジ)が表示されます。パディングはありません(緑色で表示されます)。それで、チェックボックスの右側と下部にあるこの疑似マージンは何ですか?これらは、チェックボックスに使用される画像の一部です。そのため、単に使用するだけでvertical-align: middle
は不十分であり、それがブラウザ間の問題の原因です。
では、これについて何ができるでしょうか?
明白なオプションの1つは、画像を置き換えることです。さいわい、CSSを使用してこれを実行し、外部画像、base64(CSS内)画像、CSS内svg、または単なる疑似要素に置き換えることができます。これは堅牢な(ブラウザ間!)アプローチであり、この質問から盗まれたそのような調整の例を次に示します。
.checkbox-custom {
opacity: 0;
position: absolute;
}
.checkbox-custom,
.checkbox-custom-label {
display: inline-block;
vertical-align: middle;
margin: 5px;
cursor: pointer;
}
.checkbox-custom + .checkbox-custom-label:before {
content: '';
display: inline-block;
background: #fff;
border-radius: 5px;
border: 2px solid #ddd;
vertical-align: middle;
width: 10px;
height: 10px;
padding: 2px;
margin-right: 10px;
text-align: center;
}
.checkbox-custom:checked + .checkbox-custom-label:before {
width: 1px;
height: 5px;
border: solid blue;
border-width: 0 3px 3px 0;
transform: rotate(45deg);
-webkit-transform: rotate(45deg);
-ms-transform: rotate(45deg);
border-radius: 0px;
margin: 0px 15px 5px 5px;
}
<div>
<input id="checkbox-1" class="checkbox-custom" name="checkbox-1" type="checkbox">
<label for="checkbox-1" class="checkbox-custom-label">First Choice</label>
</div>
<div>
<input id="checkbox-2" class="checkbox-custom" name="checkbox-2" type="checkbox">
<label for="checkbox-2" class="checkbox-custom-label">Second Choice</label>
</div>
ここにリストされているようなスタイリングについて、さらに詳しい記事を読むことをお勧めします。この回答の範囲外です。
それでは、カスタム画像や疑似要素のないソリューションについてはどうでしょうか?
TL; DR:これは機能しないようです。代わりにカスタムチェックボックスを使用してください
最初に、他のブラウザでチェックボックスアイコン内の疑似マージンが任意である場合、一貫した解決策がないことに注意してください。1つを構築するには、既存のブラウザーでそのような画像の構造を調査する必要があります。
では、どのブラウザがチェックボックスに疑似マージンを持っているのでしょうか?私はChrome 75、Vivaldi 2.5(Chromiumベース)、FireFox 54(なぜそのような時代遅れなのかは質問しないでください)、IE 11、Edge 42、Safariをチェックアウトしましたか?(1分借りて、バージョンをチェックアウトするのを忘れました)。ChromeとVivaldiだけがそのような疑似マージンを持っています(OperaのようなすべてのChromiumベースのブラウザーも疑っています)。
それらの疑似マージンのサイズはどれくらいですか?これを理解するには、ズームされたチェックボックスを使用できます。
input {
zoom: 10;
box-shadow: 0 0 1px inset #999;
}
<input type=checkbox>
私の結果は、幅/高さの〜7%であり、絶対単位で0.9-1.0pxです。ただし、精度に問題がある可能性がzoom
あります。チェックボックスの値を変えてみてください。ChromeとVivaldiの両方での私のテストでは、疑似マージンの相対サイズはzoom
値10、20と値11-19(??)で大きく異なります。
scale
より一貫性があるようです:
input {
transform: scale(10) translate(50%, 50%);
box-shadow: 0 0 1px inset #999;
}
<input type=checkbox>
したがって、おそらく〜14%と2pxが正しい値です。
疑似マージンのサイズがわかった(?)ので、これでは十分ではないことに注意してください。チェックボックスアイコンのサイズはすべてのブラウザで同じですか?ああ!以下は、スタイルのないチェックボックスに対してDOMインスペクターが表示するものです。
- FireFox:13.3px
- クロム系:12.8px全部ため、従って12.8(100% - 14%)= 11px視覚的にチェックボックスとして知覚されるもののために
- IE 11、エッジ:13px
- Safari:なし(これらは同じ画面で比較する必要があると思います)
解決策やトリックを説明する前に、質問しましょう。正しい配置とは何ですか?私たちは何を達成しようとしていますか?ある意味では、それは好みの問題ですが、基本的には、次の「素晴らしい」アラインメントの側面を考えることができます。
同じベースライン上のテキストとチェックボックス(ここでは意図的にチェックボックスのサイズを調整しません):
または小文字で同じ中央の行を持っている:
または同じ大文字の大文字の真ん中の行(異なるフォントサイズの違いを確認する方が簡単です):
また、チェックボックスのサイズを小文字、大文字、またはその他の高さ(大きい、小さい、小文字と大文字の間)と同じにするかどうかを決定する必要があります。
このディスカッションでは、チェックボックスがテキストと同じベースライン上にあり、大文字のサイズ(非常に議論の余地のある選択肢)である場合、配置を適切に呼び出します。
次に、どのツールを使用する必要がありますか。
- チェックボックスのサイズを調整する
- 疑似マージンチェックボックスでChromiumを認識し、特定のスタイルを設定する
- チェックボックス/ラベルの垂直方向の配置を調整する
?
チェックボックスのサイズ調整:ありますwidth
、height
、size
、zoom
、scale
(私が何かを見逃しています?)。zoom
またscale
、絶対サイズを設定することはできません。そのため、ブラウザーサイズを設定するのではなく、テキストサイズの調整にのみ役立つ場合があります(ブラウザー固有のルールを記述できない場合)。size
Chromeでは動作しません(古いIEでは動作しましたか?とにかく、それほど興味深いものではありません)。width
そしてheight
Chromeと他のブラウザでの作業は、私たちは、共通のサイズを設定することができますが、再び、Chromeでそれが画像全体のサイズではなく、チェックボックス自体を設定します。注:これはチェックボックスのサイズを定義する最小値(幅、高さ)です(幅≠高さの場合、チェックボックスの正方形の外側の領域が「疑似マージン」に追加されます)。
残念なことに、Chromeの疑似マージンチェックボックスは、私が見る限り、どの幅と高さでもゼロに設定されていません。
最近、信頼できるCSSのみの方法はありません。
垂直方向の配置を考えてみましょう。vertical-align
に設定したmiddle
場合baseline
、またはChromeの疑似マージンのために一貫した結果を得ることができません。すべてのブラウザで同じ「座標系」を取得する唯一の実際のオプションは、ラベルとを入力することtop
です。
(画像上:垂直方向の位置合わせ:ボックスシャドウなしの上部、下部、下部)
これからどのような結果が得られますか?
input[type="checkbox"] {
height: 0.95em;
width: 0.95em;
}
label, input {
vertical-align: top;
}
<label><input type="checkbox">label</label>
上記のスニペットはChrome(Chromiumベースのブラウザー)で動作しますが、他のブラウザーではチェックボックスのサイズを小さくする必要があります。Chromiumのチェックボックス画像の癖を回避する方法でサイズと垂直方向の配置の両方を調整することは不可能のようです。私の最後の提案は次のとおりです。代わりにカスタムチェックボックスを使用してください。そうすればフラストレーションを回避できます:)