如果您是 WordPress 主题构建者 并且是 Sass/Compass 用户,首先,哇,您太棒了!其次,您可能会遇到一个关于编译位置的小问题,所以我们现在就来解决它。
关于 CSS 和 WordPress 主题,有两件非常重要的事情
- 主题文件夹中绝对必须存在一个“style.css”文件。
- 该文件绝对必须以这样的注释块开头
/*
Theme Name: Twenty Ten
Theme URI: http://wordpress.org/
Description: The 2010 default theme for WordPress.
Author: wordpressdotorg
Author URI: http://wordpress.org/
Version: 1.0
Tags: black, blue, white, two-columns, fixed-width, custom-header, custom-background, threaded-comments, sticky-post, translation-ready, microformats, rtl-language-support, editor-style, custom-menu (optional)
License:
License URI:
General comments (optional).
*/
如果该文件不存在或注释块丢失,WordPress 甚至无法识别该主题。
如果您使用 Sass/Compass 并且您的主题具有一个**非常简单的**样式表,也许它都在一个文件中,并且您只有一个这样的目录
/wp-content /themes /your-theme config.rb index.php style.scss style.css
您的 config.rb 文件(用于 Compass)非常标准,如下所示
http_path = "/"
css_dir = ".."
sass_dir = ".."
images_dir = "images"
javascripts_dir = "js"
output_style = :compressed
environment = :development
这样就可以了。您已经设置好了。您只需要确保在 style.scss 文件顶部的注释中使用“!”,这样即使在编译/压缩发生时,注释也会保留下来
/*!
Theme Name: Your Theme
etc...
*/
问题
我们中的许多人没有那么简单的设置。我喜欢用我的 Sass 分块工作,而不是把所有东西都塞进一个文件里。我更喜欢在我的主题中拥有 css 和 scss 文件夹。像这样
/wp-content /themes /your-theme /css site-sub-section.css /scss _grids.scss _normalize.scss _typography.scss site-sub-section.scss config.rb index.php style.scss style.css
问题是没有 Compass 配置允许这些编译路径。

