CSS tab选项卡(标签页)切换

在github上看到一篇 You dot need JavaScript 很多效果不需要js也能做到,比如手风琴的效果,轮播,弹出的对话框,工具提示,标签页的切换,多级的下拉菜单等等,css甚至还能做游戏!
之前就看到一个用css制作的轮播的例子,这次又遇到了,所以简单记录下。
观察了那篇github中的几个例子,不难发现凡是涉及到点击事件的都是通过隐藏的input和与之关联的label 点击label触发input的checked状态触发的,再配合使用元素状态的伪类 :checked 样式就可以实现不同状态的切换,中间的过度效果还可以配合CSS3的 transition 过度效果实现。下边的一个简单的标签页的切换例子 就是用这原理实现的。
页面结构

.html
<div class="tab-wrap">
  <!-- active tab on page load gets checked attribute -->
  <input type="radio" id="tab1" name="tabGroup1" class="tab" checked> <!-- 设置一个默认状态 -->
  <label for="tab1">Short</label>
  <input type="radio" id="tab2" name="tabGroup1" class="tab">
  <label for="tab2">Medium</label>
  <input type="radio" id="tab3" name="tabGroup1" class="tab">
  <label for="tab3">Long</label>
  <div class="tab__content">
    <h3>Short Section</h3>
    <p>Praesent...</p>
  </div>
  <div class="tab__content">
    <h3>Medium Section</h3>
    <p>Praesent...</p>
    <p>In...</p>
  </div>
  <div class="tab__content">
    <h3>Long Section</h3>
    <p>...</p>
    <p>...</p>
    <p>...</p>
    <p>...</p>
  </div>
</div>

主要样式:

.css
.tab__content {
    padding: 10px 25px;
    background-color: transparent;
    position: absolute;
    width: 100%;
    z-index: -1;
    opacity: 0;
    left: 0;
    transform: translateY(-3px);
    border-radius: 6px;
}
/* 首先让内容部分都不可见,不占据文档流。 */

.tab:checked:nth-of-type(1) ~ .tab__content:nth-of-type(1) {
    opacity: 1;
    transition: 0.5s opacity ease-in, 0.8s transform ease;
    position: relative; 
    top: 0;
    z-index: 100;
    transform: translateY(0px);
    text-shadow: 0 0 0;
}

.tab:checked:nth-of-type(2) ~ .tab__content:nth-of-type(2) {
    opacity: 1;
    transition: 0.5s opacity ease-in, 0.8s transform ease;
    position: relative;
    top: 0;
    z-index: 100;
    transform: translateY(0px);
    text-shadow: 0 0 0;
}

当有input在被选中的状态时, 选择与input同级的内容部分元素tab__content,它的样式将被设置为可见,占据文档流同时改变它的平移的位置,因为有过度的效果,所以点击后看起来是内容是向上顶出来的。
这一部分的代码都是重复的,可以用sass预处理循环, 设置一个最大值即可:

.scss
$max-tab-count: 5;
.tab {
  display: none;
  @for $i from 1 through  $max-tab-count {
    &amp;:checked:nth-of-type(#{$i}) ~ .tab__content:nth-of-type(#{$i}) {
      opacity: 1;
      transition: 0.5s opacity ease-in, 0.8s transform ease;
      position: relative;
      top: 0;
      z-index: 100;
      transform: translateY(0px);
      text-shadow: 0 0 0;
    }
  }
}

以后选项卡的个数变化只需要将最大值定义更改就行。
demo
CSS选项卡切换

  • 7
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我来为您详细说明如何使用原生 HTML 和 JavaScript 创建选项卡Tab切换)。 首先,我们需要在 HTML 中创建选项卡的结构。我们可以使用 ul 和 li 标签来创建选项卡的导航栏,使用 div 标签来创建选项卡的内容: ```html <div class="tab"> <ul class="tab-nav"> <li class="active"><a href="#tab-1">Tab 1</a></li> <li><a href="#tab-2">Tab 2</a></li> <li><a href="#tab-3">Tab 3</a></li> </ul> <div class="tab-content"> <div id="tab-1" class="tab-pane active">Content for tab 1 goes here.</div> <div id="tab-2" class="tab-pane">Content for tab 2 goes here.</div> <div id="tab-3" class="tab-pane">Content for tab 3 goes here.</div> </div> </div> ``` 在上面的示例中,我们使用了一个包含三个选项卡的 div 元素。每个选项卡都有一个对应的 ID 和相应的内容。 接下来,我们需要使用 JavaScript 来实现选项卡切换功能。我们可以使用以下代码: ```javascript const tabs = document.querySelectorAll('.tab-nav li'); const tabContent = document.querySelectorAll('.tab-content .tab-pane'); tabs.forEach((tab, index) => { tab.addEventListener('click', () => { tabs.forEach(tab => tab.classList.remove('active')); tab.classList.add('active'); tabContent.forEach(content => content.classList.remove('active')); tabContent[index].classList.add('active'); }); }); ``` 在上面的示例中,我们首先使用 querySelectorAll 函数获取选项卡的导航栏和内容。然后,我们使用 forEach 函数为每个选项卡添加一个点击事件监听器。当用户点击选项卡时,我们将为当前选项卡添加一个“active”类,并将其它选项卡的“active”类移除。我们还将为当前选项卡的内容添加一个“active”类,以显示相应的内容。 最后,我们需要为选项卡添加一些 CSS 样式来美化它们: ```css .tab { display: flex; flex-direction: column; border: 1px solid #ccc; border-radius: 5px; overflow: hidden; } .tab-nav { display: flex; list-style: none; margin: 0; padding: 0; } .tab-nav li { flex: 1; text-align: center; } .tab-nav li a { display: block; padding: 10px 20px; text-decoration: none; color: #333; } .tab-nav li.active a { color: #fff; background-color: #007acc; } .tab-content { padding: 20px; } .tab-content .tab-pane { display: none; } .tab-content .tab-pane.active { display: block; } ``` 在上面的示例中,我们使用了 flexbox 布局和一些基本样式来创建选项卡。我们还添加了一些样式来突出显示当前选项卡和内容。 通过以上步骤,我们就成功地创建了一个原生 HTML 和 JavaScript 的选项卡

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值