我正在尝试学习HTML5 / CSS3,但我一直在努力创建一个导航栏,以链接到我页面上其他部分的链接。我从找到的教程中改编了代码,它可以工作,但仅当以1080p分辨率查看时,如果宽度较小,则该条会换行。
无论用户使用什么分辨率,如何确保导航栏仅占用一行(缩小以适应)?
这是我的导航栏的CSS代码。请注意,在导航下,我将宽度设置为33.3%,并将填充设置为相同,以使按钮居中。我不知道这是不是原因。
nav {
display:block;
position: absolute;
left:0;
white-space:nowrap;
margin: 0 auto;
width: 33.3%;
background-color:#ff6600;
padding-left: 33.3%;
padding-right: 33.3%;
}
nav ul {
margin: 0 auto;
width: 100%;
list-style: none;
display: inline;
white-space:nowrap;
}
nav ul li {
float: left;
position: relative;
white-space:nowrap;
}
nav ul li a {
display: block;
margin: 0 auto;
width: 150px;
font-size: 16px;
font-family: century gothic;
line-height: 44px;
text-align: center;
text-decoration: none;
color:#575757;
white-space:nowrap;
}
nav ul ul {
width: 200px;
position:absolute;
top:-99999px;
left:0;
opacity: 0;
-webkit-transition: opacity .4s ease-in-out;
-moz-transition: opacity .4s ease-in-out;
-o-transition: opacity .4s ease-in-out;
transition: opacity .4s ease-in-out;
z-index:497;
background:#333;
padding: 2px;
border:1px solid #444;
border-top:none;
box-shadow:#111 0 3px 4px;
}
nav ul ul li a {
display: block;
width: 200px;
text-align: left;
padding-left: 3px;
font-size: 14px;
}
nav ul li:hover>ul{
opacity: 1;
position:absolute;
top:98%;
left:0;
}
nav ul li a:hover {
color: #fff;
background-color: #cc3300
}
nav ul li.selected a {
color: #fff;
background-color: #cc3300;
}
您几乎正确地做到了。 CSS的问题是white-space: nowrap;
仅适用于inline
元素-但是您正在使用float
。即使将display: inline;
属性设置为此类元素,浮动元素也会变为块级(不会应用)。因此-如果您将浮标替换为display: inline-block;
-您的white-space
属性将起作用:)
这里有inline-block
和white-space
的实时示例:http://jsfiddle.net/skip405/wzgcH/
关于您的居中方法-有更好的解决方案。 (您可以删除padding
并设置适当的宽度),尤其是在使用嵌入式块时。只需将text-align: center;
设置在其parent上-即可将其居中。
问题是您将nav
宽度设置为仅33.3%,其余部分为填充。当调整大小超过某个点时,较小的允许空间会将所有元素推向彼此下方。要阻止这种情况的发生,您可以做两件事,将导航宽度设置为100%,其次,如果您根本不希望调整大小,则必须将其总和设为min-width
a
元素的宽度放在一起。除非您使用的是响应式设计,否则您也很可能也应该给它一个max-width
。这是我与修改后的CSS结合在一起的演示:http://jsfiddle.net/c3HE6/
这里的另一个不错的选择是,如果您不想浏览并更改导航栏中每个元素的显示属性,只需指定导航栏的样式以具有最小宽度即可。当您减小屏幕尺寸时,这可以防止自动换行。