应该在Firefox的userContent.css中定义什么名称空间?

时间:2017-06-28 16:27:20

标签: css user-interface firefox namespaces customization

在Firefox的userChrome.css中,有必要定义XUL命名空间:

  

@namespace url(http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul);

在userContent.css中,除了网站自定义外还包括 about:addons 自定义项,应该定义哪个命名空间?

仅指定:

  

@namespace url(http://www.w3.org/1999/xhtml);

会导致 about:addons 自定义设置无法应用。

(请参阅Why are CSS declarations for about:addons placed in userContent and not userChrome, given that the namespace is XUL?了解 about:addons 自定义设置在userContent.css中的原因。)

1 个答案:

答案 0 :(得分:3)

userContent.css 文件用于可以是任何命名空间的内容。最常见的是它用于HTML和XUL。此外,Firefox正在转换为在代码中使用更多HTML命名空间元素,用于定义其chrome(即所有不符合内容的内容)。因此,您需要同时处理 userChrome.css userContent.css 中的HTML和XUL。

考虑到Firefox Chrome中使用的HTML和XUL的混合,我发现我经常需要查看元素的源代码或使用DOM Inspector查看元素使用的命名空间我很感兴趣。

使用@namespace指令有很多方法可以做到这一点。如果需要,可以在同一文件中使用以下两种方法。如果这样做,则需要注意已定义为当前默认命名空间的内容。

定义HTML元素的规则,将默认值更改为XUL,然后执行XUL

鉴于默认情况下这些文件使用HTML命名空间,我个人所做的只是在使用之前使用我的HTML命名空间规则:

/* Set default namespace to XUL. */
@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");

将默认名称空间设置为XUL。然后在命名空间更改后放置我的所有XUL规则。因此,它看起来像:

/* Put all HTML namespace rules here. */    

/* Set default namespace to XUL. */
@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"); 

/* Put all XUL namespace rules here. */    

你如何组织它取决于你。我这样做是因为我在将默认命名空间更改为XUL后尝试显式使用HTML命名空间时遇到了问题。我发现明确指定每个元素的命名空间通常不像我预期的那样起作用,并且后面是一个痛苦。因此,我将我使用的所有规则重组为HTML或XUL。

或者,定义名称空间前缀,然后在所有元素上使用它们

如果要通过显式指定每个元素的命名空间来执行此操作,则需要定义命名空间前缀。您可以使用以下内容执行此操作:

/* set html namespace to http://www.w3.org/1999/xhtml */
@namespace html url("http://www.w3.org/1999/xhtml");
/* set xul namespace to http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul */
@namespace xul url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");

然后,您可以使用html|xul|*|为每个元素指定HTML,XUL或所有命名空间。

注意:更改默认命名空间后,您可能需要显式处理其他命名空间中的元素(例如<svg><math>等),这些元素通常会自动处理。