2024年3月7日現在、<input type="checkbox" switch>
をサポートしているのは Safari 17.4 のみです。
Traditional
switch
属性に対応していない環境向けの実装例
ソースコード
HTML
<label>
<span class="traditional">
<input type="checkbox" checked>
</span>
Toggle switch
</label>
CSS
.traditional {
position: relative;
display: inline-flex;
height: 2rem;
width: 3.5rem;
align-items: center;
border-radius: 9999px;
}
.traditional:focus-within {
outline-style: solid;
outline-width: 2px;
outline-offset: 2px;
outline-color: #2563eb;
}
.traditional input[type="checkbox"] {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border-width: 0;
}
.traditional:has(input[type="checkbox"]) {
--bg-opacity: 1;
background-color: rgb(152 152 157 / var(--bg-opacity));
}
.traditional:has(input[type="checkbox"]:checked) {
--bg-opacity: 1;
background-color: rgb(52 199 89 / var(--bg-opacity));
}
.traditional::before {
content: "";
position: absolute;
left: .25rem;
height: 1.75rem;
width: 1.75rem;
border-radius: 9999px;
--bg-opacity: 1;
background-color: rgb(255 255 255 / var(--bg-opacity));
--shadow: 0 4px 6px -1px #0000001a, 0 2px 4px -2px #0000001a;
box-shadow: var(--shadow);
transition-property: transform;
transition-timing-function: cubic-bezier(.4,0,.2,1);
transition-duration: .3s;
}
.traditional:has(input[type="checkbox"]:checked)::before {
--translate-x: 1.25rem;
transform: translate(var(--translate-x), 0);
}
Basic
switch
属性を使用した最も基本的な実装例
ソースコード
HTML
<label>
<input type="checkbox" switch checked>
Toggle switch
</label>
with CSS accent-color
CSS accent-color
を指定した実装例
ソースコード
HTML
<label>
<input type="checkbox" switch checked>
Toggle switch
</label>
CSS
input[type="checkbox"][switch] {
accent-color: #dc2626;
}