表單是做網頁中很常使用到的元素,但預設的樣式都是醜醜很陽春的,筆者今天要教各位快速做出自訂的單/多選框樣式,讓您的表單硬是要跟別人不一樣。
基本 HTML 就是一個單選框元素加上標籤元素:
1 2 3 4 5 6 7 8 9 10 11 12 13 | <body> <h3>性別(單選)</h3> <div class="abgne-menu-20140101-1"> <input type="radio" id="male" name="sex"> <label for="male">男性</label> <input type="radio" id="female" name="sex"> <label for="female">女性</label> <input type="radio" id="other" name="sex"> <label for="other">其它</label> </div> </body> |
每一個標籤元素中特過 for 屬性來跟單選框元素一一配對,當點擊到標籤元素時,則同時會觸發點擊到相對應的單選框。而我們不想要醜醜的單選框元素,所以筆者先用 CSS 將它隱藏起來。
1 2 3 | .abgne-menu-20140101-1 input[type="radio"] { display: none; } |
隱藏好之後,接下來就是將標籤元素進行改造一下:
1 2 3 4 5 6 | .abgne-menu-20140101-1 input[type="radio"] + label { display: inline-block; background-color: #ccc; cursor: pointer; padding: 5px 10px; } |
筆者只是做一些很簡單的樣式設計,同時加上自訂滑鼠遊標為 pointer,讓使用者知道它是可以點擊的。
而比較特別的是 + 這個符號,它是相鄰兄弟選擇器(Adjacent Sibling Selector)。範例中要找的標籤元素是得要跟在單選框元素後的才行,若是改成 #male + label 的話:
就真的只有在 #male 後的下一個標籤元素才會有效果,其它更後面的兄弟元素則是不會有反應的唷。
好啦~現在若沒問題的話,就會看到基本的樣式出來了:
最後只要再搭配 :checked 擬類別(Pseudo-classes)就能收工下班啦!
1 2 3 4 | .abgne-menu-20140101-1 input[type="radio"]:checked + label { background-color: #f00; color: #fff; } |
這邊是針對被點選到的單選框元素後的下一個標籤元素進行設定。整個完成後的樣式就變成了:
而多選框的自訂方式也可以依此類推來設定。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <body> <h3>專長(多選)</h3> <div class="abgne-menu-20140101-2"> <input type="checkbox" id="jquery" name="skill" checked> <label for="jquery">jQuery</label> <input type="checkbox" id="css3" name="skill"> <label for="css3">CSS3</label> <input type="checkbox" id="html5" name="skill"> <label for="html5">HTML5</label> <input type="checkbox" id="angularjs" name="skill"> <label for="angularjs">AngularJS</label> </div> </body> |
CSS 的部份只要將 input[type="radio"] 改成 input["checkbox"] 就可以了
1 2 3 4 5 6 7 8 9 10 11 12 | .abgne-menu-20140101-2 input[type="checkbox"] { display: none; } .abgne-menu-20140101-2 input[type="checkbox"] + label { display: inline-block; background-color: #ccc; cursor: pointer; padding: 5px 10px; } .abgne-menu-20140101-2 input[type="checkbox"]:checked + label { background-color: #f3d42e; } |
是不是很簡單呢~
各位同學只要將標籤元素再設計的更好看的話,相信就能做出更符合網站特色的單/多選框囉。
See the Pen [CSS3]用 CSS3 做表單 - 自訂單/多選框樣式(一) by abgne.tw (@abgne-tw) on CodePen
最後再提醒一件事,請各位同學將這個範例的原理跟使用方式牢牢的記起來,未來很多的 CSS3 應用效果都會使用到相關的技巧喔!
老師,請問一下,這個在IE8(含)以下的版本,有解決方法嗎? 因為IE8(含)以下沒辦法正常運作,謝謝!
IE8 就是不支援 CSS3 這樣的選擇器, 如果真的需要的話, 就是試著用 jQuery 做囉!
您好,我想請問一下
radiobox項目出現一模一樣的選項,就無法順利點選
可參閱:http://codepen.io/anon/pen/sHJao
請問這應該如何解決比較好?
謝謝老師^^