Skip to content

Instantly share code, notes, and snippets.

@CodeMyUI
Last active June 7, 2022 20:41
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save CodeMyUI/15446fe20c68041a002f5f259e3b04cf to your computer and use it in GitHub Desktop.
Save CodeMyUI/15446fe20c68041a002f5f259e3b04cf to your computer and use it in GitHub Desktop.
Fluid tab active state
<nav>
<ul>
<li class="active"><a href="">First</a></li>
<li><a href="">Second</a></li>
<li><a href="">Third</a></li>
</ul>
</nav>
var nav = $('nav');
var line = $('<div />').addClass('line');
line.appendTo(nav);
var active = nav.find('.active');
var pos = 0;
var wid = 0;
if(active.length) {
pos = active.position().left;
wid = active.width();
line.css({
left: pos,
width: wid
});
}
nav.find('ul li a').click(function(e) {
e.preventDefault();
if(!$(this).parent().hasClass('active') && !nav.hasClass('animate')) {
nav.addClass('animate');
var _this = $(this);
nav.find('ul li').removeClass('active');
var position = _this.parent().position();
var width = _this.parent().width();
if(position.left >= pos) {
line.animate({
width: ((position.left - pos) + width)
}, 300, function() {
line.animate({
width: width,
left: position.left
}, 150, function() {
nav.removeClass('animate');
});
_this.parent().addClass('active');
});
} else {
line.animate({
left: position.left,
width: ((pos - position.left) + wid)
}, 300, function() {
line.animate({
width: width
}, 150, function() {
nav.removeClass('animate');
});
_this.parent().addClass('active');
});
}
pos = position.left;
wid = width;
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
*
box-sizing: border-box
body
background: #1A1E23
font-family: 'Lato', sans-serif
-webkit-font-smoothing: antialiased
nav
position: relative
padding-bottom: 12px
.line
height: 2px
position: absolute
bottom: 0
margin: 10px 0 0 0
background: #FF1847
ul
padding: 0
margin: 0
list-style: none
display: flex
li
margin: 0 40px 0 0
opacity: .4
transition: all 0.4s ease
&:hover
opacity: .7
&.active
opacity: 1
&:last-child
margin-right: 0
a
text-decoration: none
color: #fff
text-transform: uppercase
display: block
font-weight: 600
letter-spacing: .2em
font-size: 14px
//Center
body
display: flex
justify-content: center
align-items: center
min-height: 100vh
<link href="https://fonts.googleapis.com/css?family=Lato:300,400" rel="stylesheet" />
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment