【问题标题】:Sass within WordPress [closed]WordPress 中的 Sass [关闭]
【发布时间】:2016-04-04 16:04:40
【问题描述】:

我想在我的一个 wordpress 项目中使用 SASS(这将成为未来项目的样板)。我希望以遵循以下标准的方式做到这一点:

  • 通过 sass-lint
  • 遵循 Wordpress 标准(例如主题标题)
  • 干净、一致且易于维护

我有一些想法,但没有一个符合上述标准。

1。删除 style.css 并单独使用 Sass

/index.php
/... other wordpress files ...
/assets/sass/main.scss
/assets/sass/...other sass files...

运行sass 后,style.css 将在根目录中创建。

优点:

  • 一致性
  • 易于维护

缺点:

  • SCSS-Lint 不喜欢“WordPress 主题标题注释”,因为它更喜欢 // cmets
  • 不编译 sass 就无法在 WordPress 后端选择主题

2。同时使用style.css 和 Sass

/index.php
/style.css
/...other wordpress files...
/assets/sass/main.scss
/assets/sass/... other sass files...

优点:

  • 基本解决了(1)的缺点
  • 即使它不应该是那样的;无需任何工具即可轻松将快速更改添加到style.css

缺点:

  • 不一致
  • 冗余
  • 需要多个 CSS 请求(一个用于style.css,一个用于已编译的 sass)

我最大的问题是:把编译好的 SASS 放在哪里?将它与style.css 连接起来似乎很奇怪。

有什么想法吗?谢谢!

【问题讨论】:

  • 只有一个 CSS 请求。对于我的项目,我只使用 style.css 为管理员提供主题信息,但我不会在前端加载它。但我想应该加载 style.css 以便用户可以在管理端添加 css 属性......这取决于你需要什么。
  • mhs.github.io/scout-app 你可以使用 scout sass 编译器
  • @lanis 问题在于没有“特定需求”,因为它将用于不同的项目 - 以及不同的需求。不加载style.css 似乎也有点奇怪。
  • 为什么连接 style.css 和你的 SASS 生成的 css 看起来很奇怪?对我来说,它应该是这样的:你将你的样式和 SASS 分开,直到你需要它们在现场合并在一起
  • 这个项目是个人项目还是您希望最终发布到 Wordpress 的项目。另外您使用的是什么构建过程?

标签: css wordpress sass


【解决方案1】:

使用styles.css 来输出你的sass 怎么样?这就是我所做的,它解决了你的许多问题:

  • 确保您使用的是子主题。
  • 您可能希望在本地安装 wordpress 而不是在服务器上工作。这个link 将帮助你完成这个过程的大部分。这是绕过选择正确主题的好方法。您可以使用他的编译器将输出路径到正确的文件。我使用Koala,但有很多很棒的可供选择。
  • 以部分形式(即_theme.scss_responisve.scss_animate.scss 等)创建您的 scss 文件。
  • 创建一个styles.scssfile。
  • 注入尽可能多的 scss 资源,而不是使用它们的 css。例如,Bootstrap 有自己的 scss,Font Awesome 和 Animate 也有。
  • @import styles.scss 中的所有这些部分文件,并将输出定向到 style.css 或者最好是缩小(压缩)版本 - styles.min.css
  • 从您已在新 scss 文件中导入的所有入队样式表中清除您的 header.php
  • 检查并清理您的 function.php 是否相同。

而且真的没有什么其他东西了。

编辑

如果您的设计人员缺乏 SCSS 方面的经验,他们可以在 SCSS 文件中使用 CSS 进行编码,并且仍会编译为 style.min.css。当然,利用 SCSS 功能要好得多,但这是一个与所需经验和知识有关的问题。仍然实现了 SCSS 无缝编译成一个文件(style.css)。

cale_b - “您可以创建一个“custom.scss”文件,供您的设计师使用(他们可以使用 vanilla CSS),并且最后导入,以便其样式覆盖任何其他 scss 规则”

【讨论】:

  • 查看第 1 点的缺点。没有运行任务运行器(或手动编译 sass)的 style.css 并不是我想要实现的。我希望设计师能够在不安装 SASS 和其他所有东西的情况下更改小事。
  • 您的设计师是否需要了解 SCSS?
  • 如果您将协作(项目管理)插件添加到您的 wordpress,您可以让它们在同一个文件中无缝工作(在本例中为 style.scss)。而不是在 style.css 中。如果他们没有scss经验,scss文件中的css代码也会编译kinsta.com/blog/project-management-plugins
  • 作为一个附加点(加强@LOTUSMS 点) - 您可以创建一个“custom.scss”文件,供您的设计师使用(他们可以使用 vanilla CSS),并且是最后导入的,因此它的样式会覆盖任何其他 scss 规则。
  • @cale_b 好点!我会将其添加到答案中并正确地归功于您。对于这些情况,我有一个 developers.css 。我通常希望不是前端开发人员的每个人都远离我的 SCSS 或 CSS 文件,哈哈。他们往往太有创意了哈哈
