用CSS3/JS繪製自己想要的按鈕

来源:http://www.cnblogs.com/jiaoyu121/archive/2017/06/17/7040825.html
-Advertisement-
Play Games

我認為按鈕的繪製分以下三個步驟 第一步,繪製按鈕的輪廓 選擇合適的html標簽,設置輪廓的CSS 選擇合適的html標簽,設置輪廓的CSS 效果圖 仿IOS-1.jpg 仿IOS-1.jpg 第二步,繪製按鈕的預設狀態 這一步很重要,由於我們不會再給html文件添加其他的標簽,所以我們需要用 :af ...


我認為按鈕的繪製分以下三個步驟

  • 第一步,繪製按鈕的輪廓
    • 選擇合適的html標簽,設置輪廓的CSS
/* html代碼 */
<a href="#" class="button off"></a>
body{
    background-color: #E6C9B6;
}

/* CSS樣式 */
/* 按鈕輪廓 */
.button{
    display: block;
    margin:100px auto;
    position: relative;
    width:100px;
    height:40px;
    border-radius: 50px;
    border:1px solid #fff;
    background-color: #E9E4E0;
}

效果圖


仿IOS-1.jpg
  • 第二步,繪製按鈕的預設狀態
    • 這一步很重要,由於我們不會再給html文件添加其他的標簽,所以我們需要用 :after 偽類對按鈕進行CSS渲染
      /* 接在上面繼續寫 */
      .button:after{
         display: block;
         position: absolute;    //相對按鈕的輪廓進行決定定位
         top:2px;
         bottom: 2px;        //即設置top,又設置bottom使元素自動拉伸到最大
         left:2px;           //實際上,按鈕的寬度即為容器的高度-(top+bottom)
         width:36px;           //按鈕的寬度
         line-height: 36px;    //按鈕文字的高度,如果不需要文字,可移除
         text-align: center;
         text-transform: uppercase;
         font-size: 16px;
         background-color: #fff;      //這裡的背景顏色是按鈕的背景顏色
         border:2px solid;
         transition: all 500ms;        //按鈕的動畫時長
      }

      實際上,做到這一步之後會發現,在瀏覽器上的效果沒有一點變化,還是之前的那樣子,不過不用著急,我們再加一點東西就很明顯了

    • 在輪廓內添加小按鈕
      .off:after {
         content: 'off';
         border-radius:30px;
         color: #999;
      }

      預設為off狀態


仿IOS-2.jpg
- 再接著繪製要切換的狀態
.on:after {
          content: 'ON';
          border-radius:30px;
          transform: translate(56px, 0);   
          color:transparent;
          background-color:#4BD429;
        }

仿IOS-3.jpg
  • 最後一步,寫JS代碼進行切換

    實際上,在CSS的切換之中,toggleClass是最為方便的。
    但是!!!
    這種切換方法不能切換你要觸發的JS事件,
    畢竟,我們畫按鈕是為了完成某些功能,
    所以我採用的是這種方式,但也許並不是最好的

    var zn=0;
    $('.button').click(function(e){
      if(zn==1){
          $(this).removeClass("on").addClass("off");
          //此處可填要觸發的事件
          zn=0;
      }else{
          $(this).removeClass("off").addClass("on");
           //此處可填要觸發的事件
          zn=1;
      }
    });

    到此,一個完整的開關按鈕就繪製完成了
    感謝你能花3~5分鐘的時間閱覽我不專業的教程

PS:昨天要繪製一個按鈕控制燈泡的開關(實際上就是切換背景圖片),然後我四周一看,看到了牆壁上的一個公牛開關,既然是控制電燈的,我就想玩一玩模擬開關,忍著中午的睡意,還真勉強的給繪製出來了
  繪製過程並不複雜,我也就不細說了,貼下效果圖和代碼,感興趣的可以自行看一下

模擬開關.jpg
模擬-2.jpg
PS:我引用了一個初始化的CSS文件,可能需要
box-sizing:border-box;

