【发布时间】:2016-05-03 16:07:13
【问题描述】:
我正在尝试创建一个水平导航栏,其中每个菜单选项的标题下方都有一个图标。当您将鼠标悬停在每个选项上时,该块的背景颜色会发生变化,并且大小会略有增加。我已经使用百分比调整了所有内容的大小。在我不得不垂直对齐菜单选项之前,这一切都在进行。列表高度是导航栏的 100%。为了垂直对齐每个选项,我将显示更改为 table/table-cell 而不是 inline-block 这有效,但是现在列表下方有一个薄空间,并且每个列表项不再占据导航高度的 100%悬停背景颜色效果。
Here 是显示导航栏外观的屏幕截图。我已将列表背景设为粉红色以清楚地显示问题,但通常没有颜色,只留下绿色背景。悬停在“学习”按钮上的蓝色框应该像我更改显示之前一样延伸到导航栏的边缘。
Here 是一个屏幕截图,显示了将 li 显示设置为 inline-block 时的样子。这几乎正是我想要的,只是它不是垂直对齐的。
这是我的html的简化版(我去掉了标题和不相关的细节)
<nav class="nav_bar">
<span id="logo">
<a href="home.html"><img src="images/nav_bar/logo_img.png"></a>
<a href="home.html"><img src="images/nav_bar/logo_text.png"></a>
</span>
<ul class="nav_menu">
<li id="learn"><a href="learn.html">LEARN<br><img src="images/nav_bar/learn.png"></a></li
><li id="watch"><a href="watch.html">WATCH<br><img src="images/nav_bar/watch.png"></a></li
><li id="share"><a href="share.html">SHARE<br><img src="images/nav_bar/share.png"></a></li
><li id="more"><a href="more.html">MORE<br><img src="images/nav_bar/more.png"></a></li
><li id="active"><a href="home.html">HOME<br><img src="images/nav_bar/home.png"></a></li>
</ul>
</nav>
这是我的相关css
.nav_menu {
display: table;
position: absolute;
top: 0;
right: 0;
margin: 0;
padding: 0;
height: 100%;
width: 35%;
list-style-type: none;
}
.nav_menu img {
width: 70%;
}
.nav_menu li {
display: table-cell;
height: 100%;
width: 20%;
vertical-align: middle;
overflow: hidden;
}
.nav_menu a {
display: table-cell;
height: 100%;
width: 100%;
text-align: center;
font-size: 1.5vw;
text-decoration: none;
}
.nav_menu a:hover {
transform: scale(1.1);
}
#learn a:hover {
background-color: #69D1ED;
}
我也曾短暂尝试将图标用作列表背景图片,但将它们放置在文本下方时遇到了太多麻烦。
这是一个作业,所以我仅限于 html 和 css,它必须适用于 Chrome、Safari、Firefox、Internet Explorer 和 Opera。
【问题讨论】:
-
你试过 flexbox 了吗?
-
就像保持其他一切一样,只是去掉 .nav_menu 显示并将 .nav_menu li 显示更改为 inline-flex 并将 .nav_menu 显示更改为 flex?这就是我尝试过的,它最终将图像移动到文本的右侧并不成比例地将其缩放到 100% 高度
-
我现在正在研究 flexbox,它似乎可以工作,但我似乎无法正确处理。我进行了上一条评论中提到的更改,修复了彩色框和列表下的薄空间的问题。我摆脱了 vertical-aligned: middle 并添加了 content-align: center 到 .nav_menu a ,它的工作原理是一样的。然后我添加了 flex-wrap: wrap 来阻止图标向右移动。我现在唯一遇到的问题是图标缩放不成比例(宽度相同,高度是容器的 100%)并且内容不再水平居中。
-
justify-content: center 固定水平对齐,几乎就在那里
-
通过将宽度更改为 vw 值并将相同的 vw 设置为高度来修复缩放问题。感谢您的提示,现在一切正常:)