我有下面的CSS和HTML。我有一个菜单,其中lis是一个设置的高度和宽度,并具有相对位置。其中的链接绝对定位为占用所有可用空间,以便可以点击整个li。到目前为止一切都很好。
问题是链接文本的数量可能会有所不同。当链接文本包装到2行(例如第2个链接)时,我希望有更少的垂直填充。我会为第二个链接添加一个类,除了解决方案需要是动态的并使用javascript。菜单可能会更改,以便第一个链接包含更多文本并包装到2行,在这种情况下,我也需要删除其垂直填充。我需要这样做而不需要更改代码。
我开始研究使用jQuery的解决方案。我尝试测量链接的高度,所以如果它高于'x',那么我可以添加删除垂直填充的类。然而,这不会起作用,因为高度是由绝对定位设定的。
还有另一种方法可以测量文本是否包裹在2行上吗?我可以计算字符的数量,但这个看起来可靠,因为有些字符比其他字符占用更多的宽度。
如果我在包含文本的链接中添加了一个范围,它会起作用吗?那么可能链接仍然可以绝对定位,其跨度可以测量其高度?
<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。
答案 0 :(得分:1)
我通过使用jQuery在链接文本周围插入一个范围来解决这个问题。然后jQuery测量跨度的高度,并根据需要将填充应用于其li。
从响应的角度来看,这可能不是最好的解决方案,如果用户调整浏览器的大小,但它对我有用,这只是一个样式问题,所以如果它有点错误,那么世界末日就不会这样。
答案 1 :(得分:0)
这里不需要使用任何JS。
让我们稍微修改一下HTML结构。我在span
中包含了链接内容。我们将垂直对齐这些跨度而不是a
标记。
<li>
<a href="#" class="valign"><span class="valigned">Link 2 with long text</span></a>
</li>
我抽象了主要的CSS,它将这个技巧分成两个独立的类.valign
(对于父级)和.valigned
(需要居中的东西)。