zoukankan      html  css  js  c++  java
  • 打造简易可扩展的jQuery/CSS3 Tab菜单

    今天我们利用jQuery和CSS3来打造一款简易而且扩展性强的Tab菜单,这款Tab菜单在切换时也有滑块的效果,先来看看效果图:

    由与Tab菜单比较假单,你也可以用CSS代码定制你自己需要的外观。

    我们可以在这里看到这款Tab菜单的DEMO演示

    看完演示,再来解读一下这款Tab菜单的源代码,主要由CSS代码和jQuery代码两块。

    先是上简单的HTML代码:

    <figure class="tabBlock">
      <ul class="tabBlock-tabs">
        <li class="tabBlock-tab is-active">Tab 1</li>
        <li class="tabBlock-tab">Tab 2</li>
      </ul>
      <div class="tabBlock-content">
        <div class="tabBlock-pane">
          <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Molestias molestiae atque quis blanditiis eaque maiores ducimus optio neque debitis quos dolorum odit unde quibusdam tenetur quaerat magni eius quod tempore.</p>
        </div>
        <div class="tabBlock-pane">
          <ul>
            <li>Lorem ipsum dolor sit amet.</li>
            <li>Minima mollitia tenetur nesciunt modi?</li>
            <li>Id sint fugit et sapiente.</li>
            <li>Nam deleniti libero obcaecati pariatur.</li>
            <li>Nemo optio iste labore similique?</li>
          </ul>
        </div>
      </div>
    </figure>

    这里我们可以看到,Tab菜单的菜单部分用了一个ul li列表,内容部分是普通的div块。

    接下来我们来看看CSS代码:

    .unstyledList, .tabBlock-tabs {
      list-style: none;
      margin: 0;
      padding: 0;
    }
    
    .tabBlock {
      margin: 0 0 2.5rem;
    }
    
    .tabBlock-tab {
      background-color: white;
      border-color: #d8d8d8;
      border-left-style: solid;
      border-top: solid;
      border-width: 2px;
      color: #b5a8c5;
      cursor: pointer;
      display: inline-block;
      font-weight: 600;
      float: left;
      padding: 0.625rem 1.25rem;
      position: relative;
      -webkit-transition: 0.1s ease-in-out;
      transition: 0.1s ease-in-out;
    }
    .tabBlock-tab:last-of-type {
      border-right-style: solid;
    }
    .tabBlock-tab::before, .tabBlock-tab::after {
      content: "";
      display: block;
      height: 4px;
      position: absolute;
      -webkit-transition: 0.1s ease-in-out;
      transition: 0.1s ease-in-out;
    }
    .tabBlock-tab::before {
      background-color: #b5a8c5;
      left: -2px;
      right: -2px;
      top: -2px;
    }
    .tabBlock-tab::after {
      background-color: transparent;
      bottom: -2px;
      left: 0;
      right: 0;
    }
    @media screen and (min- 700px) {
      .tabBlock-tab {
        padding-left: 2.5rem;
        padding-right: 2.5rem;
      }
    }
    .tabBlock-tab.is-active {
      position: relative;
      color: #975997;
      z-index: 1;
    }
    .tabBlock-tab.is-active::before {
      background-color: #975997;
    }
    .tabBlock-tab.is-active::after {
      background-color: white;
    }
    
    .tabBlock-content {
      background-color: white;
      border: 2px solid #d8d8d8;
      padding: 1.25rem;
    }
    
    .tabBlock-pane > :last-child {
      margin-bottom: 0;
    }

    这里我们清楚地可以看到,大部分CSS代码非常普通,就是定义了Tab菜单的外观。滑块滑入滑出的效果是利用了CSS3的transition: 0.1s ease-in-out;

    然后是切换的动作,这里利用了jQuery代码,也非常简单:

    var TabBlock = {
      s: {
        animLen: 200
      },
      
      init: function() {
        TabBlock.bindUIActions();
        TabBlock.hideInactive();
      },
      
      bindUIActions: function() {
        $('.tabBlock-tabs').on('click', '.tabBlock-tab', function(){
          TabBlock.switchTab($(this));
        });
      },
      
      hideInactive: function() {
        var $tabBlocks = $('.tabBlock');
        
        $tabBlocks.each(function(i) {
          var 
            $tabBlock = $($tabBlocks[i]),
            $panes = $tabBlock.find('.tabBlock-pane'),
            $activeTab = $tabBlock.find('.tabBlock-tab.is-active');
          
          $panes.hide();
          $($panes[$activeTab.index()]).show();
        });
      },
      
      switchTab: function($tab) {
        var $context = $tab.closest('.tabBlock');
        
        if (!$tab.hasClass('is-active')) {
          $tab.siblings().removeClass('is-active');
          $tab.addClass('is-active');
       
          TabBlock.showPane($tab.index(), $context);
        }
       },
      
      showPane: function(i, $context) {
        var $panes = $context.find('.tabBlock-pane');
       
        $panes.slideUp(TabBlock.s.animLen);
        $($panes[i]).slideDown(TabBlock.s.animLen);
      }
    };
    
    $(function() {
      TabBlock.init();
    });

    很清楚的几个js函数,主要是初始化init()和tab切换switchTab(),利用jQuery实现切换其实也是用jQuery动态改变元素的css class来实现的,没有特别的地方,这样js和css就分离开了,我们只需修改css代码就可以定制自己喜欢的外观了。

    最后,分享一下源代码,下载地址>>

  • 相关阅读:
    洛谷 P1208 [USACO1.3]混合牛奶 Mixing Milk( 普及-)
    洛谷 P1909 [NOIP2016 普及组] 买铅笔
    全排列问题
    集合的划分(setsub)
    自然数拆分-回溯
    洛谷 P4414 [COCI2006-2007#2] ABC
    洛谷 P5709 【深基2.习6】Apples Prologue
    洛谷 P4326 [COCI2006-2007#1] Herman
    平面分割
    洛谷 P1601 A+B Problem(高精)
  • 原文地址:https://www.cnblogs.com/html5tricks/p/3705049.html
Copyright © 2011-2022 走看看