教你用CSS3/JS繪制自己想要的按鈕

繪制按鈕其實(shí)很簡(jiǎn)單,只不過對(duì)于還沒自己動(dòng)手繪制的“新人”來說,會(huì)有一點(diǎn)不知所措的感覺(其實(shí)我前天就是如此);
為了方便大家的學(xué)習(xí),我決定寫篇基礎(chǔ)教程來為web界做一點(diǎn)小小的共貢獻(xiàn)

我認(rèn)為按鈕的繪制分以下三個(gè)步驟

  • 第一步,繪制按鈕的輪廓
  • 選擇合適的html標(biāo)簽,設(shè)置輪廓的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
  • 第二步,繪制按鈕的默認(rèn)狀態(tài)
  • 這一步很重要,由于我們不會(huì)再給html文件添加其他的標(biāo)簽,所以我們需要用 :after 偽類對(duì)按鈕進(jìn)行CSS渲染
/* 接在上面繼續(xù)寫 */
.button:after{
        display: block;
        position: absolute; //相對(duì)按鈕的輪廓進(jìn)行決定定位
        top:2px;
        bottom: 2px;        //即設(shè)置top,又設(shè)置bottom使元素自動(dòng)拉伸到最大
        left:2px;          //實(shí)際上,按鈕的寬度即為容器的高度-(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;      //按鈕的動(dòng)畫時(shí)長(zhǎng)
}

實(shí)際上,做到這一步之后會(huì)發(fā)現(xiàn),在瀏覽器上的效果沒有一點(diǎn)變化,還是之前的那樣子,不過不用著急,我們?cè)偌右稽c(diǎn)東西就很明顯了

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

默認(rèn)為off狀態(tài)

仿IOS-2.jpg

- 再接著繪制要切換的狀態(tài)

.on:after {
          content: 'ON';
          border-radius:30px;
          transform: translate(56px, 0);   
          color:transparent;
          background-color:#4BD429;
        }
仿IOS-3.jpg
  • 最后一步,寫JS代碼進(jìn)行切換

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

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

到此,一個(gè)完整的開關(guān)按鈕就繪制完成了
感謝你能花3~5分鐘的時(shí)間閱覽我不專業(yè)的教程

PS:昨天要繪制一個(gè)按鈕控制燈泡的開關(guān)(實(shí)際上就是切換背景圖片),然后我四周一看,看到了墻壁上的一個(gè)公牛開關(guān),既然是控制電燈的,我就想玩一玩仿真開關(guān),忍著中午的睡意,還真勉強(qiáng)的給繪制出來了
  繪制過程并不復(fù)雜,我也就不細(xì)說了,貼下效果圖和代碼,感興趣的可以自行看一下
仿真開關(guān).jpg

仿真-2.jpg
PS:我引用了一個(gè)初始化的CSS文件,可能需要
box-sizing:border-box;

<style type="text/css">
    /*開關(guān)的輪廓*/
    .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;
    }
    /*開關(guān)內(nèi)部的小按鈕*/
    .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;
    }
    /*默認(rèn)狀態(tài)的小按鈕*/
    .on:after {
      content: '';
      border-radius: 5px;
      /* CSS3的顏色漸變凸顯按鈕的凸出感 */
      background: linear-gradient(#fff, #f2f2f2 80%,#fff);
      /* CSS3的影音的綜合應(yīng)用,繪制按鈕的邊緣,給予立體感 */
      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;
    }
    /*關(guān)閉后的小按鈕*/
    .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>

END

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容