我的问题实际上比标题所说的要广泛。这只是我的想法遇到障碍的地方,但我对各种解决方案持开放态度。让我解释一下我的总体目标。
我喜欢 CSS 预处理器可以做的事情。我喜欢 OOCSS 和 SMACSS 的想法。我对这一切都很陌生。我正在尝试升级我的设计方法,以某种方式融合世界上最好的东西。我有一个这样的理论方法:
- 仅使用语义类名称或 id 或其他
- 在一些常见的样式表中定义模块或模式
- 具有每页样式表,将模块从通用样式表@extend 到与给定页面相关的语义选择器上
所以这:
/* modules.scss */
.ruddy {color: red}
.fullwidth {width: 100%; display: block;}
加上这个:
/* homepage.scss */
@import modules.sass
#intro {@extend ruddy; @extend fullwidth}
aside {@extend ruddy;}
.thing {@extend fullwidth;}
变成这样:
/* homepage.css */
#intro, aside {color: red}
#intro, .thing {width: 100%; display: block;}
我不一定见过其他人这样做,但对我来说这似乎是个好主意。我在我的宏伟计划中遇到的问题是 @extend 似乎不适用于导入的文件。SO上其他地方的人说这是不可能的。这是真的?我让 mixins 工作,但它们的问题是它们复制了输出 css 中的每个属性,这似乎并不理想。
我实际上更偏爱 LESS(语法),但目前甚至没有扩展。我不应该担心 mixins 的效率低下,还是有什么方法可以实现我的要求?
注意: 我正在使用 Prepros 工具自动编译我的 sass。当我尝试编译上述代码时,出现类似错误。
... \sass\home.scss 的第 11 行警告:“#intro”未能@extend “ruddy”。未找到选择器“ruddy”。
如果我只是将 module.scss 中的代码复制到 homepage.scss 中,那么问题就会消失。