チェックボックスを次のようにスタイルしたい:
これは私の[〜#〜] css [〜#〜]:
.checkboxcontact input[type="checkbox"] {
-webkit-appearance: none;
background-color: white;
border: 1px solid #d44803;
padding: 9px;
border-radius: 3px;
display: inline-block;
position: relative;
float:left;
}
.checkboxcontact input[type="checkbox"]:checked {
background-color: #d44803;
border: 1px solid white;
color: #fff;
}
.checkboxcontact input[type="checkbox"]:checked:after {
content: '\2714';
font-size: 14px;
position: absolute;
top: 0;
left: 3px;
color: #fff;
font-family: "FontAwesome";
}
これは、デスクトップでは完璧で、携帯電話ではChrome=です。
しかし、問題はiPhoneのSafariにあります。次のように表示されます。
どうすれば修正できますか?フォールバックなどはありますか?
上記で提案したように、疑似要素は入力ではうまく機能しませんが、チェックボックスの内側をラベルにラップすることをお勧めします-これはw3cが有効であるため、意図したとおりに機能し、ラベルにfor
タグを使用したり、入力チェックボックスにid
を使用したりする必要はありません。
HTMLは次のとおりです。
<label class="custom-checkbox">
<input type="checkbox" value="checkbox1">
<span>Checkbox</span>
</label>
コードは十分に用途が広いので、ラベルなしのチェックボックスだけが必要な場合は、スパンを空のままにします-タグを維持する必要があります-または、独自のカスタムクラスを作成してラベルに疑似要素を適用できます自体。
CSSは次のとおりです。
.custom-checkbox {
position: relative;
display: block;
margin-top: 10px;
margin-bottom: 10px;
line-height: 20px;
}
.custom-checkbox span {
display: block;
margin-left: 20px;
padding-left: 7px;
line-height: 20px;
text-align: left;
}
.custom-checkbox span::before {
content: "";
display: block;
position: absolute;
width: 20px;
height: 20px;
top: 0;
left: 0;
background: #fdfdfd;
border: 1px solid #e4e5e7;
@include vendorize(box-shadow, inset 2px 2px 0px 0px rgba(0, 0, 0, 0.1));
}
.custom-checkbox span::after {
display: block;
position: absolute;
width: 20px;
height: 20px;
top: 0;
left: 0;
font-size: 18px;
color: #0087b7;
line-height: 20px;
text-align: center;
}
.custom-checkbox input[type="checkbox"] {
opacity: 0;
z-index: -1;
position: absolute;
}
.custom-checkbox input[type="checkbox"]:checked + span::after {
font-family: "FontAwesome";
content: "\f00c";
background:#d44803;
color:#fff;
}
そして、これが実用的なフィドルです: https://jsfiddle.net/ee1uhb3g/
すべてのブラウザー-FF、Chrome、Safari、IEなどで検証済みテスト済み
疑似要素:after
または:before
入力タイプ要素では正しく機能しません。したがって、afterのような疑似要素をそれらに追加することは正しくありません。チェックボックスの横にラベルを追加し、そのためのスタイルを追加します。
.checkboxcontact label {
display: inline-block;
position: relative;
vertical-align: middle;
padding-left: 5px;
}
.checkboxcontact input[type="checkbox"] {
opacity: 0;
}
.checkboxcontact label::before {
content: "";
display: inline-block;
position: absolute;
width: 17px;
height: 17px;
left: 0;
margin-left: -20px;
border: 1px solid #d44803;
border-radius: 3px;
background-color: #fff;
}
.checkboxcontact input[type="checkbox"]:checked + label::before,
.checkboxcontact input[type="checkbox"]:focus + label::before {
background-color: #d44803;
border: 1px solid white;
}
.checkboxcontact input[type="checkbox"]:checked + label::after {
content: '\f00c';
font-size: 14px;
position: absolute;
top: 2px;
left: -17px;
color: #fff;
font-family: "FontAwesome";
}
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet"/>
<div class="checkboxcontact">
<input type="checkbox" id="check1"/>
<label for="check1">
Check me out
</label>
</div>
同じ問題が私も一度直面した。あなたのデザインに従ってチェックとチェック解除の画像を使用することをお勧めします。ユーザーがチェックすると、画像srcはチェックされた画像に変わるはずです。そのためにJavaScript関数を使用できます。必ず同じサイズの画像を両方使用してください。そのため、ユーザーはそれらが2つの異なる画像であることを感じることができません。参考までに、使用した画像を添付します。
これが私のコードです。私があなたのために見つけたいくつか。それを見てください。私のスタイルシートでそれらの画像を与え、私のJavaScriptでそれらをレンダリングしています。チェックされた画像をクリックすると、「選択された」クラスが削除されます。そのため、チェックを外した画像がユーザーに表示されます。
function ClearSelection() {
$(".filterlist ul li").each(function () {
$(this).removeClass("selected");
});
}
.filterlist ul li
{
padding:5px;
border-bottom:1px solid gray;
cursor:pointer;
background-image: url("../images/untick.png");
background-repeat:no-repeat;
background-position: 10 8;
}
.filterlist ul li.selected{background-image: url("../images/tick.png");}