问题
I'm trying to get an underline to work on hover
on a vertical nav
made with flexbox
. On a horizontal nav
without flexbox
the hover
underline works fine, but as soon as flexbox
is added the underline spans the entire box rather than just under the text.
See how in the first snippet below it works as intended but as soon as I make main_nav
vertical with flexbox
in the second snippet the underline breaks.
How can I fix this so it underlines correctly while keeping the nav
vertical?
#wrapper {
width: 100%;
height: 300px;
background-color: black;
}
#wrapper #main_nav {
//display: flex;
//flex-direction: column;
}
.nav_item {
text-decoration: none;
color: white;
display: inline-block
}
.nav_item:after {
display: block;
content: '';
width: 0;
height: 2px;
background-color: white;
}
.nav_item:hover:after {
width: 100%;
transition: width 150ms ease-in;
}
<div id="wrapper">
<nav id="main_nav">
<a href="#" class="nav_item">Item1</a>
<a href="#" class="nav_item">Item2</a>
<a href="#" class="nav_item">Item3</a>
<a href="#" class="nav_item">Item4</a>
</nav>
</div>
#wrapper {
width: 100%;
height: 300px;
background-color: black;
}
#wrapper #main_nav {
display: flex;
flex-direction: column;
}
.nav_item {
text-decoration: none;
color: white;
display: inline-block
}
.nav_item:after {
display: block;
content: '';
width: 0;
height: 2px;
background-color: white;
}
.nav_item:hover:after {
width: 100%;
transition: width 150ms ease-in;
}
<div id="wrapper">
<nav id="main_nav">
<a href="#" class="nav_item">Item1</a>
<a href="#" class="nav_item">Item2</a>
<a href="#" class="nav_item">Item3</a>
<a href="#" class="nav_item">Item4</a>
</nav>
</div>
回答1:
Use display: inline-flex;
instead of display:flex;
, which is block-level.
回答2:
By default, flexbox stretch
the items.
For flex-direction: column
configuration, you have to add align-items: flex-start
to fix it.
#wrapper #main_nav {
display: flex;
flex-direction: column;
align-items: flex-start;
}
来源:https://stackoverflow.com/questions/54562660/hover-underlining-only-text-within-a-flexbox