CSS自定義控件之checkbox控件

checkbox自定義控件概述

這個控件屬于html自帶的控件厨相,本身有樣式领曼。在制作這樣的控件時,需要CSSjavascript兩方面共同努力领铐,才能實現(xiàn)全新的控件樣式:CSS覆蓋原有的樣式悯森、實現(xiàn)新的樣式;JS實現(xiàn)點擊等動作的動態(tài)顯示绪撵。我們先看HTML結構瓢姻,再一步步看CSS代碼。

radio控件和checkbox控件的定義方式也是一樣的流程音诈。下面是checkbox的最終兩種效果圖:

HTML代碼

<div class="input_custom">
    <div class="custom-checkbox">
        <input name="signup" type="checkbox" checked  id="checkbox1" >
        <label for="checkbox1" class="checked">Checked</label>
    </div>

    <div class="custom-checkbox">
        <input name="signup" type="checkbox"   id="checkbox2"  >
        <label for="checkbox2" >Unchecked</label>
    </div>

     <div class="checkbox-large">
        <div class="custom-checkbox">
            <input name="signup" type="checkbox"   id="checkbox3"  >
            <label for="checkbox3" ></label>
        </div>
    </div>

    <div class="checkbox-large">
        <div class="custom-checkbox">
            <input name="signup" type="checkbox"  checked id="checkbox4"  >
            <label for="checkbox4" ></label>
        </div>
    </div>

</div>

inputidlabelfor值需要設置幻碱,并且需要一致绎狭,主要用于后面的javascript,在下文談到javascript的時候再說褥傍。

CSS代碼

  1. 設置custom-checkbox相對布局儡嘶,并且對瀏覽器自帶的checkbox樣式進行處理。

     .custom-checkbox { position:relative;}
     .custom-checkbox input,.custom-radio input {  display: none;}
    
  2. 全新的custom-checkbox主要是使用label來顯示文字恍风,并通過右移label蹦狂,把新的check-box樣式顯示出來,這里主要把新的custom-chekbox用于label背景朋贬,我們看看是怎么做的凯楔,具體看代碼的注釋。

     .custom-checkbox label {
         display:block;          //設置為塊級元素锦募,否則顯示會有問題
    
         height:27px; 
         line-height:27px; //通過行高和高度的設置摆屯,保證文字垂直居中
         
         padding-left:36px;  //將label的文字右移,為新的custom-chekbox樣式預留空間
    
         margin-bottom:8px; 
    
         cursor:pointer;  //修改鼠標顯示樣式
         color:#6f6f6f;
     }
    
  3. 放置新的custom-checkbox樣式糠亩,并依據(jù)是否選中虐骑,設置不同的background-position,以顯示不同狀態(tài)下的custom-checkbox赎线。

     .custom-checkbox label { 
         background:url(images/styled_checkbox.png) no-repeat; 
         background-position:-7px -10px; //custom-checkbox未選中狀態(tài)
     }
    
     .custom-checkbox label.checked { 
         background-position:-7px -110px; //custom-checkbox選中狀態(tài)
         color:#5c5c5c;
     }
    
  4. 另一種樣式的custom-checkbox廷没。

     .checkbox-large .custom-checkbox label { 
         background:url(images/styled_checkbox_large.png) no-repeat; height: 37px; line-height: 33px; padding-left:95px;
         background-position:0 0;                //custom-checkbox未選中狀態(tài)
     }
    
     .checkbox-large .custom-checkbox label.checked { 
         background-position:0 -100px;   //custom-checkbox選中狀態(tài)
     }   
    

javascript代碼

javascript代碼主要響應用戶的點擊。這里面使用了jquery(或者更小的氛驮,通常移動端使用的腕柜,jquery替代版本——zepto.js)。這里使用jquery矫废,主要是因為方便。當然砰蠢,你也可以直接通過DOM操作來實現(xiàn)這里的功能蓖扑,不過要稍微麻煩一些。

這里的javascript的思路就是依據(jù)input的checked狀態(tài)台舱,動態(tài)地為label添加checked類或者移除checked類律杠。我們來看一下代碼:

$('div[class=input_custom] input').each(function(){ //選擇合適的input元素

    if($(this).is('[type=checkbox],[type=radio]')){ //此處的代碼也適合自定義radio按鈕
        var input = $(this); 
        var label = $('label[for='+input.attr('id')+']'); //還記得上面的html代碼嗎?此處就用到了input的id和label的for
        
        input.bind('updateState', function(){   
            input.is(':checked') ? label.addClass('checked') : label.removeClass('checked'); }) 
            .trigger('updateState')
            .click(function(){ $('input[name='+ $(this).attr('name') +']').trigger('updateState'); });//綁定點擊事件
    }
});
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末竞惋,一起剝皮案震驚了整個濱河市柜去,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌拆宛,老刑警劉巖嗓奢,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異浑厚,居然都是意外死亡股耽,警方通過查閱死者的電腦和手機根盒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來物蝙,“玉大人炎滞,你說我怎么就攤上這事∥芷颍” “怎么了册赛?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長震嫉。 經常有香客問我击奶,道長,這世上最難降的妖魔是什么责掏? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任柜砾,我火速辦了婚禮,結果婚禮上换衬,老公的妹妹穿的比我還像新娘痰驱。我一直安慰自己,他們只是感情好瞳浦,可當我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布担映。 她就那樣靜靜地躺著,像睡著了一般叫潦。 火紅的嫁衣襯著肌膚如雪蝇完。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天矗蕊,我揣著相機與錄音短蜕,去河邊找鬼。 笑死傻咖,一個胖子當著我的面吹牛朋魔,可吹牛的內容都是我干的。 我是一名探鬼主播卿操,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼警检,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了害淤?” 一聲冷哼從身側響起扇雕,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎窥摄,沒想到半個月后镶奉,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年腮鞍,在試婚紗的時候發(fā)現(xiàn)自己被綠了值骇。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡移国,死狀恐怖吱瘩,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情迹缀,我是刑警寧澤使碾,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站祝懂,受9級特大地震影響票摇,放射性物質發(fā)生泄漏。R本人自食惡果不足惜砚蓬,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一矢门、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧灰蛙,春花似錦祟剔、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至仅父,卻和暖如春叛薯,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背笙纤。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工耗溜, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人粪糙。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓强霎,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蓉冈。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,033評論 2 355

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,164評論 25 707
  • 前端工程師和設計師一直都是相愛相殺的兩個人轩触。 在拿到UI稿時設計師告訴我要做到99%還原寞酿。。脱柱。滿臉黑線( ̄工 ̄ll...
    Candy_M閱讀 3,567評論 0 3
  • 轉載請聲明 原文鏈接地址 關注公眾號獲取更多資訊 第一部分 HTML 第一章 職業(yè)規(guī)劃和前景 職業(yè)方向規(guī)劃定位...
    程序員poetry閱讀 16,555評論 32 459
  • 一寸一寸 邁向蹉跎伐弹。
    寂寂牽牛閱讀 162評論 0 0
  • 春天到了 小朋友們 穿上了美麗的花襖 來到花園里 開心地到處跑 春風像把小梳子 梳綠了柳樹 梳青了禾苗 春雨像把小...
    柴子恒閱讀 243評論 0 1