【解决方案2】:

为什么我们需要“style.css”?

在我给出我的解决方案之前,我认为了解我们在 Wordpress 中需要 style.css 的原因很重要

在 Wordpress 中,需要 style.css 文件才能在后端中查看主题信息。

style.css 也用作get_stylesheet_uri() 的默认输出。不过,这可以使用stylesheet_uri 过滤器进行自定义。

在我看来,Wordpress 强迫您在style.css 中包含主题信息这一事实只是糟糕的设计,因为它增加了大约 1032 个字节。这不是很多,但完全没有必要;尤其是在可以避免的情况下,因为文件大小可能是影响网站性能的最大因素。

这与 Drupal CMS 不同,您的主题信息存储在单独的文件中,例如 yourtheme.info,因此永远不会暴露给最终用户


解决方案 1

现在我们解决了这个问题,这就是解决方案!

我认为最好的方法是:

  • 使用 import 和 partials(参见 http://sass-lang.com/guide#topic-5)将所有 sass 文件编译成一个文件(例如 style.min.css)。随意命名它。
  • 将所有 wordpress 主题标题保留在 style.css 中。

比如这样:

style.css

/*
Theme Name: Twenty Thirteen
Theme URI: http://wordpress.org/themes/twentythirteen
Author: the WordPress team
Author URI: http://wordpress.org/
Description: The 2013 theme for WordPress takes us back to the blog, featuring a full range of post formats, each displayed beautifully in their own unique way.
Version: 1.0
License: GNU General Public License v2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
Tags: black, brown, orange
Text Domain: twentythirteen

Use it to make something cool, have fun, and share what you've learned with others.
*/

style.min.css

p{color:red;}h1{color:blue;} ...

然后,您可以使用 functions.php 文件中的以下代码确保在前端的每个页面上添加新样式表:

function theme_name_stylesheets() {
    wp_enqueue_style('style-name', get_template_directory_uri() . '/style.min.css');
}

add_action( 'wp_enqueue_scripts', 'theme_name_stylesheets' );

请参阅:https://codex.wordpress.org/Function_Reference/wp_enqueue_style 了解更多信息

因此,当您在文档的head 中运行wp_head() 时,它会自动添加正确的CSS 文件。

然后你可以在你的 sass 文件上运行sass-lint,但你的主题信息仍然在你的style.css 中,两全其美。

优势

  • 通过 sass-lint,因为没有一个 sass 文件包含 /* ... */ 形式的 cmets,因为主题标题位于 style.css 而不是 style.min.css
  • 较小的文件大小用于样式表,因为 style.min.css 不再包含主题标题信息,因为它存储在 style.css
  • 更好的网站性能:由于您的所有 SCSS 文件都被编译成一个 CSS 文件,因此发送到您服务器的 HTTP 请求数量会减少,从而提高您的整体网站性能。

缺点

  • 两个 CSS 文件。没有太大的劣势,因为前端的用户只收到style.min.css,而不是style.css
  • 可能会混淆 Wordpress 社区中的用户。大多数 Wordpress 用户希望您的样式在 style.css 中。但是,我怀疑这将是一个很大的问题(特别是如果您没有发布主题)并且也可以通过简单的评论来纠正。

解决方案 2

解决问题的另一种方法是使用以下命令暂时禁用 scss-lint 注释规则:

// scss-lint:disable Comment
/*!
Theme Name: Twenty Thirteen
Theme URI: http://wordpress.org/themes/twentythirteen
Author: the WordPress team
Author URI: http://wordpress.org/
Description: The 2013 theme for WordPress takes us back to the blog, featuring a full range of post formats, each displayed beautifully in their own unique way.
Version: 1.0
License: GNU General Public License v2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
Tags: black, brown, orange
Text Domain: twentythirteen

Use it to make something cool, have fun, and share what you've learned with others.
*/
// scss-lint:enable Comment
p {
  font-size: 16px;
}

还要注意 loud cmets 的使用(即/*! ... */ 而不是/* ... */)。这基本上意味着不应在 sass 的缩小版本中删除此注释。

优势

  • 一个 CSS 文件
  • 不太可能让 Wordpress 社区中的用户感到困惑
  • 通过 sass-lint,因为评论规则暂时被禁用!
  • 更好的网站性能:(与解决方案 1 相同的原因)

缺点

  • 较大的文件大小用于样式表,因为编译后的 CSS 文件包含主题标题信息。不过,这只是小幅增长。

不使用 Sass 或 Grunt/Gulp 的最终用户怎么办?

从您提到的另一条评论中,您说您希望用户能够在不安装 sass 或构建自动化工具的情况下更改小事。

这并不意味着您不能使用构建自动化工具。这只是意味着您从解决方案 1 或解决方案 2 编译的 CSS 文件不应缩小,因为用户无法轻松编辑文件!不幸的是,这意味着您的网站的文件大小会大得多,因此会变慢。

或者你可以有两个文件:

  • website.min.css: 编译后的 SCSS 的缩小版
  • website.css:编译后的SCSS的扩展版

[再一次,随意命名]

然后如果用户希望在不使用 sass 或 Grunt/Gulp 的情况下进行快速更改,那么他/她可以通过 website.css 进行更改(但是,用户还需要更改 functions.php 中正在加载的文件)

此外,具有 sass 经验的有经验的用户或不想进行任何更改的用户不必妥协,因为他们仍然可以利用快速缩小的 website.min.css 版本!

两全其美!

【讨论】:

  • 解决方案 1 是我几乎一直使用的解决方案。 style.css 仅被 Wordpress 用于获取主题信息,所以我根本不将它用于前端目的。对了,你可以把编译好的Sass放到一个css文件夹中,也就是IMO,比较方便。
  • 感谢您的帖子;我已经以这种方式实现了它(解决方案1)。希望我们的设计师能和我一样满意。
  • 我发现这个答案也很有用——谢谢!解决方案 1 的 php 代码中的一个小错字:'theme_name_scripts' 应该是 'theme_name_stylesheets',即对 add_action 的调用。
  • @Dietrich 好收获
  • 如何制作 style.min.css 顶级。我创建了店面的子主题,并且有许多其他 css 文件覆盖了我的 style.min.css
【解决方案3】:

我将 gulp 与 sass 和 wordpress 一起使用,我将编译后的 sass 输出到 style.css 这是我的正常工作流程:

gulpfile.js

var gulp = require('gulp'),
    gulpLoadPlugins = require('gulp-load-plugins'),
    wiredep = require('wiredep').stream,
    $ = gulpLoadPlugins(),
    browserSync = require('browser-sync');
    p = require('./package.json');

gulp.task('sass', function (){
    return gulp.src('scss/**/*.scss')
    .pipe($.sourcemaps.init())
    .pipe($.sass())
    .pipe($.concat('style.css'))
    .pipe($.autoprefixer())
    .pipe($.sourcemaps.write())
    .pipe(gulp.dest('.'))
    .pipe(browserSync.reload({
      stream: true
    }));
});

gulp.task('sass-prod', function (){
    gulp.src('scss/**/*.scss')
    .pipe($.sass())
    .pipe($.cssmin())
    .pipe($.concat('style.css'))
    .pipe($.autoprefixer())
    .pipe(gulp.dest('.'))
});

main.scss

/*!
Theme Name: example
Theme URI: http://example.com
Author: xxxxxx
Author URI: xxxx
Description: xxxxx
Version: 1.0
*/

@import 'vars', 'typography', 'header', 'layout', 'proyectos', 'forms', 'libs';

【讨论】:

  • OP 提到他不想使用构建系统(出于任何奇怪的原因)作为对另一个答案的评论。还要感谢负载 cmets 的建议。不知道这个!
  • 我没看到谢谢你的澄清
  • 我建议留下你的答案,因为这对其他用户来说是一个很好的答案
  • 我正在使用构建系统;咕哝。但是有些人(主要是设计师)对这些工具不满意,我需要让他们能够改变一些小事情。
  • 一个问题是你会得到一个次优的解决方案。 IE。您将无法使用缩小。您可能会争辩说您甚至不能使用 sass,因为这需要终端上的命令,就像 grunt 一样。或者,您可以使用我的替代解决方案并使用构建系统将代码编译为最小化的代码,并为那些不习惯 grunt 的人编译一个单独的长 css 文件。 (见我的回答)。
【解决方案4】:

我这样做的方法是我有一个 main.css 文件,所有 SASS 都编译到该文件中,然后通过常规 CSS 导入将其导入到 style.css 中。

【讨论】:

  • 想详细说明否决票?
  • 您可能因回答的质量而被否决。它也没有建立在任何其他答案的基础上。也许提供一些代码、解释、优缺点等。(虽然我没有对你投反对票)
  • 我没有投反对票,但是,这就是我认为发生的事情“虽然这个答案可能会回答这个问题,但最好在此处包含一个好的答案的基本部分(一些相关代码和如果需要支持或信用,请提供链接以供参考)”。在这里度过一段时间后,您就会掌握它的窍门
猜你喜欢
  • 1970-01-01
  • 2010-12-17
  • 2011-10-04
  • 2010-10-22
  • 2013-06-09
  • 1970-01-01
  • 1970-01-01
  • 2016-04-15
相关资源
最近更新 更多