inputには直接before、afterなどの疑似要素が反映できないらしく、別の要素に表示させます。
:checkedを使うことにより、「チェックされたら」という条件で表示を変更できます。
sample
See the Pen ラジオボタン、チェックボックスをcssでカスタマイズ by takapen (@takapen) on CodePen.
html
css
/* デフォルトのinputタグ非表示 */
input {
display: none;
}
label {
margin: 5px 0;
height: 30px;
cursor: pointer;
position: relative;
}
p {
height: 40px;
padding-left: 30px;
position: relative;
}
/* オリジナル ラジオボタン生成 */
input[type="radio"] + p::before{
content: "";
display: block;
position: absolute;
top:1px;
left: 0;
width: 20px;
height: 20px;
border: 1px solid #ccc;
border-radius: 50%;
}
input[type="radio"]:checked + p::before{
background: #fff;
}
input[type="radio"]:checked + p::after{
content: "";
display: block;
position: absolute;
width: 10px;
height: 10px;
top: 7px;
left: 6px;
background: #777;
border-radius: 50%
}
/* オリジナル チェックボックス生成 */
input[type="checkbox"] + p::before{
content: "";
display: block;
position: absolute;
top:1px;
left: 0;
width: 20px;
height: 20px;
border: 1px solid #ccc;
}
input[type="checkbox"]:checked + p::before{
background: #777;
}
input[type="checkbox"]:checked + p::after{
content: "";
display: block;
position: absolute;
top: 5px;
left: 8px;
width: 5px;
height: 9px;
transform: rotate(40deg);
border-bottom: 2px solid #fff;
border-right: 2px solid #fff;
}