我最近几乎在所有工作中都使用 Sass。 这里有一些关于这段旅程的思考。 从阻碍到绊脚石,再到令人却步之处。 从应用和团队到工作流程和语法。
必须在本地工作
促使我加入这个潮流的最大因素是放弃了我的随心所欲的实时 FTP 编辑方式。是的,Coda很棒,但它容易养成坏习惯。它使得在实时环境下工作变得过于简单,而不是在本地工作1。
本地工作有很多明显的优势。 具体来说,1)速度快 2)您可以随意编辑内容,而不用担心会搞砸网站,并且 3)它允许您通过版本控制有效地与团队合作(稍后将详细介绍)。
所以,就这么做吧。如果您只处理静态网站,您可以立即开始这样做。在您的机器上的某个文件夹中工作。如果您处理 PHP 网站(例如 WordPress、Joomla、PHP、Vanilla、CodeIgnitor、CakePHP 以及数百万个其他网站),那么使用 MAMP(我的截屏视频)是理想的选择。当然,所有平台都有 MAMP 的变体。
如果您使用的是 Ruby 或 Python 之类的东西,那么很有可能您已经知道如何设置这些东西,所以您没问题。
现在,我主要在本地机器上运行的项目上工作,使用预处理器变得很容易。我使用了几个很棒的应用程序,稍后我会介绍。
命令行 等等
我是一个设计师!我不知道如何使用命令行,也不需要知道。
关于 SASS,这是很常见的。事情是这样的:我和你们的想法一样。我讨厌命令行。您不需要使用它。我几乎从不使用它,任何事情都不用2。
其他令人却步之处
这可能听起来很幼稚,但另一个让我花了这么长时间才加入预处理器潮流的原因是这个群体。而且我并不是唯一一个这样的人。
我的天,通常你只要稍微谈到预处理器和 CSS,LESS/SASS 粉丝就会像猎犬一样迅速地扑向你。
—— Eric A. Meyer (@meyerweb) 2012年1月26日
很难对预处理器说任何话,更不用说稍微负面的评价了,否则就会遭到猛烈抨击。
很长一段时间,我一直认为:我每天都在编写 CSS。我对 CSS 非常了解。我的工作流程很好。我的工作效率很高。为什么需要改变任何东西?
真正的答案是,如果你不想改变,就没有必要改变。如果你对现在的工作状态感到满意:祝你好运。
我可以告诉你,在做出改变之后,我的工作效率实际上更高了。并且我编写了更好的 CSS。而且我参与的项目也因此变得更好、更易于维护。在某些情况下,速度也更快了3。我的建议是:不要让别人对你指指点点。只管做你需要做的事情。如果你有时间尝试一下,就去做。并且要在真实的项目中尝试。只是胡乱尝试是不够的。你必须真正尝试它,才能了解它如何适应你的日常工作。
应用程序
我只有使用 Mac 应用程序的经验。抱歉。我相信其他平台上也有一些非常不错的应用程序。
让我开始使用所有这些预处理器好处的应用程序是 LiveReload(截屏视频)。我仍然是它的粉丝。它现在可以在 App Store 上以 9.99 美元的价格购买。它是一个菜单栏应用程序,点击菜单栏中的图标会打开一个选项窗口。

您可以告诉 LiveReload 监视特定文件夹。当该文件夹中的任何文件发生更改时,它会触发预处理。它可以处理大量预处理器。对于 CSS:LESS、SASS(带 Compass)或 Stylus。对于 JavaScript:CoffeeScript 或 IcedCoffeeScript。对于 HTML:HAML、Jade、Slim 或 Eco。
预处理完成后,它会在您安装了 浏览器扩展 的任何浏览器中重新加载页面。如果您更改的只是 CSS,它会将样式注入到页面中,而无需刷新页面。这在您在特定状态下的页面上设置样式时特别有用。假设单击会触发打开一个对话框,并且您正在尝试设置该对话框的样式。使用 LiveReload,您可以保持该对话框打开状态,新注入的样式将影响它,这意味着不会浪费很多时间点击和重新点击。
但最近我切换到了 CodeKit。CodeKit 的 UI 更好,功能更多(例如图像优化、JS 连接)并且限制更少(您可以选择是否预处理文件以及文件放置的位置,而 LiveReload 则是在导入后无法对其进行编译)。我唯一怀念的是 LiveReload 在不重新加载页面的情况下注入 CSS 的能力,对于具有复杂状态的网站来说,这是一种方便的功能,这些状态需要多个步骤才能在重新加载后将页面恢复到该状态。 2012 年 4 月更新:CodeKit 现在可以实时注入 CSS 了。
不过,我对 LiveReload 有几件事不太满意。其中一个是您告诉它已编译源的输出路径的屏幕

注意那些灰色的部分?它试图变得聪明一点,并注意到您已在其他地方包含了该文件。因此它不会进行编译。但是,如果您想出于其他一些原因对其进行编译呢?太糟糕了,无法做到。它只是一个糟糕的 UI,而且使用起来可能有点棘手。
因此,CodeKit 出现了。CodeKit 拥有一个漂亮的 UI。

更改文件路径到文件编译到的位置非常容易。而且我从未需要教它,它似乎能够识别目录结构并从一开始就正确设置。它也会将包含的文件也变灰,但您可以轻松地打开和关闭此功能。
CodeKit 仅限于 LESS、Sass、Stylus、CoffeeScript 和 HAML。我发现这有点限制,因为我在一些项目中使用了 Jade 来预处理 HTML。Jade 能够进行 HTML 包含,这非常有用。
CodeKit 的错误报告非常好。很清楚发生了什么,并且在解决问题时感觉很好。

