技術(shù)頻道導(dǎo)航
HTML/CSS
.NET技術(shù)
IIS技術(shù)
PHP技術(shù)
Js/JQuery
Photoshop
Fireworks
服務(wù)器技術(shù)
操作系統(tǒng)
網(wǎng)站運(yùn)營

贊助商

分類目錄

贊助商

最新文章

搜索

css實(shí)現(xiàn)漂亮的checkbox多選框和radio單選按鈕

作者:admin    時(shí)間:2017-8-2 20:34:55    瀏覽:

html控件默認(rèn)樣式都不好看,需要css來美化,本文介紹的checkbox多選框和radio單選按鈕也不例外,美化工作需要css+圖片來完成。

漂亮的checkbox多選框和radio單選按鈕

漂亮的checkbox多選框和radio單選按鈕

實(shí)際使用中,除了用css和圖片來美化樣式效果之外,Javascript或JQuery腳本也是少不了的,不然提交表單時(shí)傳值就有問題。

下面幾張是本實(shí)例中要用到的圖片

checkbox多選框和radio單選按鈕的圖片

checkbox多選框和radio單選按鈕的圖片

演示

本實(shí)例分別提供了JQuery版本和JavaScript版本,JQuery版本代碼稍微少點(diǎn),但需要引用JQuery庫文件。

JQuery版本

execcodegetcode

JavaScript版本

execcodegetcode

結(jié)構(gòu)

每一個(gè) radio 按鈕 和 checkbox input 元素應(yīng)該被 <label> 標(biāo)簽包住,參閱示例:

<label class="label_check" for="sample-check">
<input name="sample-check" id="sample-check" value="1" type="checkbox" />
Sample Label
</label>

<label class="label_radio" for="sample-radio">
<input name="sample-radio" id="sample-radio" value="1" type="radio" />
Sample Label
</label>

介紹

我們想要將原始輸入移除遠(yuǎn)離(遠(yuǎn)離左側(cè)),并替換為每個(gè)標(biāo)簽放置背景圖像。 新的圖形單選按鈕和復(fù)選框仍然可以切換,而單擊/空格按下相應(yīng)的標(biāo)簽也會(huì)將其切換為開或關(guān)。 請(qǐng)參閱CSS示例:

.has-js .label_check,
.has-js .label_radio { padding-left: 34px; }
.has-js .label_radio { background: url(radio-off.png) no-repeat; }
.has-js .label_check { background: url(check-off.png) no-repeat; }
.has-js label.c_on { background: url(check-on.png) no-repeat; }
.has-js label.r_on { background: url(radio-on.png) no-repeat; }
.has-js .label_check input,
.has-js .label_radio input { position: absolute; left: -9999px; }

行為

最后,使用 JavaScript 來處理類名的切換, 由于 Safari 中的 label 不可點(diǎn)擊,因此需要一些額外的 Safari 特定行。

var d = document;
var safari = (navigator.userAgent.toLowerCase().indexOf('safari') != -1) ? true : false;
var gebtn = function(parEl,child) { return parEl.getElementsByTagName(child); };
onload = function() {

  var body = gebtn(d,'body')[0];
  body.className = body.className && body.className != '' ? body.className + ' has-js' : 'has-js';

  if (!d.getElementById || !d.createTextNode) return;
  var ls = gebtn(d,'label');
  for (var i = 0; i < ls.length; i++) {
    var l = ls[i];
    if (l.className.indexOf('label_') == -1) continue;
    var inp = gebtn(l,'input')[0];
    if (l.className == 'label_check') {
      l.className = (safari && inp.checked == true || inp.checked) ? 'label_check c_on' : 'label_check c_off';
      l.onclick = check_it;
    };
    if (l.className == 'label_radio') {
      l.className = (safari && inp.checked == true || inp.checked) ? 'label_radio r_on' : 'label_radio r_off';
      l.onclick = turn_radio;
    };
  };
};
var check_it = function() {
  var inp = gebtn(this,'input')[0];
  if (this.className == 'label_check c_off' || (!safari && inp.checked)) {
    this.className = 'label_check c_on';
    if (safari) inp.click();
  } else {
    this.className = 'label_check c_off';
    if (safari) inp.click();
  };
};
var turn_radio = function() {
  var inp = gebtn(this,'input')[0];
  if (this.className == 'label_radio r_off' || inp.checked) {
    var ls = gebtn(this.parentNode,'label');
    for (var i = 0; i < ls.length; i++) {
      var l = ls[i];
      if (l.className.indexOf('label_radio') == -1) continue;
      l.className = 'label_radio r_off';
    };
    this.className = 'label_radio r_on';
    if (safari) inp.click();
  } else {
    this.className = 'label_radio r_off';
    if (safari) inp.click();
  };
};

兼容性

本實(shí)例支持各主流瀏覽器,在IE8+、Chrome、Firefox、360等瀏覽器測(cè)試通過。

標(biāo)簽: css  checkbox  radio  
x
  • 站長推薦
/* 左側(cè)顯示文章內(nèi)容目錄 */