【发布时间】:2014-07-12 19:14:06
【问题描述】:
我正在使用 HTML map,我需要在其 area 上使用伪元素来显示徽章并相对定位它们。
编辑:我不能硬编码它的坐标,因为我要处理 HTML 中的很多我无法预测的区域,因为我的代码是从顶部注入的现有的 HTML。
这是我尝试的屏幕,以及我想做的事情:
Here's a fiddle(第一只小猫脸上的区域)
tl;dr :我可以实现这一点(根据偏好,仅在 CSS 中)?
我尝试了什么
问题,我已经看到 area 元素 & 需要设置为 display:none 才能工作,阻止我的伪元素显示。
所以,我把它做成了一个块,它在地图上仍然有它的位置(很好)并且我的伪元素出现了,但与该区域的实际坐标无关......
使用这个 CSS :
area{
display:block;
position:relative;
}
area::after{
display:block;
content:"10";
position:absolute;
left:0px;
top:0px;
text-align:center;
color:white;
width:20px;
height:20px;
background-color:red;
border-radius:20px;
border:1px solid red;
}
我试着摆弄边距,不同的定位,不同的显示,我还没有找到好的组合。
我想检索该区域的coords 以使用CSS3 的attr() 定位伪元素,但之后我无法拆分它的值。
我已经阅读了this question 关于使用外部(和旧的)jQuery 插件对area 进行样式设置,但它不能满足我的需求,而且我在网络上找不到任何线索。
有人有提示吗?我觉得我已经接近它了,但我的想法已经不多了。
【问题讨论】:
-
为什么不创建一个相对定位的 div(使用 z-index)而不是一个区域并在其上显示您的徽章?
-
问题在于
area是一个与img很相似的替换元素,所以你不能真正使用::before和::after伪元素。跨度> -
@vogomatix:大概是因为它没有语义。虽然是的,但图像地图通常很难用 CSS 设置样式,所以它可以作为最后的手段。
-
我忘了补充一点,我正在寻找最轻量级的解决方案,仅指 CSS。我可能会使用 JS 并为每个区域创建一个 div,提取区域的坐标并将其放在最后。我省略了一些重要的东西,我不能硬编码任何坐标,因为我要处理 HTML 中的很多我无法预测的区域,因为我的代码是从顶部注入的现有的 HTML。 (见编辑)
标签: html css pseudo-element