我有一个我需要使用的XSL样式表,因为它有很难重新创建的东西。我也无法编辑它。所以我使用<xsl:import>
导入XSL样式表,然后我重写了一些模板。但有人让我难过:
<xsl:template match="mscript">
<html>
<!-- head -->
<head>
<!-- ... other stuff not important ... -->
<xsl:call-template name="stylesheet"/>
</head>
<body>
<!-- ... more stuff ... -->
和stylesheet
模板粘贴在<style type='text/css'>...</style>
标记中并且最有用,从这个愚蠢的废话开始:
<xsl:template name="stylesheet">
<style type="text/css">
html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,
a,abbr,acronym,address,big,cite,code,del,dfn,em,font,img,ins,kbd,q,s,samp,
small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,
form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td
{margin:0;padding:0;border:0;outline:0;font-size:100%;
vertical-align:baseline;background:transparent}
哎呀!让我恶心。
我可以在我的根XSL文件中完全覆盖样式表,但我真正想做的就是取消这一个CSS规则。
有办法吗?这就是我想做的事情:
<xsl:template name="stylesheet">
<xsl:call-template name="imported_stylesheet" />
<style type="text/css">
<!-- nullify the boneheaded nonsense -->
h1,h2,h3,h4,h5,h6,p,blockquote,pre,
a,abbr,acronym,address,big,cite,code,del,dfn,em,font,img,ins,kbd,q,s,samp,
small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,
form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td
{margin: default; padding:default;border:default;outline:default;font-size:default;
vertical-align:default;background:default}
</style>
</xsl:template>
但default
不是CSS功能,我不知道如何调用导入的样式表,因为当我覆盖stylesheet
模板时,其先前的值会消失。
答案 0 :(得分:2)
我相信CSS目前无法将样式重置为浏览器默认值(请参阅Reset CSS display property to default value)
我可以想到一种非常'原始'的方式来做你想要实现的目标。假设样式表模板只返回一个样式元素,您可以将调用:template 命令包装在变量中,然后将其删除第一条规则。像这样的东西
<xsl:variable name="style">
<xsl:call-template name="stylesheet"/>
</xsl:variable>
<style type="text/css">
<xsl:value-of select="substring-after($style, '}')" />
</style>
这将在第一个之后发布CSS规则。
您确定无法编辑导入的样式表吗?难道你不能找到写它的人,并要求他们改变它以允许一个参数,指定你是否想要第一个规则?或者也许您可以只获取导入样式表的副本,并根据自己的目的进行更改....