只是想知道是否有可能以某种方式使 CSScontent
属性插入 html 代码而不是字符串:before
或:after
类似的元素:
.header:before{
content: '<a href="#top">Back</a>';
}
这将非常方便...可以通过 Javascript 完成,但使用 css 确实会让生活更轻松 :)
只是想知道是否有可能以某种方式使 CSScontent
属性插入 html 代码而不是字符串:before
或:after
类似的元素:
.header:before{
content: '<a href="#top">Back</a>';
}
这将非常方便...可以通过 Javascript 完成,但使用 css 确实会让生活更轻松 :)
不幸的是,这是不可能的。根据规范:
生成的内容不会改变文档树。特别是,它不会被反馈给文档语言处理器(例如,用于重新解析)。
换句话说,对于字符串值,这意味着该值总是按字面意思处理。无论使用何种文档语言,它都不会被解释为标记。
例如,将给定的 CSS 与以下 HTML 一起使用:
<h1 class="header">Title</h1>
...将导致以下输出:
正如@BoltClock 答案的评论中几乎指出的那样,在现代浏览器url()
中,您实际上可以使用 ( ) 与 svg 的元素相结合的方式向伪元素添加一些 html 标记<foreignObject>
。
您可以指定一个指向实际 svg 文件的 URL,也可以使用 dataURI 版本创建它 ( data:image/svg+xml; charset=utf8, + encodeURIComponent(yourSvgMarkup)
)
但请注意,这主要是一种 hack,并且有很多限制:
document.styleSheets
. 对于这部分,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>
在 CSS3 分页媒体中,这可以使用position: running()
和content: element()
。
来自CSS Generated Content for Paged Media Module草稿的示例:
@top-center {
content: element(heading);
}
.runner {
position: running(heading);
}
.runner 可以是任何元素,并且heading
是插槽的任意名称。
编辑:澄清一下,基本上没有浏览器支持,所以这主要是为了供将来参考/除了已经给出的“实用答案”之外。
这是不可能的,因为 XSS 很容易。此外,当前可用的 HTML 清理程序不允许使用content
属性。
(绝对不是这里最好的答案,但我只是想分享除“根据规范......”之外的见解)
如果您能够在页面的其他位置添加 HTML,则可以将其重新定位在显示 CSS 内容的区域上。
所以你添加你的 CSS 内容:
.cssClass::after {
content: "Content and Words and Things";
color: #0000EE;
}
我添加了蓝色超链接,所以它看起来像一个链接。
然后,您在标签之间添加一个没有文本的 href,并带有您可以引用的 id 或类。只要它在同一页面上,它就可以在任何地方。
<a id="link" href="#"></a>
然后将链接放在您想要的内容上:
a#link{
height: 20px;
width: 100%;
left: 0;
top: 5%;
position: absolute;
}