先看看Demo:前端
CODEPEN 示例頁面前端框架
講到選項卡(Tabs)功能時,大多會想到用JavaScript去作,像知名的前端框架:Bootstrap所提供的Tab元件,就是用jQuery實現的(其實網絡上有不少用jQuery開發的Tab);但其實不用jQuery或JavaScript技術,就能實現高效能且易維護的Tabs元件,讓咱們來看看是怎麼辦到的:網絡
<ul class="tabs"> <li> <input type="radio" name="tabs"> <label class="tab">頁面A</label> <div class="section">內容A</div> </li> <li> <input type="radio" name="tabs"> <label class="tab">頁面B</label> <div class="section">內容B</div> </li> <li> <input type="radio" name="tabs"> <label class="tab">頁面C</label> <div class="section">內容C</div> </li> </ul>
這篇文章的主要技巧也就是要靠這兩種元素的特性,由於咱們要「借用」Radio button的單選特性,決定哪一個Tab是Active,同時確保其餘Tab是未選中的狀態。框架
Radio button默認的樣式是很是醜陋的,並且咱們能改動的樣式也是有限的,因此不建議直接把它設計成Tab,因此咱們使用<label>來擔任觸發的角色,也比較容易改變樣式,再藉由Label的For屬性去觸發對應id的Radio button。測試
因此咱們爲Radio button加上id,而後將Label的for屬性指向對應的id:spa
<ul class="tabs"> <li> <input type="radio" name="tabs" id="tabA"> <label class="tab" for="tabA">頁面A</label> <div class="section">內容A</div> </li> <li> <input type="radio" name="tabs" id="tabB"> <label class="tab" for="tabB">頁面B</label> <div class="section">內容B</div> </li> <li> <input type="radio" name="tabs" id="tabC"> <label class="tab" for="tabC">頁面C</label> <div class="section">內容C</div> </li> </ul>
這樣就完成咱們的HTML結構了,再來要寫點CSS,讓功能得以運做起來。設計
li { display: inline-block; } input[type="radio"] { position: absolute; outline: none; ... } .tab { ... } .section { position: absolute; top: 50px; // 取決於你的Label高度 left: 0; ... }
咦?仍是不能動?由於咱們還須要運用CSS的兩個重要技巧:僞類(Pseudo-class)和通用兄弟元素選擇器(Sibling Combinator),才能讓選項卡與內容塊作切換。code
咱們爲Radio button加上僞類:checked,表示當這個Radio button被選中時(等於對應的標籤被選中使)纔會呈現的樣式。blog
input[type="radio"]:checked { ... }
而後要作切換動做的是選項卡和內容塊,因爲它們與Radio button屬同一層父元素,因此咱們這裏要用到通用兄弟元素選擇器~來作,通用兄弟元素選擇器有兩種:圖片
咱們使用通用兄弟元素選擇器便可:
input[type="radio"]:checked ~ .tab { // 這裏也可使用相鄰兄弟選擇器來作 ... } input[type="radio"]:checked ~ .section { ... z-index: 2; }
注意內容內存塊(.section)要加上z-index屬性才能覆蓋其它選項卡的內容塊,最後咱們再將Radio button設爲透明或使用定位的技巧讓它消失在頁面上,前面沒有先提這點的緣由,是由於可讓你在點選選項卡時,觀察Radio button的選中狀態變化,同時也方便測試,確認選項卡對應的Radio button有正確被觸發。
這樣就大功告成啦!
大略整理一下重點與須要注意的地方:
本篇文章的技術給予選項卡UI另外一種開發的選擇,Radio button的特性還有不少應用能夠作(如Switcher),只要善用HTML表單元素與CSS的一些技巧,也能玩出不少有趣的功能,甚至替代JavaScript的部份工做。