我正在创建一个带有自包含UI组件的模块化html / js应用程序。我的每个UI组件都可以有自己的模板文件(结构),js文件(行为)和css文件(演示文稿)。
我知道我可以通过将全局主题css上的所有样式标记为“重要”来实现此目的。但我不想那样走。关于如何处理此问题的任何其他建议?
答案 0 :(得分:1)
如果被设置样式的元素通过相同的选择器寻址,例如在所有样式表中#something li
,然后包含的样式表将覆盖先前设置的任何内容(除非某些内容“重要”)。这应该允许您使用主题 - 只需在应用本地样式后导入这些主题。
我不确定我理解你关于本地和全球风格的问题。但是,如果您为元素指定了正确的名称,则每个组件的样式不应干扰全局样式。 (对于渲染性能和可读性原因,使用类/ id名称而不是像.some-table tr td .another- table tr td { ... }
这样的长嵌套选择器是一种很好的做法)
换句话说,您可以在每个页面中写下这些:
答案 1 :(得分:1)
考虑到你构建RequireJS的方式,我建议如下:
themes/
文件夹等主题提供一个结构,该文件夹必须与组件文件夹具有相同的文件夹答案 2 :(得分:0)
您可以使用scope
属性注入样式元素(对于每个组件),因此它只会影响它注入的DOM范围,而不会从根元素(HTML)开始。
https://developer.mozilla.org/en-US/docs/Web/HTML/Element/style#A_scoped_stylesheet
<article>
<div>The scoped attribute allows for you to include style elements mid-document.
Inside rules only apply to the parent element.</div>
<p>This text should be black. If it is red your browser does not support the scoped attribute.</p>
<section>
<style scoped>
p { color: red; }
</style>
<p>This should be red.</p>
</section>
</article>
<小时/> 浏览器支持(当前):
Chrome
和FF