<style type="text/css">
    /*開關的輪廓*/
    .button{
        display: block;
        position: relative;
        width:160px;
        height:180px;
        border-radius: 5px;
        background-color: #f1f1f1;
    }
    .button2{
        display: block;
        position: relative;
        width:160px;
        height:180px;
        border-radius: 5px;
        background-color: #f1f1f1;
    }
    /*指示燈*/
    .indicate{
        display: block;
        position: absolute;
        margin:60px 0 0 70px;
        width: 20px;
        height: 4px;
        border-radius: 2px;
        background-color: #A8C1C2;
        z-index: 1;
        transition: all 200ms;
    }
    .indicate_yes{
        margin:69px 0 0 70px;
        background-color: #A3D7E7;
    }
    /*開關內部的小按鈕*/
    .button:after{
        display: block;
        position: absolute;
        top:40px;
        bottom: 40px;
        left:20px;
        right:20px;
        line-height: 52px;
        border:1px solid #FFF;
        transition: all 200ms;
    }
    .button2:after{
        display: block;
        position: absolute;
        top:49px;
        bottom: 31px;
        left:20px;
        right:20px;
        line-height: 52px;
        border:1px solid #FFF;
        transition: all 200ms;
    }
    /*預設狀態的小按鈕*/
    .on:after {
      content: '';
      border-radius: 5px;
      /* CSS3的顏色漸變凸顯按鈕的凸出感 */
      background: linear-gradient(#fff, #f2f2f2 80%,#fff);
      /* CSS3的影音的綜合應用,繪製按鈕的邊緣,給予立體感 */
      box-shadow: 0 1px 0 0 #fff,
          0 3px 0.5px 0 #E7E9EA,
          0 5px 0.5px 0 #DEDFDF,
          0 6px 0.5px 0 #CCCCCD,
          0 7px 0.5px 0 #C5C7C7,
          0 8px 2px 0 #818283,
          0 9px 2px 0 #A7A8A8;
    }
    /*關閉後的小按鈕*/
    .off:after {
      content: '';
      border-radius: 5px;
      background: linear-gradient(#fff, #f2f2f2 80%,#fff);
      box-shadow: 0 -1px 0 0 #fff,
          0 -3px 0.5px 0 #E7E9EA,
          0 -5px 0.5px 0 #DEDFDF,
          0 -6px 0.5px 0 #CCCCCD,
          0 -7px 0.5px 0 #C5C7C7,
          0 -8px 2px 0 #818283,
          0 -9px 2px 0 #A7A8A8;
    }
    </style> 

/* JS代碼 */
<script type="text/javascript">
$('.button').click(function(e) {
  var toggle = this;
  e.preventDefault();
  $(toggle).toggleClass('on')
         .toggleClass('off')
         .toggleClass("button2");
  //指示燈亮/滅
  $(this).children(".indicate")
    .toggleClass("indicate_yes");
});

//localStorage.clear();
</script>



學習過程中遇到什麼問題或者想獲取學習資源的話,歡迎加入學習交流群
343599877,我們一起學前端!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.三元操作符 這是一個很好的節省代碼當你想要編寫一個如果. . else語句在一線。 普通寫法: const x = 20;let big;if (x > 10) { 速記: 你還可以嵌套的if語句如下: 2. 短路評價速記 分配一個變數值到另一個變數的時候,你可能想要確保源變數不是null,未定 ...
  • 前端工程化可以自動化處理一些繁複的工作,提高開發效率,減少低級錯誤。 更重要的是,還是文章開頭的說的,前端工程化最大的意義在於給我們新的視角去看待前端開發,讓前端開發可以做更複雜、更有挑戰的事情! ...
  • 移動互聯網的爆發以及響應式頁面的尷尬症,開發web和mobile項目成為了標配,當然實際情況下,會有更多的項目。 多項目開發對於前端來說是個很大的挑戰✦ 重覆,重覆的前端架構,重覆的前端依賴,重覆的工具函數等✦ 局限,不同後臺有不同的規則,“因地制宜”真難受,剛伺候好rails又突然來個php✦ 最 ...
  • 今天又給Jquery插件“IT小鮮肉 Tree”添加了自定義圖標、自定義標簽顯示功能;目前“IT小鮮肉 Tree”已經具備有checkbox、drag and drop 等基本功能。 廢話不說,直接上圖: 自我感覺良好。主要設置了數據的iconUrl屬性,代碼如下: 還可以通過設置iconCls實現 ...
  • $("#wetg_Left_ipt2").bind("input",function() { //獲取游標位置 var Txt1Curs = $scope.getTxt1CursorPosition(this); var oldtexv = this.value; //格式化字元串4位分割,去掉非字 ...
  • 平時在工作中,偶爾會遇到老大讓你修改原來寫好的樣式,如果修改的多的話,修改起來是非常麻煩的.他不像js一樣,定義變數、函數,需要修改某些值,直接修改方法就行了。less的出現,恰恰幫我們解決了這個問題 在這呢,我們簡要說明一下less: LESSCSS是一種動態樣式語言,屬於CSS預處理語言的一種, ...
  • 三種繼承css方式 1.段內繼承 樣式原文 原文變成 紅色, 原文字體變大 兩個都是通過改變樣式屬性的值去實現的. 語法詳解: 1.每個樣式屬性會有不同的值, "color: red" 通過冒號表達color的屬性. 2.屬性間要用分號間隔和閉合 3.font-size 屬於複合屬性 2. 文檔內繼... ...
  • 包管理器、載入器、測試框架、運行器、QA、MVC框架和庫、模板引擎、數據可視化、時間軸、編輯器等等。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...