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; }