iOS開關按鈕,純CSS給你安排上了

2021-03-02 IQ前端
前言

今早搭完電梯出來信號不太好,切換飛行模式重啟信號,發現iOS的「開關按鈕」挺好玩的,順便用純CSS實現一番。

思路

外觀

按鈕,顧名思義就是可點擊觸發某些事件的組件。在HTML眾多標籤中可用<div>、<a>、<button>和<input>作為載體。

在四個常用標籤中只有<a>和<input>存在滑鼠觸發事件的狀態,因此只能從它倆中選擇。

「a」::link、:visited、:hover、:active

<a>的HTML語義是「anchor」,代表超連結,提供的全部選擇器用於捕獲超連結的觸發狀態。

<input>的HTML語義是「input」,類型設置為radio或checkbox時代表選擇表單,提供的選擇器:checked用於捕獲選擇表單是否被選中。

很明顯,按鈕存在未點擊和已點擊兩種狀態,故選擇<input>作為載體。

<input>的類型設置為radio或checkbox是存在差別的。radio表示單選,若是單個存在,點擊選中後就無法再次點擊取消選中。checkbox表示多選,若是單個存在,點擊選中後還可再次點擊取消選中。故選擇類型為checkbox較為合適。

<input class="ios-switch" type="checkbox">

從上述兩張截圖可抽象出iOS開關按鈕具有以下屬性的類,這個類可繼承到內部細節中。

.btn {
    border-radius: 31px;
    width: 102px;
    height: 62px;
    background-color: #e9e9eb;
}

iOS開關按鈕是一個具有美感的組件,故把<input>醜陋的默認外觀抹除,細節地方就按照截圖自行設計。按鈕內的圓點在滑鼠懸浮時需出現手型光標,點擊後移動定位且移動效果最好有過渡動畫才不顯得生硬。

.ios-switch {
    position: relative;
    appearance: none;
    cursor: pointer;
    transition: all 100ms;
    @extend .btn;
}

背景

筆者是一位天秤座男生,對細節特別摳,細心和負責是筆者在工作上得到肯定的標籤。細心的同學可能會發現iOS開關按鈕在打開過程中,其背景存在著細微的變化。

「細微變化」:灰色的背景區域快速縮小並顯示綠色的背景區域

過渡動畫的貝塞爾曲線可用https://cubic-bezier.com微調到你想要的效果。

為了不引入太多HTML標籤,iOS開關按鈕的背景使用偽元素::before代替。

.ios-switch {
    &::before {
        position: absolute;
        content: "";
        transition: all 300ms cubic-bezier(.45, 1, .4, 1);
        @extend .btn;
    }
}

圓點

圓點不用多說,就是一個圓圓的點。為了讓過渡動畫更生動,給它加了一個剎車回彈的細微動畫,物理術語叫做「慣性回彈」

試想像一塊大大的果凍,在運行過程中突然急剎,前面那部分果凍因為慣性會向前擠,由於內部的柔韌性和分子牽引又將其拉回來。

這個慣性回彈動畫可用貝塞爾曲線實現。一行代碼實現慣性回彈厲害不,當然你也可用在其他動畫場景上。

.elem {
    transition: all 300ms cubic-bezier(.4, .4, .25, 1.35);
}

圓點的實現幾乎沒難度,只需加一個動畫讓其過渡起來更生動。貝塞爾曲線動畫可參考其他專業文章學習,在此就不再敘述了。另外,稍加一個小陰影潤色下,讓其看起來更立體。

為了不引入太多HTML標籤,iOS開關按鈕的圓點使用偽元素::after代替。

