我的问题实际上比标题更广泛。这正是我遇到想法的障碍,但我对各种解决方案持开放态度。让我解释一下我的总体目标。
我喜欢CSS预处理器可以做的事情。我喜欢OOCSS和SMACSS的想法。我是所有这一切的新手。我正在尝试升级我的设计方法,以某种方式融入最好的世界。我的理论方法是这样的:
所以这个:
/* 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。当我尝试编译上面的代码时,我得到一个错误,如。
警告第11行...... \ sass \ home.scss:“#intro”未能@extend“ruddy”。 找不到选择器“ruddy”。
如果我只是将module.scss中的代码复制到homepage.scss中,那么问题就会消失。
答案 0 :(得分:8)
事实并非如此。
您可以在一个文件中声明类(包括%-prefixed ones),将第一个文件导入第二个文件并在第二个文件中扩展类。
示例:
<强> foo.sass 强>
%foo
color: red
<强> bar.sass 强>
@import foo.sass
html
@extend %foo
运行sass bar.sass bar.css
。
bar.css 出现
html {
color: red; }
PS对于真正的SASS体验,您应该使用Compass。指南针是一堆名称下的东西:
UPD 最后错误文字!
你错过了班级名称中的点。 aside {@extend ruddy;}
应为aside {@extend .ruddy;}
。
答案 1 :(得分:7)
问题在于:
#intro {@extend ruddy; @extend fullwidth}
aside {@extend ruddy;}
.thing {@extend fullwidth;}
ruddy
和fullwidth
不是选择器。如果您要扩展.ruddy
类,则需要包含句点,因为它是选择器的一部分。
#intro {@extend .ruddy; @extend .fullwidth}
aside {@extend .ruddy;}
.thing {@extend .fullwidth;}