想知道是否有可能通过CSS的content
属性在一个元素的:before
或:after
伪元素中插入HTML代码而不是字符串,类似于:
.header:before{
content: '<a href="#top">Back</a>';
}
这将非常方便...虽然可以通过JavaScript实现,但使用CSS确实会使生活更轻松 :)
想知道是否有可能通过CSS的content
属性在一个元素的:before
或:after
伪元素中插入HTML代码而不是字符串,类似于:
.header:before{
content: '<a href="#top">Back</a>';
}
这将非常方便...虽然可以通过JavaScript实现,但使用CSS确实会使生活更轻松 :)
换句话说,对于字符串值,这意味着该值始终被视为文字。无论使用哪种文档语言,它都不会被解释为标记。生成的内容不会改变文档树。特别地,它不会被反馈给文档语言处理器(例如,用于重新解析)。
<h1 class="header">Title</h1>
...将导致以下输出:
url
属性的图片,从这个角度来看添加链接并没有那么不同。 - zanona<img>
),它们只是被绘制在现有元素上,所以应用背景或列表图片并不会真正修改DOM。 - BoltClockurl()
指定外部文件,就像任何其他图像一样。 - BoltClock正如在 @BoltClock 的回答的评论中所提到的,在现代浏览器中,您实际上可以使用 (url()
) 结合svg的<foreignObject>
元素,在伪元素中添加一些html标记。
您可以指定指向实际svg文件的URL,也可以创建一个dataURI版本(data:image/svg+xml; charset=utf8, + encodeURIComponent(yourSvgMarkup)
)
但请注意,这基本上是一种hack,并且有很多限制:
document.styleSheets
中编辑此dataURI。对于此部分,DOMParser
和 XMLSerializer
可以 帮助。<img>
标记中加载url编码的媒体,但这在伪元素中不起作用(至少到目前为止,我不知道是否有指定它不应该这样做的地方,因此它可能是一个尚未实现的功能)。现在,这里有一个小演示,展示了如何在一个伪元素中添加一些HTML标记:
/*
** original svg code :
*
*<svg width="200" height="60"
* xmlns="http://www.w3.org/2000/svg">
*
* <foreignObject width="100%" height="100%" x="0" y="0">
* <div xmlns="http://www.w3.org/1999/xhtml" style="color: blue">
* I am <pre>HTML</pre>
* </div>
* </foreignObject>
*</svg>
*
*/
#log::after {
content: url('data:image/svg+xml;%20charset=utf8,%20%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20height%3D%2260%22%20width%3D%22200%22%3E%0A%0A%20%20%3CforeignObject%20y%3D%220%22%20x%3D%220%22%20height%3D%22100%25%22%20width%3D%22100%25%22%3E%0A%09%3Cdiv%20style%3D%22color%3A%20blue%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxhtml%22%3E%0A%09%09I%20am%20%3Cpre%3EHTML%3C%2Fpre%3E%0A%09%3C%2Fdiv%3E%0A%20%20%3C%2FforeignObject%3E%0A%3C%2Fsvg%3E');
}
<p id="log">hi</p>
url('/relativePathToMySvg/mySvg.svg')
但它没有起作用。 - Frank/root/css/yourFile.css
中,则像yourFile.svg
这样的相对funcIRI
将指向/root/css/yourFile.svg/
。但是,我记得早期的UA存在一个错误,将其相对于文档的baseURI
。因此,最安全的方法就是使用绝对路径。 - Kaiidocontent: url('../../images/como-funciona.svg');
,它运行良好。 - Eliut Islasposition: running()
和content: element()
来实现这一点。@top-center {
content: element(heading);
}
.runner {
position: running(heading);
}
.runner可以是任何元素,heading
只是槽位的一个任意名称。
编辑:为了澄清,基本上没有浏览器支持,所以这主要是为了将来参考/补充已经给出的“实用答案”。
可能是因为这样会很容易受到XSS攻击。而且,目前可用的HTML过滤器不会禁止content
属性。
(这并不是最好的答案,但我只是想分享一些除了“按规范来说...”之外的见解)
.cssClass::after {
content: "Content and Words and Things";
color: #0000EE;
}
我将超链接的颜色改成了蓝色,这样看起来更像一个链接。
然后你需要添加一个href属性,在标签之间没有文本,但有一个可以引用的id或class。它可以放在任何位置,只要在同一页中即可。
<a id="link" href="#"></a>
a#link{
height: 20px;
width: 100%;
left: 0;
top: 5%;
position: absolute;
}