使用JavaScript查找CSS属性的浏览器默认值

使用JavaScript查找CSS属性的浏览器默认值,javascript,jquery,css,svg,canvg,Javascript,Jquery,Css,Svg,Canvg,是否可以使用JS检索CSS属性的浏览器默认值,忽略任何内联/导入的样式 一些上下文:我正在使用JS将特定SVG元素及其子元素上的所有样式串联起来(这允许我使用JS将其转换为PNG)。目前,我的输出对于每一种可用的样式都非常臃肿,我希望能够从内嵌的样式数组中丢弃使用浏览器默认值的任何属性 演示正在发生的事情: $.extend($.fn{ makeCssInline:function(){ 每个函数(idx、el){ var-style=el.style; var属性=[]; for(样式中的v

是否可以使用JS检索CSS属性的浏览器默认值,忽略任何内联/导入的样式

一些上下文:我正在使用JS将特定SVG元素及其子元素上的所有样式串联起来(这允许我使用JS将其转换为PNG)。目前,我的输出对于每一种可用的样式都非常臃肿,我希望能够从内嵌的样式数组中丢弃使用浏览器默认值的任何属性

演示正在发生的事情:

$.extend($.fn{
makeCssInline:function(){
每个函数(idx、el){
var-style=el.style;
var属性=[];
for(样式中的var属性){
if($(this.css(属性)){
//TODO:只有在不是浏览器默认样式时才使用此样式
properties.push(property+':'+$(this.css(property));
}
}
this.style.cssText=properties.join(“;”);
$(this.children().makeCssInline();
});
}
});
$(文档).ready(函数(){
$(“#before”).text($(“svg”)[0].outerHTML.length);
$(“svg”).makeCssInline();
$(“svg”)[0].outerHTML.length);
});
svg圈{
填充:#080;
}
svg文本{
填充:#FFF;
}

SVG
衬线样式中前的字符总数:


内联样式后的字符总数:

您可以使用getComputedStyle()计算新创建元素的默认样式值。但必须将新元素插入DOM中,才能使其正常工作:

function getDefaultStyleOf(tagName, name)
{
    var element = document.createElement(tagName);

    document.body.appendChild(element);
    var value = getComputedStyle(element)[name];
    document.body.removeChild(element);

    return value;
}

console.log(getDefaultStyleOf('code', 'font-size'));

我希望能够放弃使用浏览器默认值的任何属性。
CSS不是这样工作的。无论是否设置,所有属性始终在每个元素上设置。不能删除CSS属性,只能将其设置回默认值。这就是为什么使用
css()
是个坏主意的部分原因。改为使用类来设置元素的样式,然后可以根据需要打开/关闭该类。@RoryMcCrossan对不起,这句话措词不当。我的意思是我希望能够放弃数组中的默认样式,这些样式将被内联追加。啊,好的。即使在这种情况下,你也为自己做了很多额外的工作。我强烈建议改为使用类。我希望可以,不幸的是,canvg(我用来从svg转换为png的库)要求样式是内联的,以便正确生成输出。而且似乎没有任何其他库满足这一要求。如果页面的样式表对临时插入到文档中的元素应用了规则,那么这将不起作用。