CSS實(shí)現(xiàn)開關(guān)的方法有很多,我們最常用的是利用input標(biāo)簽和:after偽元素來(lái)實(shí)現(xiàn)。以下是實(shí)現(xiàn)開關(guān)的具體步驟:
/* 定義一個(gè)開關(guān)wrap,用來(lái)容納開關(guān)元素 */ .switch-wrap { position: relative; display: inline-block; width: 48px; height: 24px; overflow: hidden; } /* 定義一個(gè)開關(guān),利用opacity來(lái)隱藏input元素 */ .switch-wrap input[type='checkbox'] { opacity: 0; position: absolute; top: 0; left: 0; width: 0; height: 0; z-index: -1; } /* 定義一個(gè)開關(guān)的背景,包括關(guān)閉和打開狀態(tài) */ .switch-wrap:after { content: ''; display: block; position: absolute; top: 4px; left: 4px; width: 16px; height: 16px; background-color: #cccccc; transition: all .3s ease-in-out; border-radius: 50%; } /* 定義開關(guān)為打開狀態(tài)時(shí)的樣式 */ .switch-wrap input[type='checkbox']:checked + .switch-wrap:after { left: 28px; background-color: #1bd761; }
以上代碼中,我們首先定義了一個(gè)switch-wrap容器來(lái)包裹開關(guān)元素。將容器設(shè)為relative,是為了下面絕對(duì)定位元素的參考對(duì)象。接著,我們定義了一個(gè)input元素,并將其設(shè)為透明的,寬高設(shè)為0,位置設(shè)為absolute,并將z-index設(shè)置為-1。這樣即使我們點(diǎn)擊開關(guān)的位置,實(shí)際上是點(diǎn)擊了input元素而不是背景,從而實(shí)現(xiàn)了開關(guān)的切換。
接下來(lái),我們利用:after偽元素來(lái)定義開關(guān)的背景。此處我們采用了圓形圓角和過(guò)渡的效果,讓開關(guān)在切換時(shí)表現(xiàn)更加自然。當(dāng)用戶選中input元素時(shí),我們利用:checked偽類來(lái)為開關(guān)背景增加一個(gè)打開的狀態(tài),將left值設(shè)為28px,并將背景顏色改為綠色。
最后,我們可以將input元素和開關(guān)背景的位置放置在合適的位置,用JavaScript來(lái)控制input元素的選中狀態(tài),從而實(shí)現(xiàn)了一個(gè)完整的開關(guān)組件。