【问题标题】:Namespaces in CSS and Styling ConflictsCSS 中的命名空间和样式冲突
【发布时间】:2017-09-09 16:10:27
【问题描述】:

我正在开发一种网络产品,当使用该产品时,它会生成用户将嵌入其网站的代码。

生成的代码包含 HTML、JavaScript 和 CSS。当嵌入页面时,它将与该页面中我无法控制的其他内容一起显示。换句话说,我的产品生成的代码将嵌入到已经包含其他内容的网页中。我无法控制该页面的样式和内容。

现在,我担心样式命名冲突。假设我正在使用一个名为 .amazing-color 的 CSS 类,它以某种方式设置某些组件的样式。

假设使用我的代码的网页碰巧有一个样式也称为.amazing-color,它会有不同的样式代码,并且可能会覆盖我自己的样式。

我的问题是,我怎样才能防止这种情况发生?如何防止 CSS 中的命名冲突?

您可能会建议我的样式名称很复杂,所以我会使用.my-super-amazing-color-212321,但这会导致复杂的 CSS 类不可读。我认为更好的解决方案是使用命名空间。但是我不确定 CSS 中是否有命名空间,如果它们存在,我该如何使用它们。那么,CSS 中有名称空间吗?你能提供一个使用它们的示例代码吗?

谢谢。

【问题讨论】:

    标签: html css namespaces conflict


    【解决方案1】:

    首先,您问的不是 CSS 中的命名空间,而是 中的命名空间。类是一种 HTML 特性,而不是 CSS 特性。

    现在,类没有正式的命名空间机制,但在这种情况下,惯例是使用通用缩写或首字母缩写词作为您使用的所有类的前缀。因此,您可以将“mwp-”用于“我的网络产品”。

    由于您正在生成 HTML、CSS 和 JS,您可能可以使此前缀可配置,以便您的产品的用户可以在冲突时选择不同的前缀。

    最后,在您的产品使用文档中明确说明您使用的是什么前缀,以及使用您产品的人如何在需要时更改前缀。

    【讨论】:

    • 感谢您的回答。这是一个我也考虑过的解决方案,但是,它可能不是一个好的解决方案,因为我使用的是 BEM 命名约定(详细信息:getbem.com)。那么,我该如何克服呢?
    • 对不起,我不是 BEM 的粉丝,也不使用它,所以我不能在那里提供建议。我看不出你为什么不应该在你的块名称中包含一个公共前缀,但我不知道这是否会违反 BEM 约定。
    • 我理解您对 BEM 的意思。我正在使用 modified BEM(或此处描述的所谓 BEVM youtube.com/watch?v=nwS7M2L07uU);使用这种模型更加灵活,并且有助于克服边界元法的许多缺点。关于您的问题是否违反 BEM 约定,我认为它不会违反这些约定,但只会降低代码的可读性,并希望尽可能通过命名空间对事物进行分组。
    猜你喜欢
    • 2014-07-01
    • 2010-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多