我有一排均匀分布的导航项,如下所示:
当前选择的菜单项为粗体。设计师希望其他人在悬停时变为粗体斜体。当发生这种情况时,它会使该项目的文本更宽,这会使所有其他项目轻推,因为它们以固定边距内联显示。我必须摆脱轻推。
解决此问题的正确方法是什么?我有几个想法使用javascript:
这两个看起来都有点hackish,这是一个非常简单的问题所以我认为必须有一个更简单的方法。
如果它有所作为,我正在使用jQuery。
以下是一个相当简洁的HTML页面,可以重现这个问题:
<head>
<style type="text/css">
body {
background: black;
font-family: sans-serif;
}
a {
margin: 0px 20px;
font-size: 16px;
color: white;
text-decoration: none;
}
a:hover {
font-weight: bold;
font-style: italic;
}
</style>
</head>
<body>
<a id="projectslink" href="#projects">Projects</a>
<a id="innovationslink" href="#innovations">Innovations</a>
<a id="newslink" href="#news">News</a>
<a id="aboutlink" href="#about">About</a>
<a id="contactlink" href="#contact">Contact</a>
<a id="breathlink" href="#">Breath*</a>
</body>
答案 0 :(得分:3)
我不认为这个古老的CSS问题有一个优雅的解决方案......我可以想到两个“hackish”CSS解决方案可供选择:
display: block-inline
和固定宽度(当然,在em
中),以防止字体缩放/缩放问题。如果填充看起来一致,宽度将因项目而异。在我看来,你的第一个解决方案(设置固定宽度onload
)并不是那么糟糕。 “感觉正确”不要惹恼position
而且至少比其他选择更加狡猾。
为了澄清,我将如何实施您的第一个解决方案:
HTML :无变化
CSS :无变化
<强>的JavaScript 强>:
$(function() {
$('a').each(function() {
var menuItem = $(this);
menuItem.css({
'display': 'inline-block',
'width': menuItem.outerWidth(true),
'margin': 0,
'text-align': 'center'
});
});
});
如你所见:
display: block-inline
); outerWidth()
(包括边距,填充和边框宽度),清除margin
并设置{,可以使每个单独的项目保持居中{1}}至text-align
。直播示例on JSFiddle。
答案 1 :(得分:2)
这是我的解决方案:
显然,您必须对其进行调整以使其适合您自己的代码。它使所有a
具有它们将通过暂时加粗文本然后用粗体加粗而使其变为粗体的宽度。不幸的是,我还必须使用hover
事件绑定器来实现鼠标效果,但也许你可以找到一种解决方法......
答案 2 :(得分:1)
答案 3 :(得分:0)
对于后人来说,这是我最终得到的解决方案:http://jsfiddle.net/jmcdon10/UdJZ5/
主要基于@ Max的答案(这本身就是我第一次提出的解决方案的改编),但使用css hover而不是jQuery的悬停事件绑定器。