国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > CSS > 正文

CSS實現導航條Tab切換的三種方法介紹

2024-07-11 08:41:55
字體:
來源:轉載
供稿:網友

前面的話

導航條Tab在頁面中非常常見,本文說詳細介紹CSS實現導航條Tab的三種方法

布局

根據上圖所示,先規定幾個定義,上圖的模塊整體叫做導航,由導航標題和導航內容組成。要實現上圖所示的布局效果,有兩種布局方法:語義布局和視覺布局

【語義布局】

從語義布局的角度來看,每一個導航標題和其對應的導航內容應該是一個整體

<style>body,p{margin: 0;}h2{margin: 0;font-size:100%;}ul{margin: 0;padding: 0;list-style: none;}   a{text-decoration: none;color:inherit;}.box{width: 572px;border: 1px solid #999;overflow: hidden;}.nav{margin-left: -1px;font: 14px "微軟雅黑";overflow: hidden;background-color: #f1f1f1;}.navI{float: left;width: 33.333%;box-sizing: border-box;}.navI-tit{line-height: 40px;text-align: center;cursor: pointer;border-left: 1px solid #cecece;border-bottom: 1px solid #cecece;}.navI-txt{width: 572px;height:200px;text-indent:2em;line-height: 2;background:#fff;}.ml1{margin-left: -100%;}.ml2{margin-left: -200%;}.navI_active{position:relative;z-index:1;}</style><div class="box">    <ul class="nav">        <li class="navI navI_active">            <h2 class="navI-tit">課程</h2>            <p class="navI-txt">課程內容</p>        </li>        <li class="navI">            <h2 class="navI-tit">學習計劃</h2>            <p class="navI-txt ml1">學習計劃內容</p>        </li>        <li class="navI">            <h2 class="navI-tit">技能圖譜</h2>            <p class="navI-txt ml2">技能圖譜內容</p>        </li>    </ul>   </div>

【視覺布局】

從視覺布局的角度來看,所有導航標題為一組,所有導航內容為一組

<style>body,p{margin: 0;}ul{margin: 0;padding: 0;list-style: none;}a{text-decoration: none;color: inherit;}.box{width:572px;border:1px solid #999;font:14px "微軟雅黑";overflow:hidden;}.nav-tit{margin-left: -1px;height: 40px;line-height: 40px;text-align: center;background-color: #f1f1f1;overflow: hidden;}.nav-titI{box-sizing: border-box;float: left;width: 33.333%;border-left: 1px solid #cecece;border-bottom: 1px solid #cecece;cursor: pointer;}.nav-txt{height: 200px;text-indent: 2em; line-height: 2;}.nav-txtI{height: 200px;}</style><div class="box">    <nav class="nav-tit">        <a class="nav-titI">課程</a>        <a class="nav-titI">學習計劃</a>        <a class="nav-titI">技能圖譜</a>    </nav>    <ul class="nav-txt">        <li class="nav-txtI nav-txtI_active">課程內容</li>        <li class="nav-txtI">學習計劃內容</li>        <li class="nav-txtI">技能圖譜內容</li>    </ul></div>

hover

導航條的功能就是點擊導航標題時,顯示對應的導航內容。如果使用偽類hover實現類似效果,使用第一種布局方式語義布局比較合適

由于在語義布局中,三個導航內容是處于重疊的狀態。移入其父元素.navI時,觸發鼠標的hover態,給父元素添加樣式為position:relative;z-index:1;。從而提升了層級z-index。在其子元素導航內容的層級比拼中,“子憑父貴”,父元素層級高的,其導航內容在重疊狀態中顯示在最上面

<style>body,p{margin: 0;}h2{margin: 0;font-size:100%;}ul{margin: 0;padding: 0;list-style: none;}   a{text-decoration: none;color:inherit;}.box{width: 572px;border: 1px solid #999;overflow: hidden;}.nav{margin-left: -1px;font: 14px "微軟雅黑";overflow: hidden;background-color: #f1f1f1;}.navI{float: left;width: 33.333%;box-sizing: border-box;}.navI-tit{line-height: 40px;text-align: center;cursor: pointer;border-left: 1px solid #cecece;border-bottom: 1px solid #cecece;}.navI-txt{width: 572px;height:200px;text-indent:2em;line-height: 2;background:#fff;}.ml1{margin-left: -100%;}.ml2{margin-left: -200%;}.navI_active{position:relative;z-index:1;}/*重點代碼*/.navI:hover{position:relative;z-index:1;}.navI:hover .navI-tit{background:#fff;border-bottom:none;}</style><div class="box">    <ul class="nav">        <li class="navI navI_active">            <h2 class="navI-tit">課程</h2>            <p class="navI-txt">課程內容</p>        </li>        <li class="navI">            <h2 class="navI-tit">學習計劃</h2>            <p class="navI-txt ml1">學習計劃內容</p>        </li>        <li class="navI">            <h2 class="navI-tit">技能圖譜</h2>            <p class="navI-txt ml2">技能圖譜內容</p>        </li>    </ul>   </div>

[缺點]:初始狀態時,第一個導航標題無法實現默認被選中的狀態(背景白色,無下劃線);鼠標移出導航模塊時,導航內容部分無法固定,顯示第一個導航內容;鼠標移出導航模塊時,導航標題的樣式無法固定,恢復到默認狀態

 錨點

實現導航條的關鍵就在于如何建立導航標題與導航內容之間的聯系,而錨點就可以實現類似效果。通過點擊錨點,頁面生成一個哈希值,然后跳轉到相應內容的位置

使用錨點技術時,使用語義布局和視覺布局都可以實現

【1】使用語義布局

使用語義布局時,可以使用偽類target,通過target選擇器來改變點擊導航標題時,當前標題的樣式。不僅如此,因為要使用兄弟選擇器,所以需要改變HTML結構,將導航標題的HTML結構移到導航內容的下面

點擊導航標題時,觸發target偽類,改變對應的導航內容的層級z-index,從而使當前導航內容在三個導航內容中勝出,在最上層顯示;與此同時,改變當前導航標題的樣式

<style>body,p{margin: 0;}h2{margin: 0;font-size:100%;}ul{margin: 0;padding: 0;list-style: none;}   a{text-decoration: none;color:inherit;}.box{width: 572px;border: 1px solid #999;overflow: hidden;}.nav{margin-left: -1px;font: 14px "微軟雅黑";overflow: hidden;background-color: #f1f1f1;}.navI{float: left;width: 33.333%;box-sizing: border-box;position:relative;}.navI-tit{               position:absolute;               top:0;left:0;              right:0;              box-sizing: border-box;               line-height: 40px;                height: 40px;               text-align: center;               cursor: pointer;               border-left: 1px solid #cecece;               border-bottom: 1px solid #cecece;            }.navI-txt{width: 572px;height:200px;margin-top: 40px;text-indent:2em;line-height: 2;background:#fff;}.ml1{margin-left: -100%;}.ml2{margin-left: -200%;}.navI_active{z-index:1;}/*重點代碼*/.navI-txt:target{position:relative;z-index:1;}.navI-txt:target ~ .navI-tit{background:#fff;border-bottom:none;}</style><div class="box">    <ul class="nav">        <li class="navI navI_active">            <p class="navI-txt" id="kc">課程內容</p>            <a class="navI-tit" href="#kc">課程</a>        </li>        <li class="navI">            <p class="navI-txt ml1" id="xx">學習計劃內容</p>            <a class="navI-tit" href="#xx">學習計劃</a>        </li>        <li class="navI">            <p class="navI-txt ml2" id="jn">技能圖譜內容</p>            <a class="navI-tit" href="#jn">技能圖譜</a>        </li>    </ul>   </div>

[缺點]:初始態默認選中的導航標題樣式無法設置;改變了HTML結構;錨點技術本身的局限是錨點目標會盡可能的到達可視區域上方,從而可能會生成頁面跳動

【2】使用視覺布局

在視覺布局中,三個導航內容屬于同一個父元素,與父元素的高度相同,并按照塊級元素的排列方式進行排布,父元素設置溢出隱藏時,默認只顯示第一個導航內容

點擊導航標題時,對應的導航內容到達導航標題行下面,達到了導航切換的效果

使用偽類hover來實現改變當前導航標題樣式的效果

<style>body,p{margin: 0;}ul{margin: 0;padding: 0;list-style: none;}a{text-decoration: none;color: inherit;}.box{width:572px;border:1px solid #999;font:14px "微軟雅黑";overflow:hidden;}.nav-tit{margin-left: -1px;height: 40px;line-height: 40px;text-align: center;background-color: #f1f1f1;overflow: hidden;}.nav-titI{box-sizing: border-box;float: left;width: 33.333%;border-left: 1px solid #cecece;border-bottom: 1px solid #cecece;cursor: pointer;}.nav-txt{height: 200px;text-indent: 2em; line-height: 2;}.nav-txtI{height: 200px;}/*重點內容*/.nav-txt{overflow: hidden;}.nav-titI:hover{background-color: white;border-bottom: none;}</style><div class="box">    <nav class="nav-tit">        <a class="nav-titI" href="#kc">課程</a>        <a class="nav-titI" href="#xx">學習計劃</a>        <a class="nav-titI" href="#jn">技能圖譜</a>    </nav>    <ul class="nav-txt">        <li class="nav-txtI nav-txtI_active" id="kc">課程內容</li>        <li class="nav-txtI" id="xx">學習計劃內容</li>        <li class="nav-txtI" id="jn">技能圖譜內容</li>    </ul></div>

[缺點]:初始態默認選中的導航標題樣式無法設置;錨點技術本身的局限是錨點目標會盡可能的到達可視區域上方,從而可能會生成頁面跳動;hover態與點擊態分開,可能會讓人犯暈;鼠標移出導航模塊時,導航標題的樣式無法固定,恢復到默認狀態 

label

上面使用錨點技術來聯系導航標題和導航內容,而label也可以實現類似的效果。label元素為input元素定義標注,建立文字標簽與表單控件的關聯。在label元素內點擊文本會觸發此控件,選擇該文本時瀏覽器會自動把焦點轉到和標簽相關的表單控件上

使用label時,使用語義布局和視覺布局都可以實現

【1】使用語義布局

使用語義布局時,使用label標簽來顯示導航標題,且需要配合使用單選按鈕<input type="radio">。使用偽類checked,通過checked選擇器來改變點擊導航標題時,當前標題的樣式。不僅如此,因為要使用兄弟選擇器,所以需要改變HTML結構,將單選按鈕放在每個.navI元素里的最上層,然后設置display:none,接下來是<label>表示導航標題,最后是<p>表示導航內容

點擊導航標題時,觸發checked偽類,改變對應的導航內容的層級z-index,從而使當前導航內容在三個導航內容中勝出,在最上層顯示;與此同時,改變當前導航標題的樣式

<style>body,p{margin: 0;}h2{margin: 0;font-size:100%;}ul{margin: 0;padding: 0;list-style: none;}  input{margin: 0;width: 0;} a{text-decoration: none;color:inherit;}.box{width: 572px;border: 1px solid #999;overflow: hidden;}.nav{margin-left: -1px;font: 14px "微軟雅黑";overflow: hidden;background-color: #f1f1f1;}.navI{float: left;width: 33.333%;box-sizing: border-box;}.navI-tit{display:block;line-height: 40px;text-align: center;cursor: pointer;border-left: 1px solid #cecece;border-bottom: 1px solid #cecece;}.navI-txt{position:relative;width: 572px;height:200px;text-indent:2em;line-height: 2;background:#fff;}.ml1{margin-left: -100%;}.ml2{margin-left: -200%;}/*重點代碼*/.navI-radio{display:none;}.navI-radio:checked + .navI-tit{background:#fff;border-bottom:none;}.navI-radio:checked ~ .navI-txt{z-index:1;}</style><div class="box">    <ul class="nav">        <li class="navI">            <input class="navI-radio" name="nav" type="radio" id="kc" checked>            <label class="navI-tit" for="kc">課程</label>                        <p class="navI-txt">課程內容</p>        </li>        <li class="navI">            <input class="navI-radio" name="nav" type="radio" id="xx">            <label class="navI-tit" for="xx">學習計劃</label>                        <p class="navI-txt ml1">學習計劃內容</p>        </li>        <li class="navI">            <input class="navI-radio" name="nav" type="radio" id="jn">            <label class="navI-tit" for="jn">技能圖譜</label>                        <p class="navI-txt ml2">技能圖譜內容</p>        </li>    </ul>   </div>

[缺點]:HTML結構較復雜

【2】使用視覺布局

在視覺布局中,三個導航內容屬于同一個父元素,與父元素的高度相同,并按照塊級元素的排列方式進行排布,父元素設置溢出隱藏時,默認只顯示第一個導航內容

點擊導航標題時,對應的導航內容到達導航標題行下面,達到了導航切換的效果

使用偽類hover來實現改變當前導航標題樣式的效果

<style>body,p{margin: 0;}ul{margin: 0;padding: 0;list-style: none;}a{text-decoration: none;color: inherit;}input{margin: 0;padding: 0;border:none;}.box{width:572px;border:1px solid #999;font:14px "微軟雅黑";overflow:hidden;}.nav-tit{margin-left: -1px;height: 40px;line-height: 40px;text-align: center;background-color: #f1f1f1;overflow: hidden;}.nav-titI{box-sizing: border-box;float: left;width: 33.333%;border-left: 1px solid #cecece;border-bottom: 1px solid #cecece;cursor: pointer;}.nav-txt{height: 200px;}.nav-txtI{height: 200px;display:block;width: 100%;text-indent: 2em; line-height: 2;}/*重點內容*/.nav-txt{overflow: hidden;}.nav-titI:hover{background-color: #fff;border-bottom:none;}</style><div class="box">    <nav class="nav-tit">        <label class="nav-titI" for="kc">課程</label>        <label class="nav-titI" for="xx">學習計劃</label>        <label class="nav-titI" for="jn">技能圖譜</label>    </nav>    <nav class="nav-txt">        <input class="nav-txtI nav-txtI_active" id="kc" value="課程內容" readonly>        <input class="nav-txtI" id="xx" value="學習計劃內容" readonly>        <input class="nav-txtI" id="jn" value="技能圖譜內容" readonly>    </nav></div>

[缺點]:初始態默認選中的導航標題樣式無法設置;有時會出現頁面跳動的效果;hover態與點擊態分開,可能會讓人犯暈;鼠標移出導航模塊時,導航標題的樣式無法固定,恢復到默認狀態

 最后

上面的三種方法中,實現效果最好的是使用label標簽配合radio類型的input標簽,通過:checked選擇器來實現

在實際應用中,使用javascript的方式來控制導航條Tab的情況更為普遍

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 淳安县| 漳平市| 元谋县| 甘洛县| 肃南| 泸西县| 横峰县| 五台县| 凉城县| 兴宁市| 遵义市| 乡城县| 西青区| 丰镇市| 华安县| 灵宝市| 湾仔区| 米泉市| 凤山市| 麻栗坡县| 阿瓦提县| 鲁甸县| 舞阳县| 襄汾县| 淮阳县| 聂荣县| 遂昌县| 虞城县| 宜昌市| 韶山市| 内乡县| 缙云县| 广德县| 德保县| 云龙县| 江山市| 民乐县| 安远县| 且末县| 沧州市| 潮安县|