我有下面的CSS和HTML。我有一个菜单,其中的列表是一个设置的高度和宽度,并有相对位置。它们中的链接绝对会占据所有可用空间,因此整个li都是可点击的。到目前一切尚好。
问题是链接文本的数量可能会有所不同。当链接文本换行到2行(例如第二个链接)时,我希望有较少的垂直填充。我会添加一个类到第二个链接,除了解决方案需要是动态的和使用javascript。菜单可能会改变,以便第一个链接有更多的文本和换行到2行,在这种情况下,我将需要删除它的垂直填充也。我需要这在不需要更改代码的情况下发生。
我开始研究jQuery的解决方案。我试着测量链接的高度,如果它高于'x‘,那么我可以添加删除垂直填充的类。然而,这不会工作,因为高度是由绝对位置设置的。
有没有其他方法来衡量文本是否换行到2行?我可以计算字符的数量,但这似乎是可靠的,因为一些字符比其他字符占用更多的宽度。
如果我在包含文本的链接中添加一个跨度,会起作用吗?那么,假设链接仍然可以绝对定位,它的跨度可以测量其高度?
http://jsfiddle.net/cUQbJ/3/
<li>
<a href="#">Link1</a>
</li>
<li>
<a href="#">Link 2 with long text</a>
</li>
<li>
<a href="#">Link3</a>
</li>
li {
display: block;
float: left;
position: relative;
text-align: center;
width: 83px;
min-height: 53px;
background-color: grey;
margin-right: 5px;
}
a {
padding-top: 13px;
position: absolute;
top: 0;
bottom: 0;
right: 0;
left:0;
}
更新-我需要支持IE7。
发布于 2013-02-26 19:30:03
我使用jQuery在链接文本周围插入一个跨度,从而解决了这个问题。然后,jQuery测量跨度的高度,并在需要时对其li应用填充。
从响应性的角度来看,这可能不是最好的解决方案,如果用户调整了浏览器的大小,但它对我来说是有效的,这只是一个样式问题,所以如果它出了一点问题,也不是世界末日。
发布于 2013-02-19 19:54:04
这里不需要使用任何JS。
让我们稍微修改一下HTML结构。我将链接内容包装在span
中。我们将垂直对齐这些跨度,而不是a
标记。
<li>
<a href="#" class="valign"><span class="valigned">Link 2 with long text</span></a>
</li>
http://jsfiddle.net/cUQbJ/5/
我将主CSS抽象为两个独立的类.valign
(父类)和.valigned
(需要居中)。
https://stackoverflow.com/questions/14956536
复制相似问题