bulma icon indicating copy to clipboard operation
bulma copied to clipboard

Add multiline feature for tabs

Open jabyess opened this issue 6 years ago • 10 comments

This is about Bulma.

Feature

Overview of the problem

This is about the Bulma CSS framework

I'm using Bulma version 0.6.0

My browser is: Chrome 61

Fairly sure this issue is not a duplicate

Description

I'd love to have some way to stack tabs vertically on mobile devices. Right now it overflows and scrolls horizontally, but ideally we would have a flag to set on the tabs parent container that stacks vertically.

What I did in the meantime is set .tabs ul to flex-direction: column and that works well enough, but it's not pretty and doesn't respect the fullwidth feature.

Not sure what the best way is to handle this.

Thanks!

jabyess avatar Oct 19 '17 21:10 jabyess

@jabyess How do you add the content to the tab? the documentation only had the tab links:

<div class="tabs">
  <ul>
    <li class="is-active"><a>Pictures</a></li>
    <li><a>Music</a></li>
    <li><a>Videos</a></li>
    <li><a>Documents</a></li>
  </ul>
</div>

Where to put the content?

mav1283 avatar May 29 '18 06:05 mav1283

@mav1283 you can put them wherever you want. Bulma doesn't care, since it's just css/sass, there's no functionality included.

I just created a container with multiple content elements below the tabs. the elements each have an ID, and the tabs have a data attribute pointing to the appropriate ID. Very similar to how bootstrap does it.

jabyess avatar May 29 '18 15:05 jabyess

If anyone stumbles across this issue looking for a responsive solution:

@include mobile {
  .tabs ul {
    flex-direction: column;

    li {
      width: 100%;
    }
  }
}

stephendolan avatar May 31 '18 20:05 stephendolan

Any way to have two tabs in row?

edit: Found solution

.tabs ul {width:100%;flex-direction:row;flex-wrap:wrap;}
.tabs li {width:50%}

tevart avatar Aug 24 '18 11:08 tevart

If any one stumbled across this issue looking for vertical tabs:

<div class="tabs">
  <ul>
    <li>Tab 1</li>
    <li>Tab 2</li>
    <li>Tab 3</li>
  </ul>
</div>
<div class="tabs-content">
    <div>Tab 1 content</div>
    <div>Tab 2 content</div>
    <div>Tab 3 content</div>
</div>

.tabs{
    float: left;
}
.tabs ul{
    -webkit-flex-direction: column;
    flex-direction: column;
}

This will display tabs on the left side and the tab content on the right. Not an optimal solution but works for some one who have too many tabs.

srinathreddydudi avatar Feb 07 '19 01:02 srinathreddydudi

I'm surprised that this hasn't been implemented in 2019~

GopherJ avatar Jun 22 '19 15:06 GopherJ

Multiline tabs:

.tabs ul {
	flex-shrink: 1;
	flex-wrap: wrap;
	border-bottom-color: transparent;
}

The border-bottom-color rule removes the long hanging line on the last row of tabs.

IlyaSemenov avatar Aug 08 '19 11:08 IlyaSemenov

Anyone coming across this. The above solutions don't really address the border radius.

@media screen and (max-width: 768px)  {
      .tabs.is-toggle ul {
        flex-direction: column;
        li {
          width: 100%;
          &:not(:last-child) a {
            border-bottom-color: transparent;
          }
          &:first-child a {
            border-radius: 4px 4px 0 0;
          }
          &:last-child a {
            border-radius: 0 0 4px 4px;
          }
        }
      }
    }

moladukes avatar Feb 07 '20 15:02 moladukes

Multiline tabs:

.tabs ul {
	flex-shrink: 1;
	flex-wrap: wrap;
	border-bottom-color: transparent;
}

The border-bottom-color rule removes the long hanging line on the last row of tabs.

Simple and effective, thanks a lot!

ownchoice avatar Jul 17 '20 00:07 ownchoice

If anyone stumbles across this issue looking for a responsive solution:

@include mobile {
  .tabs ul {
    flex-direction: column;

    li {
      width: 100%;
    }
  }
}

@stephendolan solution worked best for me, and with @moladukes comment, my end result was this:

@include mobile {
  .tabs ul {
    flex-direction: column;

    li {
      width: 100%;

      a {
        border-radius: 4px;
      }
    }
  }
}

EDIT 2022-06-16: Something I didn't think of was when using tabs with is-boxed class. It doesn't look pretty with this, and I also ended up keeping the way @moladukes solved the radius (to keep the items more merged). Result in the end:

@include mobile {
  .tabs:not(.is-boxed) {
    ul {
      flex-direction: column;

      li {
        width: 100%;
      }
    }

    &.is-toggle {
      li {
        &:not(:last-child) a {
          border-bottom-color: transparent;
        }

        &:first-child a {
          border-radius: 4px 4px 0 0;
        }

        &:last-child a {
          border-radius: 0 0 4px 4px;
        }
      }
    }
  }
}

Alexander-Jordan avatar Dec 12 '21 12:12 Alexander-Jordan