带有 Compass 和 Sass 的 Shopify 主题

Posted

技术标签:

【中文标题】带有 Compass 和 Sass 的 Shopify 主题【英文标题】:Shopify Theme with Compass and Sass 【发布时间】:2012-06-29 13:39:07 【问题描述】:

有人有使用 Compass 和 Sass 开发 Shopify 主题的工作流程吗?我真的很接近,我只需要弄清楚如何不在 CSS 液体标签上制作 Sass barf。

这是我得到的:

目录中的 sass/compass 项目(例如:“/newwebsite/) 包含我的 Shopify 主题的子目录(“/newwebsite/newwebsite-theme/”) Compass config.rb 将 css、_dir images_dir 和 javascripts_dir 全部指向它们的资产文件夹(“/newwebsite/newwebsite-theme/assets/”) 指南针手表开启 shopify_theme gem 也关注,上传主题文件到 shopify (https://github.com/Shopify/shopify_theme) 编辑 Sass 插值(参见下面的分析器) 编辑 Compass 回调以重命名为 .css.liquid

问题:当您需要使用 Shopify 的液体模板标签时出现 Compass barf,例如背景图片 - 例如 background: url( " "splash-1.jpg" | asset_url ")

有谁知道如何指示 Compass / Sass 将液态模板标签吐出到 CSS 中?如果我有,那么我就有了在本地编辑 Sass 并在 shopify 商店之后立即实现更改的可靠工作流程。

谢谢

编辑: 通过使用 Hopper 对 Sass 中的液体标签的回答,并将 Compass 输出的 .css 文件重命名为 .css.liquid,我现在有了一个使用 Compass 和 Sass 设计 Shopify 主题的即时工作流程! 这是 config.rb 中 Compass 回调的代码:

on_stylesheet_saved do |filename|
  s = filename + ".liquid"
  puts "copying to: " + s
  FileUtils.cp(filename, s)
  puts "removing: " + filename
end

【问题讨论】:

我曾一度尝试这样做,但一无所获。使用自定义 SASS 扩展可能是可能的,或者如果有一个指令告诉 sass 编译器忽略并按原样输出,但我没有找到任何可行的方法。 【参考方案1】:

我不熟悉 Shopify 或液体标签,但我知道在 SASS 中您可以使用 interpolations 按原样输出纯 CSS。例如这里的 SASS:

.test 
    background: url( #' "splash-1.jpg" | asset_url ' )

将被编译为:

.test 
    background: url( "splash-1.jpg" | asset_url ); 

这会让你接近你正在寻找的东西吗?

【讨论】:

是的!我还使用 on_stylesheet_saved Compass 回调将 CSS 文件重命名为 .liquid。我现在有一个即时工作流程谢谢 hopper! 我一直在寻找一种方法来做到这一点 +1【参考方案2】:

您如何防止 Compass 对属性之间的流动逻辑大谈特谈?例如。任何时候有一个流动的if 声明我都会出错,使用#'...' 似乎没有帮助。

这是我无法上班的测试:

#container 
  width:884px;
  margin:0px auto;
  min-height:500px;
  position:relative;
  padding:0 40px;
  % if settings.page_bg_transparent %
    background:transparent;
  % else %
    background: settings.page_bg_color ;
  % endif %

更新奇怪的是,评论液体逻辑有效:

#container 
  width:884px;
  margin:0px auto;
  min-height:500px;
  position:relative;
  padding:0 40px; 
  /* % if settings.page_bg_transparent % */
    background:transparent;
  /* % else % */
    background:#' settings.page_bg_color '; 
  /* % endif % */

【讨论】:

谢谢,这真的很有帮助! 这正是我想要的。我正在使用 Gulp,Theme,如果在我的 SCSS 文件下,我在将单引号排序为内联时遇到了麻烦。谢谢!【参考方案3】:

对于资产 url,您也可以使用 SCSS custom functions。 把它放在你的 config.rb 文件中

module Sass::Script::Functions
  def shopify_image_url(string)
    assert_type string, :String
    Sass::Script::String.new("url('#string.value' | asset_url)")
  end
end

然后像这样在你的 styles.scss 中使用它

background: shopify_image_url('image.png');

【讨论】:

【参考方案4】:

我发现保存后删除原始输出文件很有用,这样您就不会在资产目录中浮动那个额外的非流动文件。

on_stylesheet_saved do |filename|
  s = filename + ".liquid"
  puts "copying to: " + s
  FileUtils.cp(filename, s)
  puts "removing: " + filename
  FileUtils.remove_file(filename)
end

【讨论】:

【参考方案5】:

基于 hopper 的回答,对于使用 autoprefixer 处理 sass 输出的任何人,您都需要添加一对额外的引号,因为 url( ... ) 会导致 autoprefixer 的解析器阻塞。

这样做:

background: url( "#' "splash-1.jpg" | asset_url '" )

*.css.liquid 文件中变成这样:

background: url( ' "splash-1.jpg" | asset_url ' )

【讨论】:

【参考方案6】:

如果您希望为新的响应式结帐用途保留“.scss.liquid”扩展名:

on_stylesheet_saved do |filename|
  FileUtils.mv filename, "#File.dirname(filename)/#File.basename(filename,'.*').scss.liquid"
end

它重命名文件而不是复制然后删除。

【讨论】:

【参考方案7】:

我写了一篇文章,描述了我用来让 Compass 和 Sass 与 Shopify 一起工作的方法。这与 DOMUSNETWORK 的回答方法相同。我会更详细地介绍文件结构。

http://www.mealeydev.com/blog/shopify-and-sass/

【讨论】:

【参考方案8】:

这部分对我有用 - 但是我发现 Shopify Theme 应用程序很多时候不想上传我编辑的 .css.liquid 文件,因为它显然没有识别出该文件已被编辑。

为我解决的问题是在我的 config.rb 中使用以下代码,而不是上面问题中的代码:

on_stylesheet_saved do |filename|
  move_to = filename + ".liquid"
  puts "Moving from #filename to #move_to"
  FileUtils.mv(filename, move_to)
end

【讨论】:

【参考方案9】:

无耻的塞...

我认为@nick 是在正确的轨道上。

scss 在发送到 Shopify 之前编译会更好。

对于找到此答案的其他人,我认为 Quickshot 是您正在寻找的工具。

您仍然需要对资产 url 进行插值,但 quickshot 会自动重新编译您的 scss 并一步将结果上传到 shopify。这还使您能够在 scss 文件中使用 @include

http://quickshot.io/

https://github.com/internalfx/quickshot

【讨论】:

以上是关于带有 Compass 和 Sass 的 Shopify 主题的主要内容,如果未能解决你的问题,请参考以下文章

由于版本冲突,无法安装 sass + compass + susy

Allenmind‘s Blog

PHPStrom使用SASS,SCSS和Compass

带有多个变量的 Sass @each

关于Sass与Compass的一些笔记

Sass学习笔记 -- 在Windows系统中安装Sass和Compass