我使用HTML列表和CSS创建了一个水平菜单。一切工作,它应该除了当你悬停在链接。您可以看到,我为链接创建了一个粗体悬浮状态,现在菜单链接因为粗体大小的差异而移动。

我遇到了和这篇SitePoint文章一样的问题。然而,这篇文章并没有合适的解决方案。我到处寻找解决办法,但没有找到。 我肯定不是唯一一个想这么做的人。

有人有什么想法吗?

附注:我不知道菜单项中文本的宽度,所以我不能只设置li项的宽度。

.nav { margin: 0; padding: 0; } .nav li { list-style: none; display: inline; border-left: #ffffff 1px solid; } .nav li a:link, .nav li a:visited { text-decoration: none; color: #000; margin-left: 8px; margin-right: 5px; } .nav li a:hover{ text-decoration: none; font-weight: bold; } .nav li.first { border: none; } <ul class="nav"> <li class="first"><a href="#">item 0</a></li> <li><a href="#">item 1</a></li> <li><a href="#">item 2</a></li> <li><a href="#">item 3</a></li> <li><a href="#">item 4</a></li> </ul>


当前回答

使用字母间距和文本阴影:

a {
  letter-spacing: .1em;
}

a:hover {
  text-shadow: 0 0 .9px #color, 0 0 .9px #color, 0 0 .9px #color;
}

其他回答

我使用文本阴影解决方案,其他一些提到这里:

text-shadow: 0 0 0.01px;

不同之处在于我没有指定阴影颜色,所以这个解决方案适用于所有字体颜色。

另一个想法是使用字母间距

Li, a{显示:inline-block;} 一个{ 字体大小:14 px; padding-left: 10 px; padding-right: 10 px; 字母间距:0.235 px } A:悬停,A:焦点{ 粗细:大胆的; 字母间距:0 } < ul > <li><a href="#">item 1</a></li> <li><a href="#">item 2</a></li> <li><a href="#">item 3</a></li> < / ul >

另一种方法是通过文本阴影“模拟”粗体文本。这有一个额外的好处(/malus,取决于你的情况),也适用于字体图标。

   nav li a:hover {
      text-decoration: none;
      text-shadow: 0 0 1px; /* "bold" */
   }

有点俗气,尽管它可以避免重复文本(如果文本很多,这很有用,就像我的情况一样)。

最好使用a::before而不是a::after,就像这样:

.breadcrumb { margin: 0; padding: 0; list-style: none; overflow: hidden; } .breadcrumb li, .breadcrumb li a { display: inline-block; } .breadcrumb li:not(:last-child)::after { content: '>'; /* or anything else */ display: inline-block; } .breadcrumb a:hover { font-weight: bold; } .breadcrumb a::before { display: block; content: attr(data-label); font-weight: bold; height: 0; overflow: hidden; visibility: hidden; } <ul class="breadcrumb"> <li><a data-label="one" href="https://www.google.fr/" target="_blank">one</a></li> <li><a data-label="two" href="https://duckduckgo.com/" target="_blank">two</a></li> <li><a data-label="three" href="#">three</a></li> </ul>

详情请访问:https://jsfiddle.net/r25foavy/

如果您不能设置宽度,那么这意味着宽度将随着文本变得粗体而改变。除了修改每个状态的填充/边距之类的妥协,没有办法避免这种情况。