Giter Site home page Giter Site logo

amirhkhadem / vue-tabs-with-active-line Goto Github PK

View Code? Open in Web Editor NEW

This project forked from karambafe/vue-tabs-with-active-line

1.0 0.0 0.0 353 KB

Simple Vue 2 component, that allows you to make tabs with moving bottom line

Home Page: https://karambafe.github.io/vue-tabs-with-active-line/

License: MIT License

JavaScript 64.49% Vue 29.89% HTML 5.62%

vue-tabs-with-active-line's Introduction

Vue-tabs-with-active-line

Simple Vue 2 component, that allows you to make tabs with moving bottom line

Alt Text

Build Status Coverage Status npm npm npm David

Demo and example

Live demo to play with: Demo-link

Code from the demo: Default-example Disabled-example

Install

via NPM

npm install vue-tabs-with-active-line --save

Usage

Import the component

import Tabs from 'vue-tabs-with-active-line';

Define the data for props tabs, currentTab, and method for onClick callback

export default {
  components: {
    Tabs,
  },
  data: () => ({
    tabs: [
      { title: 'Tab 1', value: 'tab1' },
      { title: 'Tab 2', value: 'tab2' },
      { title: 'Tab 3', value: 'tab3', }
    ],
    currentTab: 'tab1',
  }),
  methods: {
    handleClick(newTab) {
      this.currentTab = newTab;
    },
  },
}
</script>

here's the HTML structure generated from the data entered:

  <nav class="tabs">
    <button class="tabs__item tabs__item_active"> Tab 1 </button> <!-- active tab -->
    <button class="tabs__item"> Tab 2 </button>
    <button class="tabs__item"> Tab 3 </button>

    <div class="tabs__active-line"></div>
  </nav>

Finally, add some styles for component elements:

  • .tabs - component wrapper
  • .tabs__item - button
  • .tabs__item_active - active button
  • .tabs__active-line - bottom line

Be sure to add position: relative; for .tabs class

and position: absolute; with bottom, left, height, background-color properties for .tabs__active-line class

Below you'll find basic style in CSS and SCSS
CSS EXAMPLE
.tabs {
  position: relative;
  margin: 0 auto;
}

.tabs__item {
  display: inline-block;
  margin: 0 5px;
  padding: 10px;
  padding-bottom: 8px;
  font-size: 16px;
  letter-spacing: 0.8px;
  color: gray;
  text-decoration: none;
  border: none;
  background-color: transparent;
  border-bottom: 2px solid transparent;
  cursor: pointer;
  transition: all 0.25s;
}

.tabs__item_active {
  color: black;
}

.tabs__item:hover {
  border-bottom: 2px solid gray;
  color: black;
}

.tabs__item:focus {
  outline: none;
  border-bottom: 2px solid gray;
  color: black;
}

.tabs__item:first-child {
  margin-left: 0;
}

.tabs__item:last-child {
  margin-right: 0;
}

.tabs__active-line {
  position: absolute;
  bottom: 0;
  left: 0;
  height: 2px;
  background-color: black;
  transition: transform 0.4s ease, width 0.4s ease;
}
SCSS Example
.tabs {
  position: relative;
  margin: 0 auto;

  &__active-line {
    position: absolute;
    bottom: 0;
    left: 0;
    height: 2px;
    background-color: black;
    transition: transform 0.4s ease, width 0.4s ease;
  }

  &__item {
    display: inline-block;
    margin: 0 5px;
    padding: 10px;
    padding-bottom: 8px;
    font-size: 16px;
    letter-spacing: 0.8px;
    color: gray;
    text-decoration: none;
    border: none;
    background-color: transparent;
    border-bottom: 2px solid transparent;
    cursor: pointer;
    transition: all 0.25s;

    &_active {
      color: black;
    }

    &:hover {
      border-bottom: 2px solid gray;
      color: black;
    }

    &:focus {
      outline: none;
      border-bottom: 2px solid gray;
      color: black;
    }

    &:first-child {
      margin-left: 0;
    }

    &:last-child {
      margin-right: 0;
    }
  }
}

Props

props type required description
tabs Array true description
currentTab String true Active tab value
onClick Function true Returns new tab value when clicked
updated Boolean/String/Array false Props for custom update active line
wrapperClass String false Custom class for container
tabClass String false Custom class for tab item
tabActiveClass String false Custom class for active tab item
lineClass String false Custom class for active line
tabs

type: Array, required: true

The array must contain objects with the following properties:

  • title - required, type string. Title of tab

  • value - required, type string. Value of tab

  • disabled - optional, type boolean. Disabled attribute

How to run it locally

  1. Clone repository: git clone [email protected]:karambafe/vue-tabs-with-active-line.git
  2. Install cli-service-global: npm install -g @vue/cli-service-global Vue CLI 3 docs
  3. Run any vue file with hot reload and static server: vue serve demo-src/App.vue

Contributing

  1. Fork it!
  2. Create your feature branch: git checkout -b my-new-feature
  3. Commit your changes: git commit -am 'Add some feature'
  4. Push to the branch: git push origin my-new-feature
  5. Submit a pull request :D

License

This project is licensed under the MIT license, Copyright (c) 2018 karambafe. For more information see LICENSE.

vue-tabs-with-active-line's People

Contributors

karambafe avatar mv92 avatar

Stargazers

Roman avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.