HTML・CSSでつくるおしゃれなラジオボタンのデザイン3選

何か一つの項目のみを選択させたい時にフォームでは必須となる、ラジオボタンのスニペットをまとめました。四角・ボタン風・横並びなど様々なデザインに対応しており、色・大きさ・間隔なども自在にカスタマイズすることが可能です。

ボタン型のラジオボタン

ボタン型のラジオボタンのスタンダードバージョン

スタンダード

step1
デザインを調整する
  • 形状
  • チェック時のアニメーション
step2
HTMLをコピペする
HTML
<fieldset class="radio-001">
    <label>
        <input type="radio" name="radio-001" checked/>
        radio1
    </label>
    <label>
        <input type="radio" name="radio-001"/>
        radio2
    </label>
    <label>
        <input type="radio" name="radio-001"/>
        radio3
    </label>
</fieldset>
step3
CSSをコピペする
CSS
.radio-001 {
    display: flex;
    flex-wrap: wrap;
    gap: .3em 2em;
    border: none;
}

.radio-001 label {
    display: flex;
    align-items: center;
    gap: 0 .5em;
    position: relative;
    cursor: pointer;
}

.radio-001 label::before,
.radio-001 label:has(:checked)::after {
    border-radius: 50%;
    content: '';
}

.radio-001 label::before {
    width: 18px;
    height: 18px;
    background-color: #e6edf3;
}

.radio-001 label:has(:checked)::after {
    position: absolute;
    top: 50%;
    left: 9px;
    transform: translate(-50%, -50%);
    width: 10px;
    height: 10px;
    background-color: #2589d0;
    animation: anim-radio-001 .3s linear;
}

@keyframes anim-radio-001 {
    0% {
        box-shadow: 0 0 0 1px transparent;
    }
    50% {
        box-shadow: 0 0 0 10px #2589d033;
    }
    100% {
        box-shadow: 0 0 0 10px transparent;
    }
}

.radio-001 input {
    display: none;
}
ボタン型のラジオボタンのスタンダード(枠線あり)バージョン

スタンダード(枠線あり)

step1
デザインを調整する
  • 形状
  • チェック時のアニメーション
step2
HTMLをコピペする
HTML
<fieldset class="radio-002">
    <label>
        <input type="radio" name="radio-002" checked/>
        radio1
    </label>
    <label>
        <input type="radio" name="radio-002"/>
        radio2
    </label>
    <label>
        <input type="radio" name="radio-002"/>
        radio3
    </label>
</fieldset>
step3
CSSをコピペする
CSS
.radio-002 {
    display: flex;
    flex-wrap: wrap;
    gap: .3em 2em;
    border: none;
}

.radio-002 label {
    display: flex;
    align-items: center;
    gap: 0 .5em;
    position: relative;
    cursor: pointer;
}

.radio-002 label::before,
.radio-002 label::after {
    border-radius: 50%;
    content: '';
}

.radio-002 label::before {
    width: 18px;
    height: 18px;
    border: 2px solid #dee5eb;
    box-sizing: border-box;
}

.radio-002 label::after {
    position: absolute;
    top: 50%;
    left: 9px;
    transform: translate(-50%, -50%);
    width: 9px;
    height: 9px;
    background-color: #dee5eb;
}

.radio-002 label:has(:checked)::after {
    background-color: #2589d0;
    animation: anim-radio-002 .3s linear;
}

@keyframes anim-radio-002 {
    0% {
        box-shadow: 0 0 0 1px transparent;
    }
    50% {
        box-shadow: 0 0 0 10px #2589d033;
    }
    100% {
        box-shadow: 0 0 0 10px transparent;
    }
}

.radio-002 input {
    display: none;
}

リスト型のラジオボタン

リスト型のラジオボタンの枠線×背景色ありバージョン

枠線×背景色あり

step1
デザインを調整する
  • 形状
step2
HTMLをコピペする
HTML
<fieldset class="radio-003">
    <label>
        <input type="radio" name="radio-003" checked/>
        radio1
    </label>
    <label>
        <input type="radio" name="radio-003"/>
        radio2
    </label>
    <label>
        <input type="radio" name="radio-003"/>
        radio3
    </label>
</fieldset>
step3
CSSをコピペする
CSS
.radio-003 {
    border: none;
}

.radio-003 label {
    display: flex;
    align-items: center;
    gap: 0 .5em;
    position: relative;
    max-width: 200px;
    margin-bottom: .4em;
    padding: .5em .7em;
    border: 1px solid #2589d0;
    border-radius: 3px;
    background-color: #2589d026;
    cursor: pointer;
}

.radio-003 label:has(:checked) {
    background-color: #2589d0;
    color: #fff;
}

.radio-003 label::before,
.radio-003 label:has(:checked)::after {
    border-radius: 50%;
    content: '';
}

.radio-003 label::before {
    width: 14px;
    height: 14px;
    background-color: #fff;
}

.radio-003 label:has(:checked)::after {
    position: absolute;
    top: 50%;
    left: calc(7px + .7em);
    transform: translate(-50%, -50%);
    width: 7px;
    height: 7px;
    background-color: #2589d0;
}

.radio-003 input {
    display: none;
}