解决方案
- 将您的配置设置为更标准的将 scss 文件夹编译到 css 文件夹中。
- 将 style.scss 文件夹移动到 scss 文件夹中。
- 成功将 style.scss 编译到 style.css 后,自动将 style.css 移动到根文件夹。
新的 config.rb
http_path = "/"
css_dir = "css"
sass_dir = "scss"
images_dir = "images"
javascripts_dir = "js"
output_style = :compressed
environment = :development
显然,您在 config.rb 中编写的任何代码都会在每次编译时运行,因此为了完成第 3 步,我们可以在特定事件发生时编写 Ruby 代码以执行。在我们的例子中,当样式表保存时(Compass 完成编译),我们检查该文件是否名为“style.css”,如果是,则将其向上移动一个目录。puts
语句只是为了让您能够在需要时从命令行观察它工作。
require 'fileutils'
on_stylesheet_saved do |file|
if File.exists?(file) && File.basename(file) == "style.css"
puts "Moving: #{file}"
FileUtils.mv(file, File.dirname(file) + "/../" + File.basename(file))
end
end
感谢 Christopher Eppstein 向我展示了它是如何工作的。
还有其他方法吗?
1) 在您的主题文件夹中放置一个空的 style.css,其中除了常规主题注释/声明之外什么也不包含(以确保 WP 将其识别为主题)。
2) 不要在主题的 header.php 中放置 style.css。
3) 相反,从您的 functions.php 和您选择的文件夹中加载已编译的 Sass 文件。
时间很晚了,我只是在想,所以如果我的想法不切实际,请道歉。但看起来应该可以工作吧?
所以,这应该可以工作。一个缺点是,如果您计划分发该主题,那么对于打开
style.css
并找到一个空白样式表的人来说可能会令人困惑。当然,这也有道理。不要像我一开始那样,放置一个从 /css/ 目录中 @import 内容的 style.css 文件。这是毫无意义的两个请求,这导致我走上了这条道路。
还要注意,然后
bloginfo('stylesheet_url');
将返回您的空白样式表。很容易修复,但它会影响我,因为我喜欢使用它。@matt:干杯,这正是我也采用的方式。我甚至有时还会包含一个 less-compiler,用于主题自定义支持(因此 wordpress 不会打印内联样式表 - 我正在过滤它们)。
@josh:如果您准备打开 styles.css,您也可以弄清楚真实代码在哪里。
Matt 建议的方法(仅包含 WP 注释和 @import 的 style.css)也是我使用的,我认为这是最好的方法。
我不认为如果您分发该主题,这会令人困惑,因为当有人打开 CSS 文件时,您可以安全地假设他是一位网页设计师,或者至少是知道自己在做什么的人。无论如何,优秀的主题开发者都会为不精通技术的用户提供其他方法来更改主题的外观。
在我的主题中散布 .scss 文件 - 这对我来说很令人困惑。我会将所有 SASS 文件保存在 .sass 文件夹中,这样我就知道在哪里可以找到它们。
这正是我会做的:)。
@Josh:只需在您的空 style.css 中添加另一条注释,指向真实的样式表 - 在任何情况下都不难找到它……
@Josh - 的确,但这对像我这样只为客户创建主题以及我自己的副项目的人来说非常棒。我一定会使用 @Matt 的方法。
是否有任何地方可以逐步介绍 @matt 首选的方式?
您是否仍在使用 CodeKit 编译所有内容?我在我的主题中添加了一个
scss
目录,其中包含我所有的部分文件和一个style.scss
,它 @import 所有内容。然后在我的 config.rg 中,我将其设置为:css_dir = "/"
和sass_dir = "scss"
。不需要额外的 Ruby 代码,它会编译到主题根目录下的 style.css 中。Matt,这太棒了,而且非常容易实现,谢谢!我刚刚更新了我的网站,它运行得非常完美。更改
css_dir
确实破坏了一些路径,但我将它们保存为变量,因此从$image-path: ('../images/');
更新到$image-path: ('./images/');
并不困难,例如。是的!这正是我采用的方式。我认为这是最简单的入门方法。但是,这段额外的 ruby 代码似乎很有趣,值得尝试。
这对我很有效!谢谢 Matt。另外一点,如果这里有人使用 Espresso 作为他们的代码编辑器 - 请小心。我一直因为编译失败而抓狂。最后我追踪到 Espresso 导致的文件编码不一致。希望这对某些人有所帮助。
为什么要搞乱 ruby 文件和 PHP 文件?我建议您使用
https://github.com/roytomeij/sass-for-wordpress/
或
http://forge.thethemefoundry.com/
而不是乱动文件。
Yoosuf
看起来很酷,但是
我是一个新手,我甚至不想考虑在我的服务器上安装 Ruby 和 Gems。谁知道这会使用多少资源以及我随后需要考虑哪些额外的安全问题。
我想在我的第一条评论中写,但我已在我的 WordPress 初学者主题(在 Github 上)中全部设置好:https://github.com/mattbanks/WordPress-Starter-Theme
我也按照 Matt 的说法进行开发,我认为简单胜过一切,只需在主题的根目录下放置一个空的 style.css 即可满足 wordpress 的要求,并照常使用 sass,这意味着您在 sass 文件夹内编写 scss,并在 css 文件夹内获取编译后的 css,然后在开发期间仅加载编译后的 style.css(来自 css 文件夹),并在完成后将其移动到根目录,以已编译的文件替换空文件。我有许多被导入到编译后的 style.css 中的 scss 部分文件,并且它运行得非常完美。
嗯,这个解决方案在 Windows 上使用 Compass.app 是否也适用?
我以为在这种设置下,.SCSS **必须**放在名为“SASS”的文件夹中,并且它**始终**会编译到名为“stylesheets”的文件夹中 - 这仅仅是 Compass.app 获取输入和输出的地方,我还没有找到任何方法可以更改它。
不确定 Mac 上是否相同。
Compass.app 不需要任何其他 Ruby 配置,因此设置路径等就没有意义了,我想。
因此,对于使用 Compass.app 的用户来说,他们可能需要在 **styles.css** 中使用 **@import “stylesheets/default.css”;** 并让 Compass.app 监视 **theme/themename** 文件夹。
不过,我可能错了。
补充:可以编辑 config.rb,以便它可以将文件从 /stylesheets 移动到主题根目录。只是不确定使用哪个 config.rb(我的 C:/Ruby 文件夹里有几十个)。仔细想想,编辑正确的 config.rb 文件可能会让我能够设置路径,这样我就不再受限于使用 SASS 和 STYLESHEETS 文件夹了。
但是,呃,好吧,Compass.app 是为那些不想处理 Ruby 相关内容的人准备的!;)
您能否解释一下如何修改 config.rb?当我尝试打开它时,我没有程序来支持它。我也在使用 Windows 版的 Compass 应用。我完全是新手,发现很难找到初学者的资源(而且对于使用 Compass 应用的初学者来说,难度更大)。
抱歉,我太蠢了。问题已解决。只需要右键单击并选择“使用 Sublime Text 打开”:) 不过,如果您还有其他建议,我将不胜感激 :)
嗨,Brooke,
你可以去几个地方学习更多关于 Sass/Compass 的知识。以下是一些入门指南。
http://thesassway.com/beginner
http://net.tutsplus.com/tutorials/html-css-techniques/mastering-sass-lesson-3/?search_index=2
既然你提到你在使用 Windows,我用这个来帮助我设置环境。
http://marshallford.me/articles/windows-workflow
它介绍了从使用更好的控制台到设置版本控制和 sass/compass 等各种内容。你可以选择你想要设置的部分。
我已经停止使用 Prepros 和 Compass App 等应用程序,开始只使用命令行。虽然需要一些时间来适应,但它运行良好。但我非常喜欢 Prepros,并且推荐使用它。你可以使用免费版本,它非常棒。如果你需要其他功能,可以考虑购买专业版。
我希望这能帮助你找到一些有用的东西来开始你的旅程。
这似乎有点大材小用。试试这个怎么样?
它只需要将
css
更改为.
。我认为这行不通。
这会将 scss 中的所有内容编译到根目录,并在主题文件夹根目录中创建一个很大的混乱。
如果你必须将其余的 CSS 保留在
css/
文件夹中,那确实如此。但有些人可能没有为他们计划重新打包的主题创建多个样式表,或者只有一个(编译后的)样式表。这提供了一个简单的解决方案。WordPress 不是我遇到的唯一一个这样做的 CMS,但样式表必须位于特定位置并且无法编辑该位置是非常糟糕的。另一种选择(正如已经讨论过的,它有一些缺点,但只是为了让你有多种选择)是创建一个符号链接,例如以下命令(从你的主题目录运行)这至少可以让
blog_info('stylesheet_url')
工作,但在重新打包的情况下,可能会让其他开发人员感到困惑。符号链接在 CodeKit 中存在问题。
有一个更简单的方法可以做到这一点,这也是我所有 WP 主题的设置方式。
在 config.rb 中
然后是你的 sass 目录(唯一重要的部分是 style.scss)
顺便说一句,通过将 css_dir 设置为根目录,你可以在 /sass 目录中有效地构建你的完整目录结构以镜像你的实际项目,因此,如果你的样式表位于 /admin/assets/css 目录中,只需在 /sass 目录中放置相同的结构,即 /sass/admin/assets/css,所有 .scss 文件将编译到它们正确的位置。
我只是在 style.css 中有一个 @import
@import url(stylesheets/screen.css);
在 config.rb 中,我将相对路径设置为 true
前几天我一直在努力解决这个问题,但没有找到这么好的方法。很棒的东西。我喜欢这种方法。你仍然可以将所有 SCSS 文件放在一起,它只是将文件移动过去,而所有其他 css 文件都保留在 css 文件夹中,非常酷。
这是我使用 CodeKit 时 config 的样子。对我来说似乎有效。但我肯定遗漏了一些东西。
http_path = "/"
css_dir = ""
sass_dir = "scss"
images_dir = "img"
javascripts_dir = "js"
它有一些功能无法实现(但我愿意忽略):
没有保持将所有 css 文件放在 css 目录中的标准。
我的所有 scss 文件都编译成一个 style.css 文件。我对此没问题,但你可能会有问题。
完全正常的 config,但正如你所说,它没有从 scss 编译到 css。我拒绝将每个 scss 的 CSS 文件都放在我的主题根目录中。在我的几个项目中,这会造成很大的混乱。
Chris,如果你在 /sass 目录中的文件夹内有任何 .scss 文件,如果 css_dir = “”,它们将编译到项目中的该目录。因此,你可以让你的 scss 文件编译到任何你想要的位置,除非你将它们放在 /sass 目录的底部,否则它们不会编译到根目录。如果需要将文件编译到 /yourproject/css,则在 sass 文件夹中放置一个 /css 文件夹,例如 /yourproject/sass/css。
例如,/yourproject/sass/css/style.scss 将编译到 /yourproject/css/style.css
试试看,这是组织样式表最简单的方法,你可以完全控制它们编译到的位置,只需在 sass 文件夹中相对于项目根目录组织它们到所需的文件夹中即可。
我不知道 WordPress 中的 Sass/Compass 是什么。但现在我明白了。感谢你的好文章。我正在尝试实现它,如果需要你的帮助,我会回复你。
干杯!
在最新的 WordPress(3.4.2)中,你不需要在
style.css
的开头使用注释块来识别它,只需在主题目录中创建一个文件夹,其中包含一个空的index.php
和style.css
即可。啊,知道这一点很好,这可能很有用!是否有链接可以了解更多信息?
大家好,
我通常有一个 'styles' 目录,它编译到 'scss' 目录,以及一个 'scripts' 目录,它缩小到 'js' 目录,目前没有使用 CoffeeScript,但它也可以很好地用于 CoffeeScript。我还使用根目录中 style.css 仅包含主题信息而不链接主题的方法。
对我来说效果很好!
我使用的是古老的 @import 方法,还有一件事,为什么你要对盒模型使用 *:after 和 *:before。我想知道为什么仅仅使用 * { box-sizing: border-box} 不起作用。
@Madalena:仅仅是能够通过 Compass 与 SASS 结合自动生成雪碧图就足以让人永远不再使用普通的 CSS;虽然你正在使用 LESS,但我可以理解你坚持使用它……
LESS 的整个 JavaScript 实现让我在 Compass 之外使用它感到恼火:不寒而栗地想象一下,如果浏览器禁用了 JavaScript,而我正在使用 LESS 作为实时 CSS 引擎会发生什么……
叫我疯子也行,但为什么不直接使用标准 CSS 呢?
如果你必须问这个问题,你显然没有使用过 SASS。它将彻底改变你的编码体验,并让你变得更加高效。
但是,这只是一层额外的开发工作,你需要担心。不要误解我的意思,SASS 和 LESS 都是很棒的想法。但这只是一层额外的负担。
我不喜欢用 Sass,我也觉得它只是增加了更多需要操心的事情,而不是去做真正重要的事情。Less 对我来说就足够了,而且它简单得多。我认为有一些更好的工具可以做到 Sass 的功能,而且不会让人那么头疼。
仅代表个人观点…
但我也可以欣赏那些用 Sass 制作的非常棒的项目。
我认为这可能很大程度上取决于你正在做的项目类型,以及从我所看到的——部分取决于你的工作/思考方式。
对我来说,我永远无法离开 SCSS,因为例如,我为颜色设置了变量,然后使用 Sass 函数来改变这些颜色(变暗/变亮/饱和/去饱和等)。我也大量使用 Compass 的 mixin,因为如果我不得不记住不同浏览器下的 border-radius 语法,我会疯掉的。
所以,对我来说,它不仅仅是另一个我需要担心的层级。它就是 CSS 在理想世界中的样子=)
Melindrea,我可以用 Less 做到所有这些……颜色变量和变暗/变亮,mixin……我的意思是 Sass 有太多你实际上不需要的额外东西……
例如安装方面,要使用 Less,你只需要一个编译器,而安装 Sass 和 Compass 则需要一堆其他步骤。(我承认,我很懒,讨厌处理 DOS 风格的界面)。
也许我只是没有得到很好的指导,我不知道……
@Madalena:我完全同意。但是,如果我理解像 SASS 和 LESS 这样的工具,它更强调了一种编程结构,以更有效的方式来处理 CSS?但是,我仍然会坚持使用标准 CSS,我希望能够了解每个 CSS 属性,每个前缀,并且希望实践我所宣扬的。
@Melindrea:我也同意,简单的宣传册网站不应该建立在 LESS/SASS 之上,因为这可能需要更多时间,而且还需要你严格掌握 LESS/SASS。
我有点困惑,但我认为我弄明白了……要使用你上面提供的 config.rb 脚本,你需要在服务器上安装 Ruby,对吧?可能需要在文章开头说明这一点——有点让我希望有一种无需 Ruby 就能轻松配置的方法。
我已经使用 CodeKit 作为本地预处理器几个月了,并且非常喜欢它。
如果你在任何地方编译 Sass,你都在运行 Ruby。如果你使用 Compass(即使通过 CodeKIt),你肯定有一个 config.rb 文件,代码就放在那里。
好的,感谢你的澄清。
我希望在服务器上运行 Ruby 更容易一些。
你不能在每个文件的基础上设置自定义输出路径吗?在使用 Compass 时,常规 Sass/SCSS 可以做到……这是否被禁用了?
感谢你的提示。很棒的网站。
我喜欢使用 @import 方法…
在根目录下创建一个 style.scss 文件……打开它,@import “/scss/style.scss”;并继续在 scss 文件夹中使用每个文件……我从一开始就使用这种方法,因为我也喜欢分块工作,所以它很适合我。
我使用 Scout 来编译我的 SASS,它允许我将 style.css 输出到任何我想要的地方。我以为 CodeKit 也允许这样做。不是吗?
CodeKit 本身可以,但是 Compass 有自己组织文件的方式,所以当你使用 Compass 时,即使在 CodeKit 项目中,它也会覆盖 CodeKit。
如果你查看 Chris 文章中的
config.rb
,你会看到它定义了sass_dir
和css_dir
,所有sass/scss
文件都放在sass_dir
中,并输出到css_dir
,你无法为单个文件设置输出路径。Chris 的文章就是关于:如何使用 Compass 将那个唯一的
style.css
文件放在与css_dir
(即css/
)不同的目录中。使用主题根目录下的 style.css 来定义主题本身,而不是其他任何东西怎么样?
你可以在这里查看我的解决方案 这里。
感谢你提供的详细教程,但我需要学习更多关于 Ruby 的知识才能尝试这个。
刚尝试使用 fire.app 进行了 Ruby 的变通方法,只是想让其他人知道,只有在点击应用程序上的“清理并编译”后才会生效。我认为 fire.app 仅在清理并编译时才会运行 config.rb,而不是在每次保存样式表时都运行。Compass.app 也可能是这样,因为它们是由同一个开发者开发的。
我使用 Fire.app,它会监控 scss 文件的每次保存。它也会刷新浏览器,尽管它是一个 WordPress 浏览器。不确定这是否与版本有关,因为我使用的是两天前发布的最新版本。
我认为以前它不会在每次保存时都刷新浏览器,因为它使用的是 WordPress,并且 URL 是 localhost/domain,但 sass 文件位于 localhost/domain/wp-content/themes/my-custom-theme/library/sass 深处。
你好,
请查看我的工作 https://github.com/tokokoo/pondasee 我正在构建这个前端启动器来与 WordPress 主题一起工作,怎么样?
我一直使用 WordPress Bones 启动主题,我喜欢它们简单易懂的文件组织方式。每个资源都放在 'library' 文件夹中。
所以,我的 config.rb 文件如下所示
http_path = “/”
css_dir = “library/css”
sass_dir = “library/scss”
images_dir = “library/images”
javascripts_dir = “library/js”
这会将 scss 文件编译到 library/css 文件夹中,然后加载。
不确定评论是否显示了,因为我在电子邮件地址中打错字了 :|
嗨,我见过一些网站,并且在 Chrome 中使用“检查元素”查看它们的 style.css 文件,我没有看到文件顶部有任何注释。有人知道他们是怎么做到的吗?一个 WordPress 网站的 style.css 文件中没有任何注释,这是怎么实现的?
了解 CSS 技巧总是有用的。我也知道 CSS 代码放在哪里一直让我很困惑,尤其是在考虑到有多种方法可以做到这一点的情况下。此外,网上不同的资源使用不同的方法,因此一些不太精通技术的人可能会感到困惑。
由于我使用 Catalyst 开发主题进行 WordPress 开发,因此我使用它们的自定义 CSS 部分,这简化了整个过程。或者对于那些真的不理解如何实现的人,你始终可以使用新的 WordPress 模板构建器 拖放解决方案,这可以帮助你绕过整个过程。
我发现 WP 主题的 style.css 是放置版本历史记录、此版本的新增功能等的理想位置,并让例如 Compass 负责文件夹结构以保持事物的有序性;包括在你的 header.php 中正确引用 CSS 文件(例如屏幕、打印、ie,如 Compass 建议的那样)。
——不过,不确定这是否会破坏子主题的兼容性。