CSS完成导航栏条Tab切换的3种方式详细介绍

日期:2021-01-20 类型:科技新闻 

关键词:微信小程序页面设计,python小程序,小程序首页模板,如何建立微信小程序,怎么做微信小程序

前面的话

导航栏条Tab在网页页面中十分普遍,本文说详尽详细介绍CSS完成导航栏条Tab的3种方式

合理布局

依据上图所示,先要求几个界定,上图的控制模块总体叫做导航栏,由导航栏题目和导航栏內容构成。要完成上图所示的合理布局实际效果,有两种合理布局方式:词义合理布局和视觉效果合理布局

【词义合理布局】

从词义合理布局的角度看来,每个导航栏题目和其对应的导航栏內容应当是1个总体

<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: ⑴px;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: ⑴00%;}
.ml2{margin-left: ⑵00%;}
.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>

【视觉效果合理布局】

从视觉效果合理布局的角度看来,全部导航栏题目为1组,全部导航栏內容为1组

<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: ⑴px;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完成相近实际效果,应用第1种合理布局方法词义合理布局较为适合

因为在词义合理布局中,3个导航栏內容是处在重合的情况。移入其父元素.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: ⑴px;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: ⑴00%;}
.ml2{margin-left: ⑵00%;}
.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个导航栏题目没法完成默认设置被选定的情况(情况白色,无下划线);电脑鼠标移出导航栏控制模块时,导航栏內容一部分没法固定不动,显示信息第1个导航栏內容;电脑鼠标移出导航栏控制模块时,导航栏题目的款式没法固定不动,修复到默认设置情况

 锚点

完成导航栏条的重要就在于怎样创建导航栏题目与导航栏內容之间的联络,而锚点便可以完成相近实际效果。根据点一下锚点,网页页面转化成1个哈希值,随后自动跳转到相应內容的部位

应用锚点技术性时,应用词义合理布局和视觉效果合理布局都可以以完成

【1】应用词义合理布局

应用词义合理布局时,可使用伪类target,根据target挑选器来更改点一下导航栏题目时,当今题目的款式。不但这般,由于要应用弟兄挑选器,因此必须更改HTML构造,将导航栏题目的HTML构造移到导航栏內容的下面

点一下导航栏题目时,开启target伪类,更改对应的导航栏內容的等级z-index,从而使当今导航栏內容在3个导航栏內容中胜出,在最顶层显示信息;与此另外,更改当今导航栏题目的款式

<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: ⑴px;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: ⑴00%;}
.ml2{margin-left: ⑵00%;}
.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】应用视觉效果合理布局

在视觉效果合理布局中,3个导航栏內容属于同1个父元素,与父元素的高宽比同样,并依照块级元素的排序方法开展排布,父元素设定外溢掩藏时,默认设置只显示信息第1个导航栏內容

点一下导航栏题目时,对应的导航栏內容抵达导航栏题目行下面,做到了导航栏切换的实际效果

应用伪类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: ⑴px;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,从而使当今导航栏內容在3个导航栏內容中胜出,在最顶层显示信息;与此另外,更改当今导航栏题目的款式

<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: ⑴px;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: ⑴00%;}
.ml2{margin-left: ⑵00%;}
/*关键编码*/
.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】应用视觉效果合理布局

在视觉效果合理布局中,3个导航栏內容属于同1个父元素,与父元素的高宽比同样,并依照块级元素的排序方法开展排布,父元素设定外溢掩藏时,默认设置只显示信息第1个导航栏內容

点一下导航栏题目时,对应的导航栏內容抵达导航栏题目行下面,做到了导航栏切换的实际效果

应用伪类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: ⑴px;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态与点一下态分开,将会会令人犯晕;电脑鼠标移出导航栏控制模块时,导航栏题目的款式没法固定不动,修复到默认设置情况

 最终

上面的3种方式中,完成实际效果最好是的是应用label标识相互配合radio种类的input标识,根据:checked挑选器来完成

在具体运用中,应用javascript的方法来操纵导航栏条Tab的状况更加广泛

以上便是本文的所有內容,期待对大伙儿的学习培训有一定的协助,也期待大伙儿多多适用脚本制作之家。