• 技术文章 >web前端 >css教程

    简约时尚的纯CSS3 Tabs选项卡特效

    黄舟黄舟2017-03-24 13:43:15原创1155
    简要教程

    这是一款使用纯CSS3制作的Tabs选项卡特效。该Tabs选项卡简约时尚,各个选项卡之间切换时使用了下划线跟随动画,整体效果非常不错。

    HTML结构

    整个Tabs选项卡的HTML结构分为几个部分:使用<input>元素和一个无序列表来制作导航。

    <input type="radio" id="tab1" name="tab-control" checked>
    <input type="radio" id="tab2" name="tab-control">
    <input type="radio" id="tab3" name="tab-control">  
    <input type="radio" id="tab4" name="tab-control">
    <ul>
      <li title="tab 1"><label for="tab1" role="button"><span>Tab 1</span></label></li>
      <li title="tab 2"><label for="tab2" role="button"><span>Tab 2</span></label></li>
      <li title="tab 3"><label for="tab3" role="button"><span>Tab 3</span></label></li>
      <li title="tab 4"><label for="tab4" role="button"><span>Tab 4</span></label></li>
    </ul>

    各个选项卡的内容包含在一个<p>元素中。

    <p class="content">
      <section>
        <h2>Tab 1 content</h2>
      </section>
      <section>
        <h2>Tab 2 content</h2>
      </section>
      <section>
        <h2>Tab 3 content</h2>
      </section>
      <section>
        <h2>Tab 4 content</h2>
      </section>
    </p>

    用于制作下划线动画的线条使用一个<p>元素来制作。

    <p class="slider"><p class="indicator"></p></p>

    CSS样式

    该Tabs选项卡的主要CSS样式如下:

    .tabs {
      left: 50%;
      -webkit-transform: translateX(-50%);
      transform: translateX(-50%);
      position: relative;
      background: white;
      padding: 50px;
      padding-bottom: 80px;
      width: 70%;
      height: 250px;
      box-shadow: 0 14px 28px rgba(0, 0, 0, 0.25), 0 10px 10px rgba(0, 0, 0, 0.22);
      border-radius: 5px;
      min-width: 240px;
    }
     
    .tabs input[name="tab-control"] { display: none; }
     
    .tabs .content section h2, .tabs ul li label {
      font-weight: bold;
      font-size: 18px;
      color: #428BFF;
    }
     
    .tabs ul {
      list-style-type: none;
      padding-left: 0;
      display: -webkit-box;
      display: -webkit-flex;
      display: -ms-flexbox;
      display: flex;
      -webkit-box-orient: horizontal;
      -webkit-box-direction: normal;
      -webkit-flex-direction: row;
      -ms-flex-direction: row;
      flex-direction: row;
      margin-bottom: 10px;
      -webkit-box-pack: justify;
      -webkit-justify-content: space-between;
      -ms-flex-pack: justify;
      justify-content: space-between;
      -webkit-box-align: end;
      -webkit-align-items: flex-end;
      -ms-flex-align: end;
      align-items: flex-end;
      -webkit-flex-wrap: wrap;
      -ms-flex-wrap: wrap;
      flex-wrap: wrap;
    }
     
    .tabs ul li {
      box-sizing: border-box;
      -webkit-box-flex: 1;
      -webkit-flex: 1;
      -ms-flex: 1;
      flex: 1;
      width: 25%;
      padding: 0 10px;
      text-align: center;
    }
     
    .tabs ul li label {
      -webkit-transition: all 0.3s ease-in-out;
      transition: all 0.3s ease-in-out;
      color: #929daf;
      padding: 5px auto;
      overflow: hidden;
      text-overflow: ellipsis;
      display: block;
      cursor: pointer;
      -webkit-transition: all 0.2s ease-in-out;
      transition: all 0.2s ease-in-out;
      white-space: nowrap;
      -webkit-touch-callout: none;
      -webkit-user-select: none;
      -moz-user-select: none;
      -ms-user-select: none;
      user-select: none;
    }
     
    .tabs ul li label br { display: none; }
     
    .tabs ul li label svg {
      fill: #929daf;
      height: 1.2em;
      vertical-align: bottom;
      margin-right: 0.2em;
      -webkit-transition: all 0.2s ease-in-out;
      transition: all 0.2s ease-in-out;
    }
     
    .tabs ul li label:hover, .tabs ul li label:focus, .tabs ul li label:active {
      outline: 0;
      color: #bec5cf;
    }
     
    .tabs ul li label:hover svg, .tabs ul li label:focus svg, .tabs ul li label:active svg { fill: #bec5cf; }
     
    .tabs .slider {
      position: relative;
      width: 25%;
      -webkit-transition: all 0.33s cubic-bezier(0.38, 0.8, 0.32, 1.07);
      transition: all 0.33s cubic-bezier(0.38, 0.8, 0.32, 1.07);
    }
     
    .tabs .slider .indicator {
      position: relative;
      width: 50px;
      max-width: 100%;
      margin: 0 auto;
      height: 4px;
      background: #428BFF;
      border-radius: 1px;
    }
     
    .tabs .content { margin-top: 30px; }
     
    .tabs .content section {
      display: none;
      -webkit-animation-name: content;
      animation-name: content;
      -webkit-animation-direction: normal;
      animation-direction: normal;
      -webkit-animation-duration: 0.3s;
      animation-duration: 0.3s;
      -webkit-animation-timing-function: ease-in-out;
      animation-timing-function: ease-in-out;
      -webkit-animation-iteration-count: 1;
      animation-iteration-count: 1;
      line-height: 1.4;
    }
     
    .tabs .content section h2 {
      color: #428BFF;
      display: none;
    }
     
    .tabs .content section h2::after {
      content: "";
      position: relative;
      display: block;
      width: 30px;
      height: 3px;
      background: #428BFF;
      margin-top: 5px;
      left: 1px;
    }
     
    .tabs input[name="tab-control"]:nth-of-type(1):checked ~ ul > li:nth-child(1) > label {
      cursor: default;
      color: #428BFF;
    }
     
    .tabs input[name="tab-control"]:nth-of-type(1):checked ~ ul > li:nth-child(1) > label svg { fill: #428BFF; }
    @media (max-width: 600px) {
     
    .tabs input[name="tab-control"]:nth-of-type(1):checked ~ ul > li:nth-child(1) > label { background: rgba(0, 0, 0, 0.08); }
    }
     
    .tabs input[name="tab-control"]:nth-of-type(1):checked ~ .slider {
      -webkit-transform: translateX(0%);
      transform: translateX(0%);
    }
     
    .tabs input[name="tab-control"]:nth-of-type(1):checked ~ .content > section:nth-child(1) { display: block; }
     
    .tabs input[name="tab-control"]:nth-of-type(2):checked ~ ul > li:nth-child(2) > label {
      cursor: default;
      color: #428BFF;
    }
     
    .tabs input[name="tab-control"]:nth-of-type(2):checked ~ ul > li:nth-child(2) > label svg { fill: #428BFF; }
    @media (max-width: 600px) {
     
    .tabs input[name="tab-control"]:nth-of-type(2):checked ~ ul > li:nth-child(2) > label { background: rgba(0, 0, 0, 0.08); }
    }
     
    .tabs input[name="tab-control"]:nth-of-type(2):checked ~ .slider {
      -webkit-transform: translateX(100%);
      transform: translateX(100%);
    }
     
    .tabs input[name="tab-control"]:nth-of-type(2):checked ~ .content > section:nth-child(2) { display: block; }
     
    .tabs input[name="tab-control"]:nth-of-type(3):checked ~ ul > li:nth-child(3) > label {
      cursor: default;
      color: #428BFF;
    }
     
    .tabs input[name="tab-control"]:nth-of-type(3):checked ~ ul > li:nth-child(3) > label svg { fill: #428BFF; }
    @media (max-width: 600px) {
     
    .tabs input[name="tab-control"]:nth-of-type(3):checked ~ ul > li:nth-child(3) > label { background: rgba(0, 0, 0, 0.08); }
    }
     
    .tabs input[name="tab-control"]:nth-of-type(3):checked ~ .slider {
      -webkit-transform: translateX(200%);
      transform: translateX(200%);
    }
     
    .tabs input[name="tab-control"]:nth-of-type(3):checked ~ .content > section:nth-child(3) { display: block; }
     
    .tabs input[name="tab-control"]:nth-of-type(4):checked ~ ul > li:nth-child(4) > label {
      cursor: default;
      color: #428BFF;
    }
     
    .tabs input[name="tab-control"]:nth-of-type(4):checked ~ ul > li:nth-child(4) > label svg { fill: #428BFF; }
    @media (max-width: 600px) {
     
    .tabs input[name="tab-control"]:nth-of-type(4):checked ~ ul > li:nth-child(4) > label { background: rgba(0, 0, 0, 0.08); }
    }
     
    .tabs input[name="tab-control"]:nth-of-type(4):checked ~ .slider {
      -webkit-transform: translateX(300%);
      transform: translateX(300%);
    }
     
    .tabs input[name="tab-control"]:nth-of-type(4):checked ~ .content > section:nth-child(4) { display: block; }
    @-webkit-keyframes 
    content {  from {
     opacity: 0;
     -webkit-transform: translateY(5%);
     transform: translateY(5%);
    }
     
    to {
      opacity: 1;
      -webkit-transform: translateY(0%);
      transform: translateY(0%);
    }
    }
    @keyframes 
    content {  from {
     opacity: 0;
     -webkit-transform: translateY(5%);
     transform: translateY(5%);
    }
     
    to {
      opacity: 1;
      -webkit-transform: translateY(0%);
      transform: translateY(0%);
    }
    }
    @media (max-width: 1000px) {
     
    .tabs ul li label { white-space: initial; }
     
    .tabs ul li label br { display: initial; }
     
    .tabs ul li label svg { height: 1.5em; }
    }
    @media (max-width: 600px) {
     
    .tabs ul li label {
      padding: 5px;
      border-radius: 5px;
    }
     
    .tabs ul li label span { display: none; }
     
    .tabs .slider { display: none; }
     
    .tabs .content { margin-top: 20px; }
     
    .tabs .content section h2 { display: block; }

    以上就是简约时尚的纯CSS3 Tabs选项卡特效的内容,更多相关内容请关注PHP中文网(m.sbmmt.com)!

    相关文章:

    微信小程序:如何实现tabs选项卡效果示例

    微信小程序 tabs选项卡效果的实现

    javascript实现tabs选项卡切换效果

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    上一篇:纯CSS3炫酷3D星空动画特效 下一篇:基于Bootstrap的垂直手风琴动画特效
    Web大前端开发直播班

    相关文章推荐

    • css3怎么改首字母颜色• web前端笔试题库之CSS篇• 聊聊如何用CSS box-shadow创建像素创意动画• 纯CSS实现水波纹的电池充电动画特效• 如何利用CSS来美化滑动输入条?自定义样式方法浅析

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网