CSS:利用Checked原理實現Toggle Switch

Amber Yang 2021/12/28 11:02:18
11456

透過HTML的Checkbox,可讓使用者任意的選擇,要與不要,因此Checkbox是一個相當好用且實用的HTML元件之一,但這個Checkbox,在手機中,可以滑動式的開關鈕來作呈現,不但直觀且更好操作。
 
Checkbox 有三種狀態:未選(unselected)、已選(selected)及indeterminate。前兩個狀態比較好理解,而HTML是無法將checkbox的狀態設為indeterminate。因HTML中沒有indeterminate這個屬性,只能通過Javascript腳本來設置它今天要透過checkbox的兩個狀態來製作Toggle Switch,

使用checkbox label來做switch開關,如下圖:


先設置一個checkbox,且id="switch"與for="switch",這二個名稱要一致。
HTML設置如下:

<input type="checkbox" id="switch" />
<label for="switch">
    <span class="switch-txt" turnOn="On" turnOff="Off"></span>
</label>

HTML設置完後僅會顯示checkbox預設的方形框。

接著利用css將checkbox預設原有的方形框隱藏,並將label樣式修改成開關樣式。

input[type=checkbox]{
	height: 0;
	width: 0;
	visibility: hidden;
}

label {
	cursor: pointer;
	width: 200px;
	height: 100px;
	background: grey;
	display: block;
	border-radius: 100px;
	position: relative;
}

label:after {
	content: '';
	position: absolute;
	top: 5px;
	left: 5px;
	width: 90px;
	height: 90px;
	background: #fff;
	border-radius: 90px;
	transition: 0.3s;
}

<span class="switch-txt" turnOn="On" turnOff="Off"></span>
turnOn="開" turnOff="關",設定按鈕開關閉的文
字。

.switch-txt::before,
.switch-txt::after {
  display: block;
  color: #fff;
  font-weight: bold;
  box-sizing: border-box;
}
.switch-txt::before {
  content: attr(turnOn);
  color: #fff;
}
.switch-txt::after {
  content: attr(turnOff);
  color: #ccc;
}

CSS設置結果如下圖:

使用checkbox的Checked狀態來設定ON/OFF切換變色:

input:checked + label {
	background: #6f42c1;;
}

label:active:after {
	width: 130px;
}

 

最後再設定一點transition動畫,讓開關時更加活潑且流暢:

input:checked + label:after {
	left: calc(100% - 5px);
	transform: translateX(-100%);
}

 

完成結果呈現如下:


若要將預設,設為開啟時,只需在input的後方加入checked,這樣預設就會變成是開啟的狀態了。

<input type="checkbox" id="switch" checked>

 

圖片來源:自己截圖

文章參考:
1.CSS: Checked原理應用--Toggle Switch開關
2.透過 CSS3 就可將手機中的開關鈕效果,移植到網頁中

Amber Yang