【发布时间】:2014-01-18 00:04:17
【问题描述】:
所以我有一个由我的 CMS 生成的导航菜单:
菜单的 HTML 很简单(为清晰起见进行了编辑):
<ul>
<li><a href="...">Journal</a></li>
<li><a href="...">Art</a></li>
<li><a href="...">Work</a></li>
</ul>
我希望项目显示为手写文本,以符合网站的总体主题,为每个菜单项使用单独的 PNG 文件。
为此,我使用了 CSS content 属性,如下所示:
#headerNav .nav li a[href="/_site/en/journal/"]
{ content: url(/path/to/image.png); }
而且效果很好!每个项目的 HTML 文本已替换为正确的图像:
但是,唉,后来我了解到并不是每个浏览器都支持 :before 和 :after 以外的选择器上的 content 属性! Chrome 和 Safari 会这样做,但 Firefox 不会。但是当我使用 :before 时,HTML 节点并没有被替换,而是添加了图像:
我该如何解决这个问题?
什么没用:
- 制作
<a>元素display: none也删除了:before部分。 - 创建
<a>元素position: absolute并将其移至其他位置也行不通。 - 制作
<a>元素width: 0px搞砸了布局,因为通过content添加的图像不在文档流中。
我不想做的事:
当然我可以手动输出图像,但我想使用 CMS 提供给我的 HTML,即
<li>s,其中包含文本。任何涉及
background-image的解决方案都需要我在样式表中指定每个项目的宽度和高度,出于本问题的目的,我想避免这样做。无法将手写内容转换为字体。
使用 JavaScript 动态替换项目不是一种选择。这需要使用纯 HTML 和 CSS。
【问题讨论】:
-
@Blazemonger 没有一个例子都是绿色的
-
@Blazemonger 要使用它们中的任何一个,我必须在样式表中手动为每个项目指定宽度和高度,我想避免这种情况 - 这就是我使用
content的原因首先。 (不过,这是一个公平的妥协,如果没有其他问题,谢谢提醒。) -
@mplungjan 该页面也有多年历史了。当时还没有现代浏览器。最后一个示例 here 在 HTML5Boilerplate 中使用到 2012 年 12 月。
-
我不认为有 any 方法可以在不指定尺寸的情况下进行 CSS 图像替换,除非可能使用
:before或:after。
标签: html css css-content