Li:hover 屏幕调整大小时未包含整个菜单按钮
Li:hover not encompassing entire menu button on screen resize
所以我似乎对悬停功能有疑问。当我的屏幕是全尺寸时,我可以将鼠标悬停在菜单选项上,整个背景颜色都会改变。但是,当我调整屏幕大小时,只有一部分背景颜色发生变化。我在屏幕调整大小时看到了这个:
这是HTML代码
<nav>
<ul>
<li><a href="index.html" class="currentlink">Home</a></li>
<li><a href="gettingstarted.html">Getting Started</a></li>
<li><a href="surviveandthrive.html">How Do Plants Thrive?</a></li>
<li><a href="problems.html">Common Problems</a></li>
<li><a href="indoorplants.html">Great Indoor Plants</a></li>
<li><a href="references.html">References</a></li>
</ul>
<nav>
和 css
nav {
width: 100%;
background: #003300;
border: 1px solid #ccc;
border-right: none;
}
nav ul {
overflow: hidden;
margin: 0;
padding: 0;
}
nav ul li {
list-style: none;
float: left;
text-align: center;
border-left: .5% solid #fff;
border-right: .5% solid #ccc;
width: 16.6667%; /* fallback for non-calc() browsers */
width: calc(100% / 6);
box-sizing: border-box;
}
nav ul li:first-child {
border-left: none;
}
nav ul li a {
display: block;
text-decoration: none;
color: white;
padding: 10px 0;
}
nav ul li a:hover {
background-color: #00b300;
width:100%;
}
.currentlink {
background: #00b300;
}
在此先感谢您提供的任何帮助!
这是因为您的第三个 a
文本换行。
正如@dmitry 所建议的,我也会选择 flexbox。让我们做一些修改。
首先,我们需要 box-sizing: border-box
我们的元素及其子元素
*, *:before, *:after {
box-sizing: inherit;
}
html {
box-sizing: border-box;
}
接下来我们希望 nav
和 ul
为 wull 宽度,我们将 display: flex;
应用到最后一个
nav {
width: 100%;
}
nav ul {
display: flex;
align-items: center;
width: 100%;
}
最后,我们需要 a
覆盖整个高度;
nav ul li a {
height: 100%;
}
看看这个 fiddle。
通过测试您的代码,问题似乎出在您的列表项根据其内容分配高度。因此,当您调整 window 大小时,强制将一个或多个列表项中的文本换行,具有换行文本的列表项会比具有较少或没有换行文本的列表项长得更高。
一种可能的解决方案是使用 CSS' flex
样式,具体取决于您希望如何设置导航样式。对于您的 CSS,请尝试以下操作:
nav {
border: 1px solid #ccc;
border-right: none;
}
nav ul {
background: #003300;
display: -moz-box;
display: -ms-flexbox;
display: -webkit-box;
display: -webkit-flex;
display: flex;
justify-content: space-around;
list-style: none;
margin: 0;
padding: 0;
-webkit-flex-flow: row wrap;
}
nav ul li {
border-left: .5% solid #fff;
border-right: .5% solid #ccc;
box-sizing: border-box;
font-weight: bold;
padding: 5px;
text-align: center;
width: 16.6667%;
/* fallback for non-calc() browsers */
width: calc(100% / 6);
}
nav ul li:first-child {
border-left: none;
}
nav ul li:hover {
background-color: #00b300;
}
nav ul li a {
color: white;
text-decoration: none;
}
.currentlink {
background: #00b300;
}
对于您的 HTML,因为我们无法为 <a>
指定高度,请将 class="currentLink"
移至 <a>
的父级 <li>
所以它看起来像下面这样:
<li class="currentlink"><a href="index.html">Home</a></li>
要查看所有操作,请查看此 jsfiddle。
所以我似乎对悬停功能有疑问。当我的屏幕是全尺寸时,我可以将鼠标悬停在菜单选项上,整个背景颜色都会改变。但是,当我调整屏幕大小时,只有一部分背景颜色发生变化。我在屏幕调整大小时看到了这个:
这是HTML代码
<nav>
<ul>
<li><a href="index.html" class="currentlink">Home</a></li>
<li><a href="gettingstarted.html">Getting Started</a></li>
<li><a href="surviveandthrive.html">How Do Plants Thrive?</a></li>
<li><a href="problems.html">Common Problems</a></li>
<li><a href="indoorplants.html">Great Indoor Plants</a></li>
<li><a href="references.html">References</a></li>
</ul>
<nav>
和 css
nav {
width: 100%;
background: #003300;
border: 1px solid #ccc;
border-right: none;
}
nav ul {
overflow: hidden;
margin: 0;
padding: 0;
}
nav ul li {
list-style: none;
float: left;
text-align: center;
border-left: .5% solid #fff;
border-right: .5% solid #ccc;
width: 16.6667%; /* fallback for non-calc() browsers */
width: calc(100% / 6);
box-sizing: border-box;
}
nav ul li:first-child {
border-left: none;
}
nav ul li a {
display: block;
text-decoration: none;
color: white;
padding: 10px 0;
}
nav ul li a:hover {
background-color: #00b300;
width:100%;
}
.currentlink {
background: #00b300;
}
在此先感谢您提供的任何帮助!
这是因为您的第三个 a
文本换行。
正如@dmitry 所建议的,我也会选择 flexbox。让我们做一些修改。
首先,我们需要 box-sizing: border-box
我们的元素及其子元素
*, *:before, *:after {
box-sizing: inherit;
}
html {
box-sizing: border-box;
}
接下来我们希望 nav
和 ul
为 wull 宽度,我们将 display: flex;
应用到最后一个
nav {
width: 100%;
}
nav ul {
display: flex;
align-items: center;
width: 100%;
}
最后,我们需要 a
覆盖整个高度;
nav ul li a {
height: 100%;
}
看看这个 fiddle。
通过测试您的代码,问题似乎出在您的列表项根据其内容分配高度。因此,当您调整 window 大小时,强制将一个或多个列表项中的文本换行,具有换行文本的列表项会比具有较少或没有换行文本的列表项长得更高。
一种可能的解决方案是使用 CSS' flex
样式,具体取决于您希望如何设置导航样式。对于您的 CSS,请尝试以下操作:
nav {
border: 1px solid #ccc;
border-right: none;
}
nav ul {
background: #003300;
display: -moz-box;
display: -ms-flexbox;
display: -webkit-box;
display: -webkit-flex;
display: flex;
justify-content: space-around;
list-style: none;
margin: 0;
padding: 0;
-webkit-flex-flow: row wrap;
}
nav ul li {
border-left: .5% solid #fff;
border-right: .5% solid #ccc;
box-sizing: border-box;
font-weight: bold;
padding: 5px;
text-align: center;
width: 16.6667%;
/* fallback for non-calc() browsers */
width: calc(100% / 6);
}
nav ul li:first-child {
border-left: none;
}
nav ul li:hover {
background-color: #00b300;
}
nav ul li a {
color: white;
text-decoration: none;
}
.currentlink {
background: #00b300;
}
对于您的 HTML,因为我们无法为 <a>
指定高度,请将 class="currentLink"
移至 <a>
的父级 <li>
所以它看起来像下面这样:
<li class="currentlink"><a href="index.html">Home</a></li>
要查看所有操作,请查看此 jsfiddle。