html - CSS 样式冲突预防和命名空间技术

标签 html css namespaces widget

假设您正在构建一个名为 Awesome Widget 的概念性小部件,并且您希望完全保护它不与周围元素或作为内容驻留在小部件内的子元素发生冲突。

我们不想要的

div ul li {}

解决方案 1:CSS 子组合器

使用 CSS 子组合器选择器指定只应定位直接子级。

.awesomewidget > div > ul > li {}

方案二:类命名空间

使用 aw(Awesome Widget)作为每个类的命名空间,减少页面上任何其他元素使用该确切命名空间 + 类名的机会。

.awesomewidget .aw-container .aw-list .aw-listitem {}

CSS 中也有类似@namespace 的东西,但那只适用于 XML。

除了方案一和方案二,还有其他的可以使用吗?你更喜欢哪一个?有什么最佳做法吗?

编辑:在没有适当的命名空间/样式冲突预防的情况下出现的问题示例

小部件样式:

.awesomewidget > div ul li {
background-color:red;
}

用户样式:

ul li {
background-color:blue;
}

标记:

<div class="awesomewidget">
<div>

<ul>
<li>
<!-- user content starts here -->

<p>I am the user and I want to add some content here. Let's add a list:</p>

<ul>
<li>Why is this list-item red and not blue?</li>
</ul>

<!-- user content ends here -->
</li>
<li>
<!-- user content starts here -->

<!-- user content ends here -->
</li>
</ul>

</div>
</div>

最佳答案

我更喜欢结合使用这两种解决方案,例如:

.awesomewidget > div ul li {}

因为第二个给标记增加了很多不必要的重量。

更新

对于您的示例,我将使用 .user 类在用户内容周围添加一个包装器,然后在其 CSS 前加上 .user。然而,这并不优雅,它添加了一些标记,我认为它很容易失败。

关于html - CSS 样式冲突预防和命名空间技术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6127608/

相关文章:

html - 防止内容垂直扩展网格项

javascript - 如何将下拉菜单中的元素与我的父菜单栏对齐

XML 和 XSLT 以及设置命名空间

c++ - 在命名空间中使用指令导致的错误示例

c++ - 为什么在全局命名空间中使用 << 运算符是一个坏主意?

javascript - Uncaught ReferenceError :ajax is not defined (repeated 2 times)

javascript - WordPress:悬停不起作用时尝试显示子菜单

html - 如何使按钮旁边的图像链接内联?

jquery - 在响应模式下重新排序 Twitter Bootstrap 行

html - 将多个 div 放置在没有容器 div/包装器的两列中