我希望能够在悬停时使用border-bottom定位CSS中的文本链接, 但是所有链接都是图像在悬停时没有边框。所以:
<a href="#"><img src="image.png" /></a> ==> this should not have a bottom-border on hover
<a href="#">regular text link</a> ==> this should have a bottom-border on hover
我试过这个CSS:
#sidebar a:hover {
border-bottom: 1px dotted red;
}
#sidebar a:hover img {
border-bottom: none;
}
但这不起作用......我认为锚必须是目标而不是图像。我一直在谷歌周围寻找,似乎没有人知道如何做到这一点,除非通过使用特定的类或id定位图像链接,或使用display:block。
但是,我不能使用这些解决方案,因为内容在CMS中,所以我不希望用户必须为他们插入的每个图像分配一个类。并且display:block将无法工作,因为我不知道这是否适合用户想要显示的每个图像。
最后,我希望能够在纯CSS(没有Javascript)中执行此操作。也许没有办法......但是你们的任何帮助或想法都将不胜感激!
答案 0 :(得分:5)
就JavaScript而言,我建议使用jQuery将类添加到包含图片的所有链接中:
$('#sidebar a:has(img)').addClass('image-link');
(:has
选择器是一个jQuery的东西;它不存在于CSS中。)
然后相应地调整样式表。
#sidebar a:hover {
border-bottom: 1px dotted red;
}
#sidebar a.image-link:hover {
border-bottom: none;
}
答案 1 :(得分:4)
您无法根据元素的子元素来定位元素,因此您必须在代码中添加一些内容以定位不同的链接。
你不能使用下划线而不是底边框吗?这将适用于它应用于链接中的文本而不是链接元素本身。
#sidebar a:hover { text-decoration: underline; }
#sidebar a:hover img { text-decoration: none; }
答案 2 :(得分:3)
对不起,你想要的是某种:父伪类,它选择了孩子,但是适用于父母,遗憾的是不存在(甚至不在CSS3中)。
你必须做一些Javascript,选择匹配 #sidebar a:hover 的所有元素,然后在没有子IMG元素的条件下应用红色底边框
答案 3 :(得分:3)
这可能有效
a img {position:relative; top: Npx}, where N is the hover border thickness
这会使图像覆盖边框,尽管它会向下移动一个像素左右。
答案 4 :(得分:2)
尝试这个技巧。它有效。
a { text-decoration:none; border-bottom:2px solid; }
a img { border:none; vertical-align:top; }
另一种方式 - PHP:
$text = preg_replace('#<a(.*?)<img(.*?)/>(.*?)</a>#is', "<a class='imgshow' \\1 <img\\2 />\\3</a>", $text);
答案 5 :(得分:2)
使用a:not(img) a:hover {style:whatever;}
可以使用css3,但有一些注意事项。以下是图片说明:http://nerdinprogress.blogspot.com/2010/11/target-text-links-but-not-images-with.html
答案 6 :(得分:1)
简单的方法是使用
:hover (text-decoration: underline}
另见
text-underline-position
答案 7 :(得分:0)
在没有添加新标签的情况下,纯CSS无法实现这一点。 为了使用纯CSS / HTML执行此操作,您需要在图像的[a href]链接中添加标记..或者将标记添加到要用下划线显示的[a hrer]链接。 / p>
你可以在javascript中编写一小段代码,它可以很容易地改变悬停元素的border属性。您只需要检查该元素是否为IMG。
答案 8 :(得分:0)
这实际上似乎是一个相当困难的问题。您是否有能力更改CMS的代码?如果您可以执行诸如在链接内的任何文本周围包裹<span>
之类的内容(并将图像保留在其外部),这将变得很容易。然后你所要做的就是将#sidebar a:hover span
定位到边界。
如果您无法更改代码,我不确定这是否可行。我当然不能想出任何东西。