Tabs

<div class="tabs">
    <div class="tabs__tabs"><button class="tabs__tab tabs__tab--selected" data-id="tab-1" role="tab">News</button><button class="tabs__tab" data-id="tab-2" role="tab">Aus der Forschung</button></div>
    <div class="tabs__panels">
        <div class="tabs__panel" id="tab-1" role="tabpanel">
            <div class="placeholder placeholder--default">News</div>
        </div>
        <div class="tabs__panel tabs__panel--hidden" id="tab-2" role="tabpanel">
            <div class="placeholder placeholder--default">Aus der Forschung</div>
        </div>
    </div>
</div>
#{tag || 'div'}.tabs()&attributes(attr)

  //- Tabs
  .tabs__tabs
    each item in items
      button.tabs__tab(
        class=item.selected && 'tabs__tab--selected',
        data-id=item.id,
        role='tab',
      ) #{item.title}

  //- Panels
  .tabs__panels
    each item in items
      .tabs__panel(
          class=!item.selected && 'tabs__panel--hidden',
          id=item.id,
          role='tabpanel',
        )
        +include(`@${item.use}`, item.settings || {})
{
  "items": [
    {
      "selected": true,
      "id": "tab-1",
      "title": "News",
      "use": "placeholder",
      "settings": {
        "text": "News"
      }
    },
    {
      "id": "tab-2",
      "title": "Aus der Forschung",
      "use": "placeholder",
      "settings": {
        "text": "Aus der Forschung"
      }
    }
  ]
}
  • Content:
    document.querySelectorAll('.tabs').forEach((wrap) => {
      const tabClick = ({ target }) => {
        const { dataset: { id = '' } } = target;
        wrap.querySelectorAll('.tabs__tab').forEach(t => t.classList.remove('tabs__tab--selected'));
        target.classList.add('tabs__tab--selected');
        wrap.querySelectorAll('.tabs__panel').forEach(t => t.classList.add('tabs__panel--hidden'));
        wrap.querySelector(`#${id}`).classList.remove('tabs__panel--hidden');
      };
    
      const bindTabs = () => {
        wrap.querySelectorAll('.tabs__tab').forEach((tab) => {
          tab.addEventListener('click', tabClick);
        });
      };
    
      document.addEventListener('DOMContentLoaded', () => {
        bindTabs();
      });
    });
    
  • URL: /components/raw/tabs/tabs.js
  • Filesystem Path: src/components/molecules/tabs/tabs.js
  • Size: 688 Bytes
  • Content:
    .tabs__tabs {
      border-bottom: 1px solid $color-gray;
      display: flex;
      flex-wrap: nowrap;
      opacity: 1;
      -webkit-overflow-scrolling: touch;
      -ms-overflow-style: none;
      overflow-x: auto;
      pointer-events: all;
      scrollbar-width: none;
      width: 100%;
    
      &::-webkit-scrollbar {
        display: none;
      }
    }
    
    .tabs__tab {
      border-bottom: 6px solid transparent;
      color: $color-gray;
      display: inline-block;
      font-family: $font-family-secondary;
      font-size: 2.8rem;
      font-weight: $font-weight-bold;
      letter-spacing: -0.1rem;
      line-height: calc(3.2 / 2.8);
      padding-bottom: 0.8rem;
      transition: color 0.2s;
      white-space: nowrap;
    
      @media(hover: hover) and (pointer: fine) {
        &:hover {
          color: $color-dark;
        }
      }
    
      &:not(:first-child) {
        margin-left: 2.5rem;
    
        @include mq($from: m) {
          margin-left: 4rem;
        }
      }
    
      @include mq($from: m) {
        font-size: 3.2rem;
        letter-spacing: -0.125rem;
        line-height: calc(3.6 / 3.2);
      }
    
      @include mq($from: l) {
        font-size: 3.8rem;
        letter-spacing: -0.15rem;
        line-height: calc(4.3 / 3.8);
      }
    }
    
    .tabs__tab--selected {
      border-bottom: 6px solid $color-dark;
      color: $color-dark;
    }
    
    .tabs__panels {
      @include clearfix();
    }
    
    .tabs__panel {
      padding-top: 3.5rem;
      width: 100%;
    
      @include mq($from: m) {
        padding-top: 4rem;
      }
    }
    
    .tabs__panel--hidden {
      height: 0;
      opacity: 0;
      padding-top: 0;
      pointer-events: none;
    }
    
  • URL: /components/raw/tabs/tabs.scss
  • Filesystem Path: src/components/molecules/tabs/tabs.scss
  • Size: 1.4 KB

There are no notes for this item.