.ios-switch {
    &::after {
        position: absolute;
        left: 4px;
        top: 4px;
        border-radius: 27px;
        width: 54px;
        height: 54px;
        background-color: #fff;
        box-shadow: 1px 1px 5px rgba(#000, .3);
        content: "";
        transition: all 300ms cubic-bezier(.4, .4, .25, 1.35);
    }
}

過渡

這個思路是重中之重,按鈕點擊進入選中狀態會觸發:checked,在:checked下對::before和::after做文章即可。結合上述涉及到點擊後的細節,完善其餘屬性即可。

.ios-switch {
    &:checked {
        background-color: #5eb662;
        &::before {
            transform: scale(0);
        }
        &::after {
            transform: translateX(40px);
        }
    }
}

效果

最終完成效果如下。非常貼切今天的主題:「iOS開關按鈕,純CSS給你安排上了」

整體源碼如下。

<input class="ios-switch" type="checkbox">

.btn {
    border-radius: 31px;
    width: 102px;
    height: 62px;
    background-color: #e9e9eb;
}
.ios-switch {
    position: relative;
    appearance: none;
    cursor: pointer;
    transition: all 100ms;
    @extend .btn;
    &::before {
        position: absolute;
        content: "";
        transition: all 300ms cubic-bezier(.45, 1, .4, 1);
        @extend .btn;
    }
    &::after {
        position: absolute;
        left: 4px;
        top: 4px;
        border-radius: 27px;
        width: 54px;
        height: 54px;
        background-color: #fff;
        box-shadow: 1px 1px 5px rgba(#000, .3);
        content: "";
        transition: all 300ms cubic-bezier(.4, .4, .25, 1.35);
    }
    &:checked {
        background-color: #5eb662;
        &::before {
            transform: scale(0);
        }
        &::after {
            transform: translateX(40px);
        }
    }
}

點擊「閱讀原文」可查看在線演示和在線源碼喔!關注「IQ前端」,更多CSS神操作騷技巧等著你學習。

相關焦點

  • 純CSS實現常見的UI效果
    很簡單,如果你CSS玩的夠溜,你就無需再進行那枯燥無比的切圖工作,那些界面、元素都是通過你雙手親自締造而成的,儘管創作它們可能會花一些功夫,但帶來的回報也是巨大的,你不僅能夠自由掌控你所創造出來的元素,而且能大幅提高自己的CSS功力。
  • ios11屏幕鏡像是什麼,教你怎麼用
    此處我們會發現一個很明顯的按鈕。屏幕鏡像,它佔用了兩格的位置,點擊會自動搜索wifi內的支持電視等設備。  看似很專業的功能  很多人對他也是技術型懵逼。那麼屏幕鏡像到底是什麼。  屏幕鏡像就是之前的Airplay鏡像。就是把手機屏幕同屏到電視等大屏。
  • 前端進階:css必知的幾個底層知識和技巧
    在介紹完問題學習法之後,進入我們今天的主題,接下來我會介紹css的一些底層的知識的現象,藉此來讓大家對css有更深入的理解。2.對於img元素,如果有css尺寸,則最終尺寸由css尺寸決定(css尺寸 > html尺寸 > 固有尺寸)3.當圖片的src屬性預設時,圖片不會有任何請求,是最高效的實現方式,如下展示的是使用此方式的圖片佔位代碼(對於firefox瀏覽器,src預設的img是一個普通的內聯元素,寬高設置無效):
  • HTML+CSS:雪碧圖和滑動門製作
    它允許你將一個頁面涉及到的所有零星圖片都包含到一張大圖中去,這樣一來,當訪問該頁面時,由從前的多次請求變為一次請求。客戶端每顯示一圖片都會向伺服器發送請求,所以圖片越多請求越多,造成延遲的可能性越大。所以頁面有許多icon時,推薦使用CSS Sprite。1.2優點(1)減少圖片的字節。
  • 使用CSS技術實現Netflix Logo動畫效果
    在觀看了幾集電視劇之後,我想到可以用 CSS 來實現 Netflix 的 logo 動畫,於是我看了幾部作品之後,就用 CodePen 來重現這個 logo。第一個概念因為我想要嘗試某些技術方案導致我的第一種實現方式有些累贅。
  • 磁感應開關是什麼 磁感應開關原理
    電磁感應開關是一種無觸點開關 ,也可用於提升機、電梯等控制系統 ,以保證運行安全、停位準確 .它實際上是一個單穩態觸發器,無感應脈衝信號時電路處於穩態。  電磁感應開關:其基本構成為一其上浮貼有上、下導電膜的基板、多個電磁感應按鍵開關及電路控制單元等,使基板配合特殊電磁感應按鍵開關的結構及電路控制單元,其由模擬多路、信號放大裝置、信號觸發裝置、信號鎖定/清除裝置、中央處理單元、工作中斷點控制裝置等組成,以取得按鍵字符位置,並利用載入中央處理單元的程序,使其實現快速、無漏字、無錯字、具有線性化及無聲響的功能。
  • HTML DIV+CSS 命名規範大全
    頂部廣告條)電子貿易相關.products產品.products_prices產品價格.products_description產品描述.products_review產品評論.editor_review編輯評論.news_release最新產品.publisher生產商.screenshot縮略圖.faqs常見問題.keyword關鍵詞.blog博客.forum論壇CSS文件命名說明master.css
  • 人類跌落夢境ios怎麼退款-ios退款步驟圖
    人類跌落夢境ios怎麼退款?遊戲首發價是12元,玩家可在5天內申請退款,下面爪遊控為大家帶來人類跌落夢境ios退款步驟圖。人類跌落夢境ios退款步驟圖  方法一  前往 reportaproblem.apple.com,使用Apple ID登錄  步驟2:如果您在想要申請退款的項目旁邊看到「報告」或「報告問題」按鈕
  • 【攝影器材】全面介紹單眼相機上按鈕的含義(手冊)
    14.AF-ON自動對焦啟動鍵,此功能鍵是啟動自動對焦功能,按一次AF—ON按鈕,與半按下快門按鈕等同效果。15.曝光鎖定鍵:當按住曝光鎖定鍵時,可以讓你鎖定已經測好的曝光值,即使光線變化,曝光值也不會改變。此功能同時還可以鎖定閃光燈的曝光值。
  • 用CSS畫一個三角形
    你可以貼一張png,但是這種辦法有點low,或者是用svg的形式,但是太麻煩。三角形其實可以用CSS畫出來。如上圖提到,可以分為兩種三角形,一種是純色的三角形,第二種是有邊框色的三角形,先介紹最簡單的純色三角形。1、三角形的畫法三角形可以用border畫出來,首先一個有四個border的div應該是這樣的:
  • 來,一起幫忙制定CSS規範吧
    shape-outsideshape-outside用於定義元素周圍的文本如何對其進行繞排,比如shape-outside: circle();會導致文本圍繞圓形對其繞排,而shape-outside: url(img/example.png);則會導致文本基於圖片的透明區域輪廓繞排,比如:(圖片來源:https://drafts.csswg.org/css-shapes
  • ios蘋果變態手遊盒子官網 ios變態手遊盒子哪家好
    18183首頁 ios蘋果變態手遊盒子官網 ios變態手遊盒子哪家好 點擊領取
  • iOS14怎麼降級 ios14降級到ios13詳細教程
    iOS14怎麼降級 ios14降級到ios13詳細教程 最近蘋果更新了ios14,但是有的朋友不滿意這個新的系統
  • 強大的CSS原生樣式支持,不費吹灰之力就搞定註冊頁面
    小王這才將事情的來龍去脈跟老張詳說了,然後略帶委屈地問道:「你懂這個嗎?我該咋辦呢?」。老張說:「這個挺簡單的啊,我給你推薦一個神器——億信ABI,這個工具可以完美解決你的困境!」。「那具體怎麼使用呢?」小王此時還是一臉疑惑,「我領導可是要求高大上的界面,這能行嗎?」
  • 《三國志幻想大陸》ios禮包碼是多少 2020最新ios禮包碼匯總分享
    導 讀 三國志幻想大陸禮包碼ios大全,在哪裡兌換?
  • 安排上了!無損音樂、高清電影免費下載,ios和安卓均可使用!
    點擊上方↖藍字關注後◆ 前言 ◆哈嘍,大家好,我是你們可可愛愛,沒有腦袋的小北同學~自從上次的「五音助手」發布後,很多媒粉在後臺問小北有沒有ios今天就給大家安排一個無需安裝,打開網頁即可免費下載全網無損音樂的神器網站!◆ 正文 ◆01.  操作簡單,打開網頁即可下載為了兼容不同的手機,網站沒有推出單獨的APP,只需打開網頁即可使用。
  • 【前端-CSS動畫】製作聖誕節彩燈
    "> <link rel="stylesheet" href="https://fonts.googleapis.com/css?CSS3 @keyframes 規則要創建CSS3動畫,你將不得不了解@keyframes規則。@keyframes規則是用來創建動畫。 @keyframes規則內指定一個 CSS樣式和動畫將逐步從目前的樣式更改為新的樣式。
  • 飛利浦推出新的牆壁開關模塊調光開關和戶外燈條
    飛利浦Hue宣布推出一款全新的無線調光開關模塊,讓Hue用戶可以通過標準的牆壁開關直接控制智能照明。全新的飛利浦Hue牆壁開關模塊是任何飛利浦Hue設置的理想補充。  它安裝在現有的燈開關後面,可以讓用戶將現有的開關變成智能開關,並確保他們的智能照明始終可行,無論是通過應用程式還是通過語音控制,用戶不再需要從沙發上站起來打開家庭成員或家裡客人可能已經關閉的開關。  該公司還公布了其無線調光開關的新版本,採用了更加曲線的設計。
  • 49期:利用clip-path製作css動畫
    引最近工作項目中有製作動畫效果的需求,查閱了一些網站之後,在一個名叫species-in-pieces的網站(species-in-pieces.com)看到了以下神奇的動畫效果:用Chrome的開發者工具窺探一番之後,發現這個酷炫的動畫效果基本是純css實現的!其實現核心就是css3中加入的 clip-path 屬性。
  • 米家智能開關帶你體驗真正的智能
    米家智能開關帶你體驗真正的智能 新浪 發表於 2021-01-11 14:07:52   近些年,智能家居類產品中無線開關產品有Aqara綠米的,有小米自己的,有yeelight易來的。