如何在CSS中使用命名空间?

5
我的HTML页面包含一个ID为“main”的div,我正在将另一个HTML页面包含到我的HTML页面中,该页面包含具有相同id(“main”)的div。我需要向我的HTML页面的id(“main”)附加名称空间。
我正在从另一个站点包含头部和页脚,并在该HTML页面中包含来自我的站点的内容。如果那个站点使用与我的站点相同的id,则会发生冲突。
在这个HTML页面中包含了两个CSS文件。如果它们都包含具有不同样式的相同类,则存在问题。
我需要将我的CSS文件应用于我的代码,将另一个应用于剩余的代码。有人能解决我的问题吗?
6个回答

4

两件事情:

  • 听起来你需要一个类,而不是一个ID。
  • 如果你想要在页面之间应用不同的样式,请使用嵌入式样式表。

在这种情况下使用相同的ID肯定是一种破窗效应。如果你对情况有任何控制权,你应该更新HTML,而不是邀请更多的混乱。


1
你不需要嵌入式样式表来实现每个页面的差异!你只需在body标签上放置一个ID即可。 - AmbroseChapel
不是我的首选,因为它会使 CSS 文件混乱。我们在工作中刚刚讨论过这个问题。这可能只是个人偏好的问题。这里有一群人正在争论它:http://www.webmasterworld.com/css/3115364.htm 我看到了双方的观点,将所有规则放在一个地方确实很好。 - cgp

2

关于包含在div中的元素,有什么可以使它们彼此区分的吗?如果有,您可以在css声明前缀中加上包含元素,并为两个div指定独特的样式。

例如:

#main
{Style}
.container #main
{Another style}

正如其他人所提到的,如果您可以控制HTML代码,最好为这两个元素指定不同的类别或为它们中的每一个指定唯一的ID。


你比我先做到了。答案的自动更新功能很好。 - IEnumerator
从技术上讲不是这样的,但似乎约翰对元素的命名有限制。 - Sam Becker

2

具有重复id的页面无效。即使您通过将id与类组合以定位单独的元素,也不能保证在所有浏览器中都能正常工作。

为了使页面有效,元素需要具有唯一的id。


1
简而言之,CSS 中没有命名空间这样的概念。请使用其他答案提出的解决方法之一 :)

1

到目前为止,我同意大家的看法,即没有本地CSS命名空间功能,如果您有控制权(或愿望/能力)编辑HTML,则这是最好的方法。

自动化此过程的一种方法是编写脚本(PERL、PHP、.NET等)来解析您正在提取的HTML并替换任何现有的ID或类别为修改版本。

例如:<tag id="theID" class="theClass anotherClass"> 变成 <tag id="NAMESPACEtheID" class="NAMESPACEtheClass NAMESPACEanotherClass">

您可以使用一些创造性的正则表达式来完成此操作,但如果需要修改JavaScript代码,则会变得更加棘手。

就性能而言,这将是一个巨大的打击,具体取决于文件的大小,您可能需要缓存结果或重写原始文件。

如果您决定采用这种方法,请告诉我,这个想法实际上听起来有点有趣,可以成为我的工具箱中的一部分!


0

使用第二个 div 的名称作为第二个 div 的 ID。例如,如果第二个页面名为 signup.html,则使用 main_signup


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接