利用【偽元素】自定義復選框

默認狀態下的復選框:

<input type="checkbox" id="awesome"/>
<label for="awesome">Awesome!</label>

當 <label>元素與復選框關聯之后,可以起到觸發開關的作用。我們可以為它添加生成性的內容(偽元素),并基于復選框的狀態來為其設置樣式。然后再把真正的復選框隱藏起來。
接下來為它添加樣式:

input[type="checkbox"] + label:before {
  content:"\a0";  /*不換行空格*/
  display:inline-block;
  vertical-align:0em;
  width:.75em;
  height:.75em;
  margin-right:.2em;
  border-radius:.2em;
  background:#ace;
  text-indent:.15em;
  line-height:.65;
}
復選框和 label 的樣子

現在給復選框的勾選狀態(checked)加上不同的樣式:

input[type="checkbox"]:checked + label:before {
  content:"\2713";
  background:#fce;
}

checked 狀態

現在,把原來的復選框以一種不損失可訪問性的方式隱藏起來。這意味著不能使用display:none;因為那樣會把它從鍵盤tab鍵切換焦點的隊列中完全消除。

input[type="checkbox"] {
  position:absolute;
  clip:rect(0,0,0,0);  /*clip 屬性剪裁絕對定位元素。*/
}

也可采用另一個方法:

input[type="checkbox"] {
  position:absolute;
  left:-9999px;  /*讓當前元素跑到頁面外面去*/
}

你還可以繼續優化它,比如在它聚焦或禁用時改變它的樣式,甚至可以用過渡或者動畫來讓各個狀態更加平滑。


參考書籍:Lea Verou《CSS揭秘》

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 本文轉載自:眾成翻譯譯者:為之漫筆鏈接:http://www.zcfy.cc/article/239原文:http...
    極樂君閱讀 7,397評論 1 62
  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標簽默認的外補...
    _Yfling閱讀 13,792評論 1 92
  • //------------------------- 第一章 認識JQuery ----------------...
    米塔塔閱讀 747評論 0 9
  • 一、樣式篇 第1章 初識jQuery (1)環境搭建 進入官方網站獲取最新的版本 http://jquery.co...
    凜0_0閱讀 3,443評論 0 44
  • 我們相約帶筆流浪 卻在半路迷失了方向 山高水遠歲月情長 誰把思念折成月光 道一聲故人可無恙 鮮活于記憶中的模樣 曾...
    江離1998閱讀 301評論 2 4