将其与 LiveReload 进行对比,在 LiveReload 中,一个小窗口从屏幕右上方滑下,显示被截断的文本,没有关闭按钮,并且在您解决问题后会自行消失。
CodeKit 也无法执行 LiveReload 可以执行的样式注入。创建者对这一点的感受如下
@chriscoyier 我对此犹豫不决。看到刷新发生有一种舒适感。
—— Bryan Jones (@bdkjones) 2012年2月6日
更新:CodeKit 现在可以进行实时注入。
最终,我认为 CodeKit 现在是我的最爱。使其脱颖而出的原因是它拥有所有其他功能。它可以自动bless CSS。它可以连接和压缩 JavaScript。它可以告诉你哪些文件包含了任何其他特定文件。也许我最喜欢的是:它可以一键优化图像。
团队
另一个可能阻碍使用预处理器的因素:团队合作。特别是多个成员进出同一 CSS 文件的团队。如果是这种情况,所有这些成员都需要设置您正在使用的任何预处理应用程序(您可以使用不同的应用程序,这没问题。最好是它们都运行预处理器的相同核心版本)。您不能让一些成员编辑 .css 文件,而其他成员编辑 .scss 文件。下次有人编译并提交时,对 .css 文件的这些更改将被覆盖。预处理器在这方面是不可饶恕的。它们不会说“嘿,看起来这个 .css 文件与我上次编译时有一些不同的内容,你想先看看吗?”不,它们只会覆盖它。
尽管如此,这是可行的。在短时间内,我们将所有Wufoo迁移到了SASS。实际上,我们先将其中一部分迁移到了LESS,然后一部分迁移到了Stylus,最后全部迁移到了SASS。真是太麻烦了。感谢Kevin的贡献。我们还在SurveyMonkey的所有新开发中使用了一套大型的设计模式,这些模式都使用了SASS。
如果有人有任何关于预处理器的团队策略,分享出来将会很有价值!
Compass
我敢肯定,有些人会因为我没有使用Compass而感到沮丧。我知道,我知道。我应该用。但显然我对这些东西反应比较慢。我喜欢在继续之前尽可能深入地理解事物,而Compass对我来说仍然有点复杂。如果有人不知道Compass是什么,它其实是一套用于SASS的大型插件。从本质上讲,这意味着您不必编写那些可能需要在每个项目中都以相同方式编写的代码。CSS3混合宏、网格助手、精灵助手、文件路径助手等等。
我的问题是我还没有准备好放弃所有这些东西。我想自己编写。我相信总有一天我会放弃的,但现在还没有。
让我绊倒的小问题
这篇文章最初以这个标题开头,后来扩展成了现在这样。但是,不管怎样,我想我仍然会包含这些让我在学习过程中感到痛苦的小细节。
由于我编写自己的CSS3混合宏,我可能会有一个像这样的box-shadow混合宏
@mixin drop-shadow ($x: 1px, $y: 1px, $blur: 2px, $spread: 0, $alpha: 0.25) {
-webkit-box-shadow: $x $y $blur $spread rgba(0, 0, 0, $alpha);
-moz-box-shadow: $x $y $blur $spread rgba(0, 0, 0, $alpha);
box-shadow: $x $y $blur $spread rgba(0, 0, 0, $alpha);
}
它充满了合理的默认值,因此最标准的用法可以是
.module {
@include drop-shadow();
}
或者如果我想更具体一些,我可以指定每个部分
.module {
@include drop-shadow(5px, 5px, 2px, -2px, 0.5);
}
但是如果我想使用多个box-shadow呢?这个混合宏还没有准备好处理这种情况。对于这种情况,我还准备了超级通用的混合宏,这些混合宏就是规范名称
@mixin box-shadow ($string) {
-webkit-box-shadow: $string;
-moz-box-shadow: $string;
box-shadow: $string;
}
这个混合宏只接受一个参数,任何我想给它的东西。所以用法可以是
/* Bad! doesn't work! */
.stack {
@include box-shadow(
1px 1px 0 rgba(0, 0, 0, 0.100),
3px 3px 0 rgba(255, 255, 255, 1.0),
4px 4px 0 rgba(0, 0, 0, 0.125)
);
}
但这不起作用。其中的所有逗号都会让SASS感到困惑。它会认为您试图向一个只设置了接收一个参数的混合宏传递多个参数。您也不能只在尝试传递的值周围加上引号,这样也不起作用。答案是使用双括号技术
@include box-shadow(( whatever, you, want, just, one, param ));
另一件让我感到困惑的事情是尝试在值中使用变量,其中变量只是值的一部分。最基本的是,变量超级简单
$red: #F00;
.red {
color: $red;
}
但我试图做的是
$path: "/images/";
body { /* Bad! No! */
background: url($path + texture.jpg);
}
为了使它工作,您必须使用哈希/括号的方式
$path: "/images/";
body {
background: url(#{$path}texture.jpg);
}
// or
body {
background: url($path + "texture.jpg");
}
还有一件可能令人困惑的小事。在进行嵌套时,&字符具有特殊的含义。它等于到该点为止的选择器。例如
a {
color: red;
&:hover {
color: pink;
}
}
变成
a {
color: red;
}
a:hover {
color: pink;
}
您可能以前见过这样的示例。使用像这样的简单示例并不能完全说明问题,但无论如何,嵌套很快就会变得自然,您会喜欢它。
但回到那个&字符。
您**不需要**这样做
.module {
& h3 {
}
& p {
}
}
这仅仅是因为嵌套而隐含的,您不需要在那里使用&。只有当它不是后代选择器(空格)时,才需要它。当您稍后在选择器中使用&时,事情可能会变得非常性感。例如,如果您使用Modernizr检测多个背景
body {
.multiplebgs & {
}
.no-multiplebgs & {
}
}
这为您提供了一种非常干净的分支,用于处理支持和不支持的情况,同时将代码逻辑地嵌套在body { }
语句中。
那个该死的FTP工作流程
即使我已说服您在本地工作,使用版本控制,并使用预处理器,但部署问题仍然存在。如果您的工作流程是从实时编辑到现在在本地工作,那么您的工作流程效率实际上可能会倒退一步,当您想上线时,您必须手动将更改的文件上传到服务器。恐怕我无法为您提供一个完美的解决方案。
Nettuts用“完美的工作流程”来处理这个问题,但这依赖于一个GitHub提交后钩子,该钩子会命中一个执行`git pull`
的PHP文件,这在我访问的任何服务器上都不起作用,并且据我了解,共享主机很少允许这样做。
这就是基于应用程序的云托管真正闪耀的地方。像Heroku(用于Ruby)或PHPFog(用于PHP)这样的应用程序可以完美地融入您的基于Git的版本控制工作流程。您可以设置一个命令用于推送到存储库,另一个命令用于部署上线,或者设置当您推送到存储库时自动上线。
但是,这些云主机并不适合所有人。当我做代理工作时,绝大多数工作只是在一些通用的共享主机上的网站。您始终可以在这些服务器上安装Git,然后在将内容推送到存储库后,SSH到服务器并从那里执行git pull。这更好,但仍然有点笨拙,并且需要使用命令行。
理想情况下,像Git Tower这样的应用程序可以管理您的Git存储库,**并且**处理FTP,根据命令上传已过期的文件。
对于那些坚持使用FTP4工作流程并且不害怕命令行的人,这个看起来很有希望。
其他CSS预处理器
正如我所说,我目前选择了SASS作为我的首选CSS预处理器。但是LESS和Stylus呢?
LESS是我尝试的第一个,老实说我仍然喜欢它。我非常喜欢您编写的所有类如何自动可重用为混合宏。像
.screen-reader-text {
position: absolute;
top: -9999px;
left: -9999px;
}
label {
.screen-reader-text;
}
这非常有用,并且比SASS更简洁。但是我被告知将类和混合宏的概念混合在一起从根本上是有缺陷的。我不确定是怎么一回事,但事实就是这样。如果有人愿意解释一下,我非常乐意倾听。
我对LESS的一个主要缺点是,当我仅仅使用标准的@keyframe动画语法时,就会出现错误。因此,我最终不得不将这些内容拆分到另一个文件中,但这些文件必须是.css,以避免触发错误,然后我也不能@import它们(从字面上包含内容),因为文件扩展名的问题。也许他们已经修复了,我不确定。
Stylus也很好,主要是因为它的灵活性。它不会像其他预处理器那样对您吹毛求疵。花括号和分号是可选的,而不是强制要求的。虽然Stylus很好用、功能强大且健壮,但我最终认为它背后的开发不够强大,无法让我产生信心。它主要是一个人(TJ Holowaychuk)在维护。
SASS最终胜出,因为它是最成熟的,最容易找到相关信息和帮助的,似乎拥有最活跃和最强大的开发团队,并且错误最少。
此处的教程和结语
仅供记录,我不会开始在我的基础CSS教程中加入SASS。CSS很可能比SASS更长寿。此外,我认为理解CSS比某种特定的预处理器方法重要得多。事实上,如果一个CSS新手问我他们是否应该在学习CSS的同时学习SASS,我可能会说不要。先学习CSS的工作原理,然后再看看预处理器如何帮助你。这与我对JavaScript和jQuery的感觉相反,我认为先学习jQuery是可以的。奇怪。
从本质上讲,我认为您应该了解编写真正优秀的CSS是什么样的。最终的CSS文件是什么样的。浏览器读取和处理以设置网站样式的实际文件。然后使用预处理器使最终的、绝妙的CSS文件更容易编写和维护。
重点是:编写你的sass/less,使其输出与你没有使用它时编写CSS的方式完全相同。
—— Chris Coyier (@chriscoyier) 2012年2月2日
1 是的,它内置了Subversion,但感觉有点不自然。如果您喜欢Subversion(当然可以,它很容易),我认为您最好使用Versions。
2 除了像这样的小事情或在工作中我需要启动运行Python等的本地服务器的地方。但即使那样,我也很勉强。
3 在Wufoo,我们从使用PHP动态组合和压缩脚本切换到通过预处理器组合和压缩,这减轻了服务器负载,并实现了更高效的CSS压缩。
4 显然,我所说的FTP是指SFTP。
我对 SASS 和 LiveReload 还比较陌生,但到目前为止,我唯一不满的是我无法真正按照我喜欢的样式来布局处理后的 CSS。在 CSS 的制表符结构和布局方面,我有点强迫症,最终的结果并不是我想要的。
你编写的文件不应该是你部署的文件。生产环境的 CSS 应该被连接并经过压缩,看起来会非常丑陋。
同时,你的原始 .sass 或 .css 文件可以按照你喜欢的任何方式格式化。为它们的布局感到自豪,但在创建用于生产环境的丑陋文件方面要毫不留情。 :)
例如:这是此网站的主要 CSS 文件:https://css-tricks.org.cn/wp-content/themes/CSS-Tricks-9/style.css
感谢你们的提示!你们能推荐一些用于连接和压缩我的 CSS 的特定工具吗?谷歌给了我很多选项,但从 UI 的角度来看,没有一个真正脱颖而出。
Josh,你可以使用HTML5 Boilerplate 构建脚本来压缩和优化你的整个网站。
但如果你只想压缩你的 CSS,可以使用 YUI 压缩器,用于 CSS:http://developer.yahoo.com/yui/compressor/css.html
PS:H5Bp 构建脚本也使用 YUI 压缩器。
如果你将 SASS 与 Compass 结合使用,Compass 可以在你处理代码时选择压缩你的代码。非常方便的功能。
很棒的评论!我刚接触 CSS 预处理,但在某些情况下(例如小型演示)我确实更喜欢“老派方法”。
此外,我需要指出你错过了“Closure Stylesheets
”(也由 Google 使用)。它与 LESS/SASS 做的事情几乎相同,但还增加了一些其他功能。
“重点是:编写你的 sass/less,使其输出与你没有使用它时编写的 CSS 完全相同。”
CSS 预处理器确实有助于使 css 更易于维护。其主要原因不是它们生成的输出的强大功能,而是它们提供的工具(mixin、变量)。在处理大型项目并且无法使用 LESS/SASS 功能的情况下,我宁愿尝试使用其他技术(如 oocss)来实现类似的效果,这最终将使输出看起来有所不同。我想表达的观点是,以 LESS/SASS 的方式编写你的 css 并不会使其变得更好。
很棒的文章。我刚刚开始使用 CSS 预处理,所以很高兴听到你的经验。
当你使用标准方法编写 CSS 这么长时间后,很难做出改变。但这鼓励了我——听到你效率更高。
对于 FTP 的问题——如果你在 21 世纪仍然使用 FTP 进行实时站点部署,你可能做错了。
怎么会这样?我个人离不开在 ftp 上工作。我几乎尝试了一切。在 php 代码、js 代码和 css 代码方面,你将如何更改 CMS 网站?你的工作流程是什么?
我正在寻找一个解决方案,允许我从多个位置在同一个 ftp 项目上工作。有什么想法吗?
谢谢
如果你有服务器的 shell 访问权限,你可以这样做
1) 将你的网站放到 Github 上,以便任何计算机都可以访问它。
2) 将你的网站文件夹(这是一个 git 仓库 `git init`)指向与你在本地开发时使用的相同远程仓库。
3) 从你的本地机器或任何其他克隆了该仓库的机器将更改推送到远程 Github 仓库。
4) 使用 `git pull` 将这些更改拉取到你的服务器上。
完成。
请解释一些建设性的替代方案。我有这么多客户使用共享(仅限 ftp)服务器……我看不到其他方法。即使他们有 SFTP,他们也不会让我安装 git。阻碍我一些项目的主要因素也是易于部署。
非常棒的文章,Chris。感谢你的观点。也很高兴看到 Paul Irish 也在这里。也要继续阅读他关于 Chrome Dev Tools 的作品,绝对是高质量的东西,伙计们,谢谢。
我同意 Jason 的观点
小型客户的服务器上没有 git,或者主机不支持它。除非你找到拥有自己专用服务器的客户,否则很难找到不通过 ftp 编码的方法。
我建议查看 Beanstalkapp.com。我们将其用于大多数网站项目。它基本上是一个托管的 git/svn 服务,类似于 Github,但可以通过 S/FTP 自动部署。
我已经使用 Sass 一段时间了,在编写了多年的 CSS 之后,我不得不说我同意几乎所有观点。我无法谈论那些小程序工具,因为我喜欢命令行。最重要的是,开发人员首先必须理解 CSS,然后深入理解预处理器的作用以及它们是如何工作的。
有人知道任何不错的 PC 应用吗?我不是 Mac 用户。
使用适用于 Windows(XP+)或 Linux 的 LiveReload
Scout 是另一个跨平台应用:http://mhs.github.com/scout-app/
尝试 Simpless,这是一个不错的工具,但我认为它仅适用于 LESS 样式表。
http://wearekiss.com/simpless
你尝试过 CSS Crush 吗?它对预处理采用了略有不同的方法,不过仅限于 PHP。
我本来想问同样的问题。我一直关注着这个项目,但还没有尝试过。
他们的方法确实让我很感兴趣。你编写原生 CSS 文件,这很酷,而且开发人员确实试图使他的语法尽可能接近正式提案(例如:any 伪类)。我认为这是纯 CSS 和 LESS/SASS 之间的一个很好的折衷方案。如果你正在学习 CSS 或引入新的团队成员,CSS 看起来并不那么陌生,同时仍然提供了预处理器的许多好处。
我也喜欢它基于 PHP 并且可以组合、处理和缓存服务器端内容。
也就是说,阻止我尝试它的原因是我在预处理器中真正想要的两三件事,由于其“语法纯净”的方法而缺失了。我可以不用 mixin(尽管我猜别名基本上可以做到同样的事情),但我确实非常想要嵌套选择器,首先是(:any 似乎并没有提供相同的好处)。
无论如何,这可能是我在某个时候首先尝试的一个。
你对此有什么看法?
我一直在听到关于 SASS 和 LESS 的消息,但我一直避免使用它们,而是使用我笨拙的 BBEdit 方法,尽管我有点好奇想在一个当前项目中尝试预处理。
原因之一,不太可能是 SASS。我发现他们的标志是“打电话的性感秘书”,以及标语“有态度的风格”,这些都无聊地具有性别歧视,而且令人反感。这是一件小事,只是一个标志和标语,但这是我看到的第一件事,但科技领域中存在过多的性别歧视。
在一个完全不同的主题上,如果你使用的是 mac,放弃 MAMP 并不算太难。OSX 已经安装了 Apache,可以使用软件包安装 MySQL,Sequel Pro 是 phpMyAdmin 的一个很好的替代品——甚至升级 PHP 也不是太痛苦,对于那些不想使用命令行的人,VirtualHostX 或类似的工具使设置多个域名变得非常容易。
哈哈,你有没有在网上读过一篇短短的三段评论,然后瞬间意识到你一辈子都不想在现实生活中遇到那个人。如果你因为不喜欢某个产品/服务/工具的logo而放弃一个可能很棒的东西,我敢打赌你在现实生活中可能不太有趣。
@tommy,你有没有读过那些只有一段的评论,对谈话没有任何建设性的补充,只是为了抨击那些真正有意见的人?这纯粹是在浪费宝贵的电子。
只是想指出一下关于“你必须在本地工作”这一点。
我50%的时间都在远程服务器上工作,但我仍然可以在这些服务器上编译LESS(我知道这篇文章是关于Sass的,但理论应该是一样的)。我在我的Mac上使用Macfuse/Macfusion设置了一个卷,但你也可以使用最新版本的Transmit来实现。这就像在你的机器上本地工作一样,只不过它是远程的。
所以我在我的Mac上挂载了一个远程驱动器,并监控其中的文件夹,就像本地一样;因此,任何更改都会被捕获并处理。
现在,开始继续读这篇文章吧!:)
我也刚开始接触SASS,文章很棒。
如果有人能做一个关于如何配置工作站以及如何创建第一个文件的教程就好了。同时学习一些Ruby、Git、命令行,我有点不知所措。
不幸的是,我在工作中使用的是Windows环境。CodeKit看起来很棒,但我正在使用Aptana。
有没有不用Rudy或Python的选项?
如果你在21世纪看到有人用FTP编辑网站就皱起眉头并发表假道学的评论,也许你才是“做人”的方式不对?别做那种人。
请展开、阐述并进行教育!这听起来是一个有趣观点/技巧,也许有些人还没有听说过?
(……就像你之前没有听说过一样……直到你在某个地方读到或者某个乐于助人的人向你解释过?)
很高兴你提出了部署的问题。在我看来,部署版本控制的WordPress网站过于复杂。
如果你想尝试一下,有一些教程。
http://theme.fm/2011/08/tutorial-deploying-wordpress-with-capistrano-2082/
http://markjaquith.wordpress.com/2011/06/24/wordpress-local-dev-tips/
http://devpress.com/blog/a-really-sweet-wordpress-development-environment/
我几乎让一个网站成功运行了,但它花费了我很多时间,所以为每个托管在共享主机上的客户网站设置它似乎成本太高。我在Hostgator的支持团队的帮助下完成了它。
你没有提到Beanstalk,这可能是更容易部署的另一种选择:http://beanstalkapp.com
对于那些正在考虑预处理的人:看看Chrome的DevTools Autosave插件,它会在你在Web Inspector中编辑CSS时自动将其写回你的文件。这是一种非常快速的工作方式。
你无法在预处理抽象层的情况下执行此类操作。
Chris,
LESS
SASS
W00t Methemer——关于可重用类名的想法正是我想说的,特别是因为我刚熟悉了SASS的@extend功能。
顺便说一句——每个人都应该再看看@extend。快速搜索一下谷歌,获取一些解释 ->
Sass Extend 简介.
你可以跳过这篇文章中关于Less与Sass的争论,但它对@extend也有很好的概述。
用@extend让你的Sass飞起来
这应该足以引起你的兴趣了。:)
-Adc
这仍然是一个非常有缺陷的做法。最终,你会得到如下CSS输出
这显然是糟糕的代码。
关于命令行:我一直在使用命令行处理各种事情,但我仍然不喜欢用它来“编译”CSS/JS。通常你需要使用丑陋且难以记忆的语法,而一个简单的“右键点击 > [某个应用程序]”或集成到我的文本编辑器中会更好。SimpLESS非常好,我用它来处理我的普通CSS。
@Scott –
与mixins不同,@extend实际上会用逗号分隔符将选择器添加到原始选择器中。不过,如果链过长,这可能会导致新问题——但这似乎不是一个常见问题。
我喜欢使用SASS,但出于它会导致某种程度上紧耦合代码的事实,我倾向于避免使用这个特性……
如果以后有人在不知道它在其他地方用作@extend的情况下,向screen-reader-text类添加了一些规则会怎样。
至少使用mixins,你知道它是一段可重用的代码……使用带有@extend的类,就不是这样了……
顺便说一句,文章很棒,Chris……
@Scott –
这个问题很容易解决,只需将
screen-reader-text
设为一个无参数的mixin(只需添加括号)。通过这种方式定义
screen-reader-text
,它只会在你使用它时才会出现在样式表中(或者如果你不使用它,则根本不会出现)。我一直想使用CSS框架,但又担心它会让我对最近学习的jQuery语法感到困惑。Cris,你的帖子总是促使我学习新东西。我仅仅是从你的屏幕截图中学到的jQuery :)
你应该让一个超级极客为你的项目编写一个Makefile。
我们的前端开发人员只需在终端中输入“make static”或“make static-auto”(我保证这并不吓人)即可编译所有CSS和JavaScript。auto选项会启动一个观察器,只要文件发生更改就会进行编译。
你不需要(可能也不应该)将你的CSS文件保存在你的存储库中,你只需要在将代码放到服务器上之前或之后运行命令来编译和压缩代码。它可以像“make static-minified”命令一样简单。
@Chris Coyier – 关于团队策略
几天前我切换到了SASS,我真的很 impressed——我喜欢它。由于我有点完美主义者,而且在引入新的复杂层时会比较谨慎,所以在之前的几周和几个月里,我调查了一些可能的工作流问题和其他一些事情。
尤其是在编译步骤之后,考虑使用@include和@extend等功能时应考虑的预期输出。
例如,@extend让我意识到你已经提到的问题。只要你只在本地工作,一切都很简单。如果你在(前端)团队中工作,不一定在同一个.scss文件中,而是在不同的模块上等等,但只有一个开发服务器,你就会遇到问题。
每次一个开发人员上传他编译的.css时,其他开发人员的更改都会被覆盖。版本控制在这种情况下无济于事。
为了兼顾两全,a)团队工作时每个模块独立的.css文件,以及b)更好的可维护性(例如,用作颜色、字体等常量的变量)和SASS提供的其他所有内容,我们认为唯一舒适且最有希望的解决方案是在本地和开发服务器上都设置ruby + 监视文件夹。
我们不再上传编译后的.css文件,而是上传我们的.scss文件,并且现在编译是在服务器端进行的。因此,每个开发人员都可以看到他的更改,并且不会干扰其他开发人员的更改/更新。
也许这个工作流对大多数人来说都很明显,但也许它能帮助你们中的一些人。
这与我们的工作流非常相似。我们使用SASS/Compass和Git,并且Git忽略了所有.css文件,因此只有.scss文件保存在源代码管理中(毕竟,当你切换到SASS时,.scss文件就成为你的关键源文件)。
这避免了在SASS项目中提交.css文件时发生冲突的问题,如果在SASS配置中启用了调试输出,这个问题会变得特别严重。
Chris,你关于被你的box-shadow mixin以及它缺乏多阴影灵活性所困扰的整个事情……这就是Compass存在的意义。赶快加入吧!与SASS一样,你不需要使用超出你舒适范围的部分。
我不确定SASS,但LESS允许你使用不同数量的参数定义相同的mixin,所以你可以这样做
然后你可以只用一个或四个参数调用mixin,它会选择合适的参数。这可能是解决你的.dropshadow问题的一个方案,尽管你仍然需要为所有想要使用的不同选项提供.mixins。
我一直在生产环境中使用SASS大约4个月了,我发现它是一个令人难以置信的省时工具。它也促使我更多地了解OOCSS和SMACSS,并让我想要编写更优质的CSS。Mixins是不可或缺的。
几乎所有“让你绊倒的小事”都已经被Compass解决了。我强烈建议你仔细阅读文档并开始着手实践。Chris对许多css3 Mixin和浏览器修复(内联块、浮动)的解决方案非常巧妙且实用,我发现自己经常依赖它们。试一试吧!
团队工作流程问题一直是我继续使用SASS的一个障碍。不过我喜欢它能做的事情。
通常我不喜欢预处理器,尤其是haml和coffeeScript,因为它们隐藏了太多的语言。但SASS感觉有点不同,因为你只是扩展了CSS的功能。
我总是对“生成你想要的东西”(代码生成)的东西感到警惕,因为在过去,它们总是变成坏东西,你不得不依靠脚本为你编写代码。在某种程度上,这似乎有点像Dreamweaver。
您好!
好吧,我同意使用预处理器*可以*节省大量时间,mixin等也有其作用,但它们离大规模生产就绪还差得很远。
首先,就在它们出现后,场景就已经变得支离破碎了。
SASS、LESS、Stylus、COMPASS、WTF?!,仅举最突出的几个…
(CSS之所以成功,是因为它是一个每个人都同意的标准。)
以下是如何在生产环境中导致它们全部失败。
在每个项目中,总会出现需要立即进行某些热修复的时刻,而负责的开发人员可能无法联系,因此其他人会直接在css中修改一小段代码,因为这是他在检查代码时看到的那个文件…
除非有关于如何提交修复的完整文档(并且该人员及时了解了此文档)。
当进行定期修补时,这些热修复可能会被编译后的SASS文件等覆盖。
好吧,这使我想到了在团队中使用预处理器的关键点。
每个参与者都必须承诺使用该特定技术,并且必须知道如何充分利用它。你是否尝试过在分布式团队中这样做?没有?好的,祝你好运。
在我看来,在分布式团队中,上述情况更有可能发生。
我个人通过使用zen coding [http://code.google.com/p/zen-coding/] 以及提交普通的CSS文件来应对这种情况。
追求完美,
mtness。
整个论点都基于错误的假设。Sass和LESS不仅仅是“大规模生产就绪”,它们已经“在大规模生产中使用”。查看Compass主页上使用Sass和Compass的网站/公司列表,以了解一小部分示例 http://compass-style.org/ 还有一个名为Twitter的小服务使用LESS
你是否考虑过/使用过 WebPutty.net?它绝非完美,但我认为它涵盖了你最喜欢的其他工具的许多功能(以及可能的一些未提及的功能)…
– 基于浏览器(IE8+、Chrome、FF)
– 如果你需要,包括托管(由Google Cloud Storage支持)
– 你可以获得一个实时预览窗格,它会在你更改样式表时执行样式注入(就像LiveReload一样)
– 提供带有自动完成功能的语法高亮编辑器
– SASS支持(如果你想使用它,可以使用Compass)
– 自动压缩生成的CSS(以及导出格式良好的CSS的能力)
– 一键部署
– 易于在你的 本地开发环境 中使用
与这些其他工具相比,它最大的缺点可能是版本控制。目前,WebPutty仅处理你可以随意尝试新想法的预览版本,以及正在主动提供给你的网站的已发布版本。好消息是,未来计划添加更强大的版本控制和版本控制集成。
完全披露:我是编写WebPutty的开发人员之一 :)
+1 为WebPutty。我正在使用它来处理SASS,现在我将开始挖掘Compass/Blueprint - 我想升级为960.gs编写的旧代码。
精彩的文章。对于任何试图决定CSS预处理器的额外开销是否值得的人,我只想补充一个可能很明显的一点,即**好处与你编写的CSS的复杂程度成正比**。如果你使用了大量的CSS3,并且正在处理大型网站或具有多层继承的多站点架构,那么预处理器的优势很快就会显现出来。
如果你是一个单人工作室,并且处理的是更简单的网站结构,那么你的“这没必要”的直觉可能是对的。但当然,好奇并学习新技术总是一个好主意,所以无论如何你都应该尝试一下这些东西。 :)
我讨厌维护本地和实时网站的并行版本。我总是从本地开始,以获得速度优势,但一旦客户端需要查看某些内容,我就会将其上传到服务器,网站保持在线状态 - 此后我不再触碰本地副本。
我在每个项目中都使用了.LESS(大约6个月了),并且会继续这样做。(尽管你的文章引起了我对SASS的兴趣)。我最初使用的是Mac的.LESS预处理应用程序,在本地工作时非常方便,但在上线时却破坏了我的工作流程:每次都要编辑本地.LESS文件,然后上传输出的本地.CSS文件以对实时网站进行更改,这太荒谬了。
拯救我的工作流程的是LessPHP(参见 http://leafo.net/lessphp/ 和 https://github.com/leafo/lessphp)。它仍在开发中,但我发现的唯一真正错误与处理计算百分比有关,这并不难解决。只需在header.php文件中添加几行代码,就会自动检查.LESS文件的新版本,如果存在,则在页面加载时输出CSS文件。无需预处理应用程序或编辑或上传CSS文件。
我不确定使用基于PHP的预处理器是否存在任何重大的速度/性能问题,但如果有人知道这方面的信息,我很想知道。
当然,将leafo集成到一些php框架中可以节省大量时间!最后的优化是使用 dresscss 或 bearcss 从html文件构建经过less处理的**骨架**。这意味着你首先构建标记,然后使用该工具。众多方法之一…
我们在本地进行开发(在GitHub的帮助下)。我们使用Capistrano从GitHub拉取到开发机器,然后再次使用Capistrano部署到实时服务器。我们对其进行了调整,以便在所有开发安装之间共享公共文件(图标、图像)。
我一直在使用自定义PHP预处理器,但随着SASS等社区支持的增长,这听起来像是我的下一个流程改进方向!
我使用Coda多年,并试图理解SASS,但Ruby gem和命令行的东西让我感到困惑。Bryan Jones的Less.app证明非常适合。现在我正在使用他的最新版本CodeKit,并且非常满意。我同意你的观点,Chris - 图片优化很不错。
另一个值得注意的要点是,一些强大的快速原型框架利用了预处理: Twitter Bootstrap(LESS)、Foundation在GitHub上有一个LESS分支,以及 Perkins(LESS)。
迁移到LESS+LiveReload对我来说非常棒。现在不使用它们会感觉很落后。对于那些只是在考虑涉足的人,那就去做吧。SASS有一些相关的额外开销,但你可以在一分钟内启动并运行LESS。
对于那些想知道是否/为什么应该使用LESS的人:你是否曾在文件中重写过相同的十六进制颜色?仅此一点就足够了。
没错!对于那些仍然通过FTP远程服务器工作的人来说,你真的应该花一两天时间学习Git并将Github集成到你的工作流程中。
我在本地开发所有内容,提交一些更改,推送到Github,然后拉取到我的实时服务器。事实上,我已经自动化了那个拉取操作 - 现在,我真正需要做的就是进行更改,提交并推送。
如果你仍在使用FTP并在实时服务器上执行操作,那么学习一点点Git将对你大有裨益。
我喜欢使用变量和mixin的能力,并且确实看到了在你的工作流程中使用这些系统带来的价值。但是,你必须小心它们如何影响你的编码风格,我见过太多优秀的设计师因为可以而开始嵌套所有内容,最终导致选择器过长,由于特异性问题导致难以覆盖样式等。
说服整个团队为他们最喜欢的编辑器安装必要的sass语法高亮插件,以及让每个浏览器的开发者工具正确识别源css为sass文件而不是生成的css文件,也不是一件轻松的事情。
如果你能够以一种避免许多这些复杂性的方式开始一个项目,那么这将是使用sass/less等的一个好方法。
谢谢,Chris。这里有很多好的资源。
我一直在使用SASS和Coda代码片段建立我自己的个人框架,但现在我也会查看其中一些工具。
我注意到CodeKit有一个区域可以显示已安装的框架,并且想知道你是否知道创建自定义框架是否也可能?
此外,基于 SASS 列表的松散性,可以构建 SASS 中的一对多 mixin。SASS 列表可以是逗号分隔的,也可以是空格分隔的,只要分隔符不同,就可以拥有列表的列表。
然后所有三个都应该可以工作(可能需要一些调整,因为它是我的即兴想法)
对于部署,我一直在尝试使用 Beanstalk (http://beanstalkapp.com/)。它提供私有 Git(和 Subversion)存储库,并具有将更改推送到存储库以更新服务器的机制。我只有基本的免费帐户,因此部署机制有些受限,但我相信对于付费帐户,您可以同时部署到暂存服务器(在更新存储库时自动部署)然后手动部署到实时服务器。它非常棒,而且易于使用(当然,如果您了解 GIT 的话)。
我赞同 Dave 的观点。以我的经验,当您是代理机构并且每个客户的托管设置都略有不同时,Beanstalk 是迄今为止最佳选择。
它具有标准化部署流程的巨大优势,因此您的整个团队都通过一个点进行部署。它还可以向您显示参与该部署的所有内容的报告,例如哪些文件已更改、关闭了哪些工单以及发生了哪些 git/svn 提交。
我尝试了许多其他选项,但这是最佳选择。
Beanstalkapp 与 Bitbucket 相比如何?
Bitbucked 对私有存储库免费。
谢谢
@cipa 看起来 Bitbucket 没有部署功能——换句话说,它确实提供了免费的私有 Git 存储库(酷!),但它们没有将这些文件推送到 Web 服务器以进行暂存或实时部署的机制。这就是 Beanstalk 吸引我的地方。
对于任何想要探索无 Git 自动上传的人,请查看命令行工具 rsync
http://www.manpagez.com/man/1/rsync/
它可以执行从本地到远程(ssh)的差异文件传输
我正处于在本地开发 WordPress 主题并将它们托管在 git 存储库(仅主题,而不是整个站点)中作为备份的阶段。
您可以在 assembla.com 获取免费的私有存储库。对于公共项目,我更喜欢 Github,但对于客户站点,我使用 Assembla 上的私有存储库。
我不同意在本地开发,最佳方法是版本控制您的项目并在多个子域上拥有多个工作副本。
酷。我不知道 MAMP(所以这就是我发现这篇文章有用的地方)。我喜欢在本地工作——我工作的一个站点使用 Rails 服务器(我使用 HAML 和 CSS 编码……还没有使用 SASS,抱歉)。但我也处理许多 WordPress 网站,甚至没有费心去查看本地选项。
@Scott Vivian,@Methemer:如果您在 mixin 后添加 (),Less 将不会输出 css
我一直很喜欢 Sass 和 Less。实际上阅读文档对我的帮助很大。例如,Sass 有一个 mix() 方法,它允许您将两种颜色与权重混合。为什么?
很有趣。作为一个新手,先完全学习 CSS,然后再学习预处理器,这个想法真的引起了我的共鸣。谢谢!
令我惊讶的是,没有人提到 SASS 实际上有两种不同的语法。
.scss
.sass
我个人更喜欢 .sass
我也更喜欢 .sass 语法。没有到处都是的花括号和分号 = 更少的打字,更易读,在我看来更有趣。再说一次,我是一个老 Pythonista ;)
然而,许多人对整个基于缩进的东西感到不舒服,或者觉得它偏离了普通 CSS 的外观太远。好消息是,这两种语法是可以互换的,也就是说,您可以将 .sass 导入 .scss(反之亦然),并且它会在没有冲突的情况下进行编译。SASS 甚至带有一个命令行工具,用于在两种风格之间转换源文件,以防您的品味发生变化。
如果您想将 CSS 重新加载到实时页面而不使用其他工具,那么在 javascript 中执行此操作非常容易。我的 javascript 中有以下内容,并在需要时调用它(您可以将其放在计时器上,或者我见过一个书签来执行此操作)。这使用 Ext 查找 DOM 节点,我强制使用不同的 URL,以便我的 Web 服务器可以缓存文件,但这会绕过它,并且它使用 underscore.js 来迭代循环,但这非常简单
是的,make 为您提供了一种简单的方法来编写脚本“重新编译所有已更改的内容并将其放在某个位置”——就我个人而言,我通过让开发服务器挂载我的工作文件夹来将文件传输到我的开发服务器,以便我可以进行测试而无需将更改提交到源代码控制等,并且我使用 emacs,因此让 emacs 始终在您保存 SASS 文件时重新编译它们非常简单……但当您让老式的 C++ 开发人员参与您的 Web 项目时,就会发生这种情况 :)
Chris:精彩的、内容丰富的文章。使用 deployhq.com 这样的服务是否解决了您在 FTP 工作流程中遇到的问题?这几乎是我现在的操作方式,无论是单独工作还是与我的团队合作。
谢谢,
Mark
如果您是 SCSS 用户,则必须查看 Bourbon。
来自网站
“Bourbon Sass Mixins 的目的是提供一个全面的 sass mixin 库,这些 mixin 旨在尽可能地保持原始状态,这意味着它们不应偏离原始 CSS 语法。mixin 包含所有 CSS3 属性的特定于供应商的前缀,以支持现代浏览器。前缀还确保旧版浏览器(仅支持 CSS3 前缀属性)的优雅降级。Bourbon 使用 SCSS 语法。”
Coda 具有出色的内置 FTP,因此可以解决您的 FTP 难题。此外,我真的很喜欢 Cornerstone for SVN
对于 LESS,有一个适用于多平台的替代应用程序,SimpleLESS(界面类似于 LiveReload)。SimpleLESS
不错的文章。
不过,说实话,我并不喜欢对命令行的厌恶。它真的不可怕,而且在我看来,设计师和前端开发人员不应该被劝阻使用它。我们作为前端开发人员每天所做的许多事情都更加复杂。
我不明白为什么有人可以应付 JS、CoffeeScript + jQuery、盒模型、版本控制和浏览器怪癖,但随后却讨厌使用命令行。归根结底,它只是在文本框中输入正确的内容来完成您想要完成的操作。
我仍在学习命令行提供的许多功能,但我到目前为止学到的所有东西都使我的日常生活变得更加轻松。GUI 使许多事情变得更容易,但它们在“简化”过程中有时会掩盖或省略一些非常酷的命令行功能(参见:GitHub 应用程序)。
看到这么多聪明人忽视或将命令行视为乏味/令人沮丧/复杂,这让我感到难过,因为很明显他们只是没有被展示过它可以完成的一些很酷的事情,或者没有花时间坐下来学习。
作为一名从设计师转型为开发人员的人,我对此有所了解,并且刚刚开始接触命令行。对我来说,归根结底是担心命令行可以直接访问我的计算机,并且与操作系统及其友好的 UI 不同,命令行操作不会让我免受伤害——计算周期中最糟糕的部分。我从同事设计师那里听到的观点相似,“我不想意外地破坏我的电脑。”
我认为情况正在好转,而且你抓住了问题的核心。设计师和前端开发人员只需要知道一切都会好起来的。
嘿,Chris,
很棒的文章,我是你的忠实粉丝!我想分享一下我们团队在 Art.sy 如何使用预处理器的想法。
我们有一个主要的 Ruby on Rails 项目,其中使用了 Sass、Haml 和 Coffeescript。我们是在 3.1 版本的 asset pipeline 出现之前启动该项目的,因此我们使用了一套gem来在页面重新加载时编译这些文件。
为了避免您提到的其他成员想要写入已编译资产而导致的混乱问题,我们采取了独裁的方式,在我们的 .gitignore 文件中忽略所有 javascript/css 文件,除了“vendor”文件夹内的文件。因此,即使有人想要写入已编译的资产,它也不会被纳入版本控制。
最后,Jammit 会打包/压缩/gzip 所有文件,以便快速进行生产使用。
以上都是非常 Ruby & Rails 特定的,但我们也有一些基于 node.js 的项目,为此我编写了一个小模块。
到目前为止,这套方案对我们来说非常有效,并且总体上提高了团队的生产力。
我认为为无缝编译预处理器建立一个系统所付出的额外样板工作是值得的,尤其是在大型项目中。我们花费大量时间实验不同的 UI 并编写大量的 js/html/css,因此拥有像这些一样强大且功能丰富的工具可以让生活更愉快。
干杯!
git-ftp(在“这看起来很有希望”下的那个 Dang FTP 工作流中)非常棒。
如果您使用 git(从命令行)并且由于服务器的原因无法在项目中使用它,请查看它。
感谢分享这些 Chris,你似乎总是能掌握要点。
有时我们决定完全在 FTP 中工作,现在仍然如此。对于一个快速完成的项目(大约一天),这不需要在 vhost 文件中添加新条目,并且过于挑剔地查看除 domain.com/project 之外的任何内容作为 url 也会很烦人。
Less 完全改变了我的世界,对于 Windows 用户(WinLess)来说,这是一个很棒的小程序。它基本上是一个基本的编译器,指向要监视的目录(如果您有 less 和 css 子目录),它会很好地将其拉入和推入这些目录。如果存在语法错误,它会提供带有行号的通知(类似 Growl?)。就是这样。
使用正确的工具有很多好处,从“预处理”的角度看待 CSS 的作用远远不止级联到页面上。那是肯定的。
我仍然需要掌握 Git,我很难记住星期几,更不用说更多的语法了。*哭脸*
再次感谢
也许也可以尝试一下我们的Compass.app? :)
我真的很不擅长 css,但这个博客总是帮助我! :)
关于 (S)FTP-Git-Deployment-Problem:我将 dandelion(https://github.com/scttnlsn/dandelion)用于一些较小的项目,它运行良好。创建简单的配置文件后,只需要一行命令行即可:
dandelion deploy
- 每个设计师都能处理这一点 ;-)感谢您撰写这篇文章。我觉得我一直生活在一个洞里,因为这是我第一次阅读 SASS。现在需要进行更多研究……
从 Sass 3.2(
gem install sass --pre
)开始,@extend
可以像您的 Less 示例一样工作,使用占位符选择器。我已经将所有可重用类转换为
_placeholders.scss
样式表。关于 FTP 部署和 SVN,我有一些补充意见。我合作的一个客户有一个传统的应用程序开发环境,包含 3 个区域
– 开发(localhost.?????)
– 暂存(stage.?????.com)
– 实时(www.?????.com)
在过去的 6 个月里,我一直在使用 Beanstalk 进行部署(Beanstalkapp.com),它非常棒。如果您还没有见过、听说过或使用过它:Beanstalk 允许您使用 FTP/SFTP 详细信息在他们的应用程序中轻松创建“部署”区域。(http://support.beanstalkapp.com/customer/portal/articles/68162-deployment-and-releases)
我在暂存环境中设置了自动部署,因此当我提交一组更改时,它们会自动通过 FTP 传输到 stage.?????.com。当我们在暂存环境中完成所有工作时,我通常登录 Beanstalk 并点击部署按钮将所有内容推送到实时环境(即使是一系列多个提交)。
我还可以选择通过在提交消息末尾添加“[deploy:environment]”来提交到特定环境。我经常使用它来快速在实时站点上进行更改,使用 [deploy:Live]。
客户在 Beanstalk 中有一个帐户,并且会自动收到新部署的通知。我发现这对技术水平通常较高的客户来说效果很好。
我发现的唯一缺点是 SVN 删除命令不会通过 FTP 删除文件。使用更高级的分支设置可以做到这一点,Beanstalk 会从您的服务器中删除在部署的分支中不再存在的文件和目录。
免责声明:我与 Beanstalk 没有隶属关系或联系。此信息仅基于我使用它的经验。
嘿 Chris,感谢你的文章。我一直想使用 CSS 预处理器,但由于您提到的许多相同原因,我犹豫不决(现在仍然如此)。我对使用它们的优势非常感兴趣(最值得注意的是 - 少打字)
很高兴看到您发现使用 SASS 比不使用它更有成效。我认为这是最重要的证明。感谢您谈论工作流程,这是我犹豫的主要原因。问题在于选择使用它,并将其作为团队的标准操作程序。
另外,关于 ftp 的说明。我通常在本地编辑文件,然后通过 ftp 上传到实时测试服务器以预览我的更改。我这样做是因为我可以在任何地方工作,因此不想受限于一台工作站。同时使用版本控制。
我主要感兴趣的是是否有类似于 phpless 或 lessjs 的东西,它将在服务器端运行,然后在上传时编译 css。然后我不必再费心保存文件,然后找到更新的文件上传到服务器。这将完全从我的工作流程中删除 css 文件,我只需要关注实际的源文件即可。对于不熟悉 node 或命令行的人,有什么提示吗?
第一次尝试 LESS 并遇到了 Chrome 的一些障碍。编译错误时有时无,但主要问题是 Chrome 的 Web 检查器停止显示 css 样式的文件名和行号。其他人遇到过这种情况吗?有什么解决方法吗?还是再试一次?
我是 Beanstalk 团队的成员 - 我想感谢所有忠实的粉丝在这里提到我们。知道人们发现我们是部署更改的更好方法,这让我们团队感到非常高兴。就在几周前,我们发布了部署引擎的全新版本,它比以前更强大。团队部署通知和自动发布说明是我个人最喜欢的功能之一。
如果任何人对我们的部署工具有任何疑问,请在这里告诉我或给我发送电子邮件[email protected]
为什么我认为这个网站的未来将是 sass-tricks.com。多年来,观看您探索新技术并让我们拥有前排座位,真是太棒了。
作为过去三年来 SASS 和 git 的用户,您将这些强大的工具添加到您的工作流程中,真是太棒了。
使用 LiveReload 及其新的脚本方法的一个巨大优势是在 iOS 模拟器上获得自动刷新(包括 CSS 的软刷新)。这几乎是使用它的最佳理由。
我不确定您是否必须在本地工作。我的工作流程包括 LESS + lessphp,它会在每次我调用样式表时动态重新编译、压缩和 gzip 我的 LESS 文件(在 url.com/style.php 而不是 url.com/style.css)。此处理过程会产生少量开销,但与缓存输出的 CSS 相结合(如果 LESS 文件没有更改),则开销最小。
对我有用!
我真的很喜欢使用 LESS/SASS 的想法,但是我使用 Beanstalk 存储我的主要仓库进行开发,如果我通过 codekit 编译然后推送到服务器,我的团队将无法获得 LESS/SCSS 文件,他们将看到编译后的代码,有没有办法在使用 Beanstalk 部署到主要服务器时进行编译。
我刚开始使用SASS,第一印象非常好。我非常喜欢使用mixin,并且@if也很酷。我是一个单兵作战的人,并不真正需要一个允许多用户更改文件的流程,但是通过阅读这篇文章,我看到了它的好处,并将开始着手建立一个合适的流程。一如既往,Chris提供的资源非常棒,感谢。
@chriscoyier – 看起来Bryan在几个版本前添加了对Jade的支持——我自己也对HAML缺乏HTML包含功能感到沮丧—— https://github.com/bdkjones/CodeKit/issues/98
我只是想分享一下我基于这篇文章的工作策略。我使用Codekit处理我的SASS代码,同时在本地Dropbox上的文件中工作。CSS预处理完成后(大约需要一秒钟),我使用Transmit FTP将我的主题(WordPress文件)同步到线上。
本地工作可能更快,但我认为这取决于您正在处理的内容。我更喜欢始终在线访问我的文件,而Dropbox允许我拥有一个可在任何计算机上访问的单一位置。这使我能够为了方便使用PC,并使用MAC来预处理我的代码。
大家好,我的预处理器之旅始于LESS。很快我就继续使用了SASS。一切都非常酷,但当我决定编写自己的框架时,我发现了一些问题。SASS中没有语法允许我做我想做的事情。我在插值方面遇到了一些问题,最后我决定编写自己的CSS预处理器。它叫做AbsurdJS http://krasimir.github.io/absurd/。我非常希望得到一些反馈。这里有一些类似“入门”的文章。
当您在浏览器中使用Firebug调试网站时,使用编译后的文件工作是否很困难?它会显示为正常的CSS吗?
如果您是PHP开发者,可以使用PHPStorm(Mac | Windows),它有一个自动过滤器可以从SASS和SCSS文件生成.CSS文件。
配置起来并不难,您可以在一个平台上轻松工作;)
如果您使用FTP,编写PHP,并且需要一个不需要同步本地文件和实时文件的解决方案,我强烈推荐SCSSPHP。在您的项目文件夹中添加几个额外的文件,您就可以提供已编译的Sass。我知道git部署是最佳方案,我也在个人项目中使用它。我无法更改公司中所有人的工作流程;但是,我可以提供一个选项,允许我们编写更简洁的CSS,而无需强迫人们一次学习很多新东西。