我正在嘗試使用以下內容來設定複選框的樣式:
<input type="checkbox" style="border:2px dotted #00f;display:block;background:#ff0000;" />
但該樣式未套用。此複選框仍顯示其預設樣式。如何給它指定的樣式?
透過使用 :after 和 :before 偽類別附帶的新功能,您可以實現非常酷的自訂複選框效果。這樣做的優點是:您不需要向 DOM 添加任何其他內容,只需添加標準複選框即可。
:after
:before
請注意,這僅適用於相容的瀏覽器。我相信這與某些瀏覽器不允許您在輸入元素上設定 :after 和 :before 有關。不幸的是,這意味著目前僅支援 WebKit 瀏覽器。 Firefox Internet Explorer 仍然允許複選框發揮作用,只是沒有樣式,這有望在未來發生變化(代碼不使用供應商前綴)。
這只是一個 WebKit 瀏覽器解決方案(Chrome、Safari、行動瀏覽器)
查看範例 Fiddle
$(function() { $('input').change(function() { $('div').html(Math.random()); }); });
/* Main Classes */ .myinput[type="checkbox"]:before { position: relative; display: block; width: 11px; height: 11px; border: 1px solid #808080; content: ""; background: #FFF; } .myinput[type="checkbox"]:after { position: relative; display: block; left: 2px; top: -11px; width: 7px; height: 7px; border-width: 1px; border-style: solid; border-color: #B3B3B3 #dcddde #dcddde #B3B3B3; content: ""; background-image: linear-gradient(135deg, #B1B6BE 0%, #FFF 100%); background-repeat: no-repeat; background-position: center; } .myinput[type="checkbox"]:checked:after { background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAAHCAQAAABuW59YAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAB2SURBVHjaAGkAlv8A3QDyAP0A/QD+Dam3W+kCAAD8APYAAgTVZaZCGwwA5wr0AvcA+Dh+7UX/x24AqK3Wg/8nt6w4/5q71wAAVP9g/7rTXf9n/+9N+AAAtpJa/zf/S//DhP8H/wAA4gzWj2P4lsf0JP0A/wADAHB0Ngka6UmKAAAAAElFTkSuQmCC'), linear-gradient(135deg, #B1B6BE 0%, #FFF 100%); } .myinput[type="checkbox"]:disabled:after { -webkit-filter: opacity(0.4); } .myinput[type="checkbox"]:not(:disabled):checked:hover:after { background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAAHCAQAAABuW59YAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAB2SURBVHjaAGkAlv8A3QDyAP0A/QD+Dam3W+kCAAD8APYAAgTVZaZCGwwA5wr0AvcA+Dh+7UX/x24AqK3Wg/8nt6w4/5q71wAAVP9g/7rTXf9n/+9N+AAAtpJa/zf/S//DhP8H/wAA4gzWj2P4lsf0JP0A/wADAHB0Ngka6UmKAAAAAElFTkSuQmCC'), linear-gradient(135deg, #8BB0C2 0%, #FFF 100%); } .myinput[type="checkbox"]:not(:disabled):hover:after { background-image: linear-gradient(135deg, #8BB0C2 0%, #FFF 100%); border-color: #85A9BB #92C2DA #92C2DA #85A9BB; } .myinput[type="checkbox"]:not(:disabled):hover:before { border-color: #3D7591; } /* Large checkboxes */ .myinput.large { height: 22px; width: 22px; } .myinput.large[type="checkbox"]:before { width: 20px; height: 20px; } .myinput.large[type="checkbox"]:after { top: -20px; width: 16px; height: 16px; } /* Custom checkbox */ .myinput.large.custom[type="checkbox"]:checked:after { background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGHRFWHRBdXRob3IAbWluZWNyYWZ0aW5mby5jb23fZidLAAAAk0lEQVQ4y2P4//8/AyUYwcAD+OzN/oMwshjRBoA0Gr8+DcbIhhBlAEyz+qZZ/7WPryHNAGTNMOxpJvo/w0/uP0kGgGwGaZbrKgfTGnLc/0nyAgiDbEY2BCRGdCDCnA2yGeYVog0Aae5MV4c7Gzk6CRqAbDM2w/EaQEgzXgPQnU2SAcTYjNMAYm3GaQCxNuM0gFwMAPUKd8XyBVDcAAAAAElFTkSuQmCC'), linear-gradient(135deg, #B1B6BE 0%, #FFF 100%); } .myinput.large.custom[type="checkbox"]:not(:disabled):checked:hover:after { background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGHRFWHRBdXRob3IAbWluZWNyYWZ0aW5mby5jb23fZidLAAAAk0lEQVQ4y2P4//8/AyUYwcAD+OzN/oMwshjRBoA0Gr8+DcbIhhBlAEyz+qZZ/7WPryHNAGTNMOxpJvo/w0/uP0kGgGwGaZbrKgfTGnLc/0nyAgiDbEY2BCRGdCDCnA2yGeYVog0Aae5MV4c7Gzk6CRqAbDM2w/EaQEgzXgPQnU2SAcTYjNMAYm3GaQCxNuM0gFwMAPUKd8XyBVDcAAAAAElFTkSuQmCC'), linear-gradient(135deg, #8BB0C2 0%, #FFF 100%); }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <table style="width:100%"> <tr> <td>Normal:</td> <td><input type="checkbox" /></td> <td><input type="checkbox" checked="checked" /></td> <td><input type="checkbox" disabled="disabled" /></td> <td><input type="checkbox" disabled="disabled" checked="checked" /></td> </tr> <tr> <td>Small:</td> <td><input type="checkbox" class="myinput" /></td> <td><input type="checkbox" checked="checked" class="myinput" /></td> <td><input type="checkbox" disabled="disabled" class="myinput" /></td> <td><input type="checkbox" disabled="disabled" checked="checked" class="myinput" /></td> </tr> <tr> <td>Large:</td> <td><input type="checkbox" class="myinput large" /></td> <td><input type="checkbox" checked="checked" class="myinput large" /></td> <td><input type="checkbox" disabled="disabled" class="myinput large" /></td> <td><input type="checkbox" disabled="disabled" checked="checked" class="myinput large" /></td> </tr> <tr> <td>Custom icon:</td> <td><input type="checkbox" class="myinput large custom" /></td> <td><input type="checkbox" checked="checked" class="myinput large custom" /></td> <td><input type="checkbox" disabled="disabled" class="myinput large custom" /></td> <td><input type="checkbox" disabled="disabled" checked="checked" class="myinput large custom" /></td> </tr> </table>
額外的 Webkit 風格翻轉小提琴
$(function() { var f = function() { $(this).next().text($(this).is(':checked') ? ':checked' : ':not(:checked)'); }; $('input').change(f).trigger('change'); });
body { font-family: arial; } .flipswitch { position: relative; background: white; width: 120px; height: 40px; -webkit-appearance: initial; border-radius: 3px; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); outline: none; font-size: 14px; font-family: Trebuchet, Arial, sans-serif; font-weight: bold; cursor: pointer; border: 1px solid #ddd; } .flipswitch:after { position: absolute; top: 5%; display: block; line-height: 32px; width: 45%; height: 90%; background: #fff; box-sizing: border-box; text-align: center; transition: all 0.3s ease-in 0s; color: black; border: #888 1px solid; border-radius: 3px; } .flipswitch:after { left: 2%; content: "OFF"; } .flipswitch:checked:after { left: 53%; content: "ON"; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script> <h2>Webkit friendly mobile-style checkbox/flipswitch</h2> <input type="checkbox" class="flipswitch" /> <span></span> <br> <input type="checkbox" checked="checked" class="flipswitch" /> <span></span>
更新:
下面的答案參考了 CSS 3 廣泛使用之前的情況。在現代瀏覽器(包括 Internet Explorer 9 及更高版本)中,使用您喜歡的樣式建立複選框替換更加簡單,無需使用 JavaScript。
以下是一些有用的連結:
值得注意的是,根本問題沒有改變。您仍然無法將樣式(邊框等)直接套用至複選框元素並使這些樣式影響 HTML 複選框的顯示。然而,發生的變化是,現在可以隱藏實際的複選框並將其替換為您自己的樣式元素,只使用 CSS 即可。特別是,由於 CSS 現在具有廣泛支援的 :checked 選擇器,因此您可以使替換正確反映框的選取狀態。
:checked
舊答案
這是一篇關於樣式化複選框的有用文章。基本上,該作者發現它在不同瀏覽器之間存在巨大差異,並且無論您如何設計它,許多瀏覽器總是顯示預設複選框。所以確實沒有一個簡單的方法。
不難想像一種解決方法,您可以使用 JavaScript 在複選框上覆蓋圖像,然後單擊該圖像導致檢查真正的複選框。沒有 JavaScript 的用戶將看到預設複選框。
編輯新增:這裡是一個很好的腳本,可以為您完成此操作;它隱藏了真正的複選框元素,用樣式化的範圍替換它,並重定向點擊事件。
透過使用
:after
和:before
偽類別附帶的新功能,您可以實現非常酷的自訂複選框效果。這樣做的優點是:您不需要向 DOM 添加任何其他內容,只需添加標準複選框即可。請注意,這僅適用於相容的瀏覽器。我相信這與某些瀏覽器不允許您在輸入元素上設定
:after
和:before
有關。不幸的是,這意味著目前僅支援 WebKit 瀏覽器。 Firefox Internet Explorer 仍然允許複選框發揮作用,只是沒有樣式,這有望在未來發生變化(代碼不使用供應商前綴)。這只是一個 WebKit 瀏覽器解決方案(Chrome、Safari、行動瀏覽器)
查看範例 Fiddle
#額外的 Webkit 風格翻轉小提琴
更新:
下面的答案參考了 CSS 3 廣泛使用之前的情況。在現代瀏覽器(包括 Internet Explorer 9 及更高版本)中,使用您喜歡的樣式建立複選框替換更加簡單,無需使用 JavaScript。
以下是一些有用的連結:
值得注意的是,根本問題沒有改變。您仍然無法將樣式(邊框等)直接套用至複選框元素並使這些樣式影響 HTML 複選框的顯示。然而,發生的變化是,現在可以隱藏實際的複選框並將其替換為您自己的樣式元素,只使用 CSS 即可。特別是,由於 CSS 現在具有廣泛支援的
:checked
選擇器,因此您可以使替換正確反映框的選取狀態。舊答案
這是一篇關於樣式化複選框的有用文章。基本上,該作者發現它在不同瀏覽器之間存在巨大差異,並且無論您如何設計它,許多瀏覽器總是顯示預設複選框。所以確實沒有一個簡單的方法。
不難想像一種解決方法,您可以使用 JavaScript 在複選框上覆蓋圖像,然後單擊該圖像導致檢查真正的複選框。沒有 JavaScript 的用戶將看到預設複選框。
編輯新增:這裡是一個很好的腳本,可以為您完成此操作;它隱藏了真正的複選框元素,用樣式化的範圍替換它,並重定向點擊事件。