最近有很多关于使用 LESS/Sass 作为预处理器来更快更容易地创建更简洁、跨浏览器友好的 CSS 的讨论。根据我个人的经验,我可以告诉你,一旦你开始使用这些语言中的任何一种,你就会玩得非常开心,以至于你不会再想回到普通的 CSS 了。
然而,这些语言的问题在于“预处理器”这个词。
预处理器的概念是,在你编写的代码和你网站上使用的代码之间存在一个“处理”步骤。这有点麻烦。它也阻止我们动态地使用变量或函数,如果你让用户自定义代码的呈现方式(比如在 WordPress 主题中),这可能很有用。
好吧,在生产环境中实时处理 LESS 是完全可能的,以下是如何在我们公司使用它来解决一些重大问题的。
关于 PageLines
PageLines 基于 WordPress 开发了一个“拖放”框架,旨在简化专业网站的构建。
试图保持专业性,同时又易于使用(典型用户不必编写任何代码),这带来了一些工程挑战,而 LESS 帮助解决了这些挑战。
用例
PageLines 框架构建在 WordPress(使用 PHP)之上。在考虑此解决方案时,我们有几个目标。例如,我们希望
- 允许根据框架内的用户选项自定义 CSS
- 更好地组织和分隔 CSS,而不会增加导致性能下降的 HTTP 请求
- 更快更容易地创建更好、更跨浏览器的设计,而无需在我们的工作流程中处理新的“预处理”步骤
为什么选择 LESS 进行实时处理?(而不是 SASS/Compass)
Chris 撰写了一篇关于 Sass 与 LESS 的优缺点 的有趣文章。但是,其中省略了一些想法,这些想法让我们更倾向于使用 LESS 进行实时处理。具体来说,LESS 是用 JavaScript 设计的,JavaScript 是一种开发人员友好的语言,并且最初就是为了实时使用而创建的。最重要的是,它的编译速度比 SASS 快 6 倍。Twitter 的流行框架 Bootstrap 的架构师 Jacob Thornton 对这场辩论有更多见解,请点击此处查看。
虽然最初的 live less.js 方法在生产环境中延迟过大,但在我们谈论在生产环境中使用它而不是作为预处理器时,它仍然有助于为 LESS 敲定交易。我们最终使用了 Less.js 的一个特殊的 PHP 移植版本 来实现我们的目标,稍后会详细介绍。
作为旁注,如果您在 Ruby on Rails 环境中开发,则理论上可以使用 SASS “实时”。我们还没有实际测试过,所以我不确定使用这种方法的性能或瓶颈。
我们是如何实现的
对我们来说,执行实时 LESS 引擎的关键在于 LESS 处理器到 PHP 的此移植版本(链接),它允许我们根据用户在服务器上的操作来解析和缓存 LESS 文件。为了使此功能正常工作,框架只需执行以下操作。
- 获取框架中的所有 LESS 文件并将它们添加到 PHP 变量中
- 使用上述 PHP 脚本将 LESS 解析为 CSS 并将其放入变量中
- 将 CSS 输出到一个文件中,该文件缓存在服务器和访问者的浏览器中
- 每当用户保存其设置或安装新扩展时,都会再次运行此过程
代码示例
这不是我们使用的实际代码,但应该可以让你有一个大致的了解。
$parser = new lessc(); // Start new object from PHP Less script
$less_code = file_get_contents(‘/path/to/whatever.less’); // Grab LESS
$processed_css = $parser->parse($less_code); // Process to CSS
file_put_contents(‘path/to/css-file.css’, $processed_css); // Write CSS
echo “<link rel='stylesheet' href='http://url/to/css-file.css' type='text/css' media='all' />”; // Link CSS in page
结果

控制 - 动态颜色和排版
在框架内实现 LESS 最酷的事情之一是,我们能够根据用户选择动态控制颜色和排版。这使我们能够设计出优秀的设计,同时仍然允许用户自定义颜色和字体。
选项 - 用户的 LESS 选项

用户实际上可以在管理选项面板中添加自己的 LESS。他们可以使用背景颜色或主要字体的常用变量。这是一项用户非常喜欢的功能,他们可以使用它来创建更跨浏览器、更强大的框架自定义。
组织 - 将多个文件合并为一个

使用 LESS 的处理器允许我们按类型组织所有 css/less 文件,然后在运行时将它们组合成单个“compiled-css”文件。这绝对使查找我们想要的内容变得更容易。
优化 - 更简洁、更快、跨浏览器的 CSS

因为我们可以使用嵌套选择器和 mixin,所以我们编写的代码更加简洁。虽然这与使用预处理器时相同,但无需处理查找所有文件和编译,我们可以轻松使用它。
在 Less 去掉花括号和分号之前,你必须从我的冰冷的死手中夺走 Sass。我可以比 Less 更快地扫描 100 行 Sass 并查看嵌套的内容,我已经在两者中工作了一段时间。更不用说 Sass 看起来更性感了。
哈哈,喜欢第一句话。我也无法想象没有缩进导向版本的 SASS 的生活。
他们使用 LESS 作为实时 CSS 引擎,这真的很有趣。老实说,我以为这就是 LESS 使用 JavaScript 构建的主要原因。
关于它理论上应该可以用 SASS 做同样的事情这一点很有趣,有人有这方面的资源吗?
我确定我是极少数人之一(到目前为止我也没有读到过其他人关于这方面的帖子),但我真的无法使用任何这些 CSS 预处理器,我真的很不喜欢用 JavaScript 来处理我的 CSS。
根据我阅读的所有内容,我认为那些使用(并喜欢)CSS 预处理器的人对 Web 编程有非常强的了解(他们了解大量的 PHP 和 JavaScript 等),所以他们可以适应预处理器中 CSS 的编写方式。我更像是一个 Web 设计师而不是 Web 程序员。
我有一种非常有效的方式来编写我的 CSS 并对其进行组织,缩进它,注释它。LESS 或 SASS/Compass 都不提供这些功能,它们以自己的方式格式化 CSS(不确定是否有方法自定义最终 CSS 的创建方式)。此外,在键入属性时,我失去了自动完成功能,而这对于提高效率是绝对必要的。
如果我需要更改整个 CSS 文件的颜色(不确定我为什么要这样做),搜索和替换可以在不到 1-2 秒的时间内完成。然后按 CTRL+S。总时间 2.5 秒。
这让我想到一个问题:是否有支持在使用 LESS – SASS/Compass 时自动完成的编辑器?我试过 Notepadd++ 和 Dreamweaver CS5-6,但它们都不支持。
我希望我和 Andrew 及其团队一样知识渊博的程序员一起工作,哇。
谢谢。
Ricardo,这是一个习惯问题。LESS 的优点在于它只是 CSS,但有很多增强功能,因此您可以例如用纯 CSS 编写一个文件,将其保存为 .less,它就可以正常编译。您编写 LESS 的方式很大程度上取决于您的编辑器。我使用 Vim 和几个插件,我得到了所有好处,语法高亮、自动完成和实时编译,因此只要您保存,就会立即获得编译后的 CSS。一旦您组织好 LESS 工作流程,它就像编写 CSS 一样,但功能要多得多。当您可以在半秒钟内通过更改一次颜色来完成时,为什么要浪费 2.5 秒来搜索和替换?
Ricardo……你说得对……这某种程度上也是我一直犹豫不决走上预处理器之路的原因……我喜欢控制 CSS 的输出并对其进行速度优化……使用这些预处理器,我会失去控制……
此外,正如你所说……这些预处理器似乎受到那些喜欢命令行的人的喜爱……Cir 说他使用“Vim”……一个 Unix/Linux 文本编辑器……太好了……我确定设计师一定很喜欢 Unix 文本编辑器的用户界面……无论如何……这告诉我这些处理器更适合“开发人员”类型,而不是“设计人员”类型……
我一直想知道为什么要在已经允许您编写单个文件并将其应用于数千个页面的格式(CSS)中添加这一额外的 PHP 脚本层、黑客和其他内容……很聪明……为什么要使其变得更复杂……
有人说看看 PHP……它对 HTML 做了同样的事情(它预处理它)……没错……但那是因为如果没有它,如果需要全局更改,则必须手动或编写脚本才能更改数百或数千个单独的 HTML 文件……我非常怀疑我们处理的许多网站是否拥有超过六个样式表,这还是在往多了说……
此外,我喜欢 HTML/CSS 和 JavaScript,因为我可以打开记事本将其另存为 .js、.html 或 .css 并将其加载到浏览器中……没有服务器或此过程……编写一个快速脚本进行测试和审查……简单……这就是为什么这些简单的语言是最流行的 Web 语言……
嘿,Ricardo,如果你想要一个支持 SASS/LESS 的编辑器,可以考虑使用 Sublime Text 2,使用 Package Control,你可以添加几乎任何包来为 Sublime 提供所需的所有支持。特别是 LESS 和 LESS Build 模块,它们提供了诸如选项卡补全、代码高亮、LESS 编译等功能。
据我所知,您可以像往常一样格式化您的 SASS/LESS 文件,就像任何其他 CSS 项目一样。对我来说,LESS 的好处在于我可以配置它来处理诸如为我的标记添加前缀、自动缩小我的文件等操作,所有这些都在一个构建步骤中完成。总体上节省了我大量的时间。包 Build on Save 在此步骤中提供了很大的帮助;也可通过 Package Control 获取。
但总的来说,它确实提高了我的 CSS 开发时间。与任何工作流程修改一样,仍在解决一些问题,但我对此非常满意 :)
观点很棒。但我是网页设计师,而不是开发人员,即使只使用了一年,我仍然非常喜欢 SCSS 而不是 CSS。
至于文本编辑器,请查看 Sublime Text 2 - 一个非常有用的文本编辑器,具有内置的文件浏览器 - 适用于 OSX 和 PC。(关于 pp 和软件,请查看 Fire.app。出色的编译器。)
@Ricardo
有一天,你可能会得到一个需要超过 6000 行 CSS 的项目,以支持选择器,以显示每个运动队(包括主要大学)的徽标,各种尺寸,有时是图像(一个徽标)的引用,有时是大型精灵及其位置。这需要编写很多冗余的 CSS,需要生成很多精灵,并且在团队更改徽标以及团队进出联盟时难以管理……当您可以在不到几百行代码中完成此操作时,包括使用 compass 生成精灵,并且实际上比搜索一个非常大的 css 文件更具可读性,我无法告诉您这项技能有多宝贵,您必须体验它才能欣赏它。
它并不那么复杂,但功能非常强大,您只需要正确的用例。
Ricardo - 我是一名前端开发人员,直到最近我对 js 或 php 的经验很少,但我碰巧喜欢 sass。如果您花一两个小时观看一些教程,我想象不出您不会理解它并希望在您未来的项目中使用它。我现在甚至不会考虑在没有它的情况下启动项目,并且没有嵌套、扩展、mixin、css3 供应商前缀、百分比、变量等等功能。CSS 根本不是一种足够有效的语言。
http://www.alistapart.com/articles/getting-started-with-sass/
https://sass-lang.cn/
https://tutsplus.com/course/maintainable-css-with-sass/
我使用 LESS 的另一个原因是 Dojo。它是他们的默认预处理器,我的大多数项目都依赖于 Dojo。
使用 sass 或 scss 作为“实时”预处理器也相当简单 - 您不需要使用 Rails,您只需要在服务器上安装 Ruby 和 SASS,以及在您的框架中安装编译钩子。例如,python webassets 包自带一个 SASS 预处理器作为内置选项。
嗯,我同意 Chris 的观点。LESS 很好,但对于 SASS 来说,还有更多选择。而且 SASS 与 Ruby on Rails 也非常契合。
到目前为止,我一直太固执己见,以至于没有考虑使用 CSS 预处理器。有人知道一篇从头开始使用的文章吗?
我喜欢 LESS 的一点是它非常易于实现,只需添加一个 Javascript 或者如果您使用的是 WordPress,可以使用 WP LESS。该插件在您登录后每次重新加载页面时都会在服务器端进行编译。
我甚至还没有尝试过 SASS,因为它似乎需要很多工作。
我已经有一个 PHP 脚本可以组合和缩小我的样式表(以及一个用于我的 JavaScript 的脚本),因此将 LESS 处理器添加到该现有脚本中非常简单。我不使用 LESS 的许多功能 - 但我确实预先定义了我的配色方案,因此我不必搜索和替换,并且我计划使用比我目前使用的更多功能(我正准备使用它们,但放弃了圆角和渐变!)
搜索和替换看起来很容易,直到出现冲突。
例如,您有
并且您需要将其更新为
如果您以错误的顺序执行此操作,则会弄乱很多东西。
同样,如果您替换像 #FFF 这样的简写,则必须相当聪明,因为如果您不使用终止分号进行查找/替换,则可能会调整其他颜色(#FFF5CC 可能会变成 #0005CC)。
此外,您可能不希望替换所有实例 - 因此您的查找和替换变得越来越复杂。
对于上面的 Ryan。从以下步骤开始
下载 LiveReload
让 LiveReload 在保存时自动完成 less > css。
开始编写 less。
less 的优点在于您已经非常了解如何使用它
https://gist.github.com/3761074
只需从一些基本的嵌套开始,然后将所有颜色移动到变量中,到那时您就会上瘾了!
一旦你上瘾,你就会需要查看 less 元素:http://lesselements.com/
想象一下,通过编写以下内容来为元素赋予圆角
.rounded(15px);
而不是这个
-webkit-border-radius: 15px;
-moz-border-radius: 15px;
border-radius: 15px;
我也在使用 SASS 而不是 LESS。
是的,我更像是一个开发者而不是设计师 :)
但在 Mac 上使用 SASS 和在 Windows 上一样简单。
您只需在 .SCSS 文件中编写代码,它就会直接编译成干净的 .CSS 文件。
Windows:http://compass.handlino.com/
Mac:http://incident57.com/codekit/
有 UI 可以控制,所以对设计师也很友好 :)
感谢亲爱的 Chris Coyier。
嗯,这有点滑稽。
我在我自己的一个项目中(大约 7-8 周前)使用了完全相同的方法,用户可以决定他们想要为其网站选择什么颜色,而布局在所有网站中都保持一致。
我想我被拖着踢踢打打地来到了 LESS 的阵营。好吧,是时候看看大家都在兴奋什么了。我从未使用过任何预处理。我喜欢这个想法,但我的设计师大脑总是对新的脚本技术感到畏惧。我一直使用 Pagelines 从它早期的时候开始,我真的很喜欢它作为不需要完全自定义的网站的简单基础。很高兴看到 Andrew 在这里出现在 CSS-Tricks 上。请让他再回来一次!
我一直希望我过去 4 年来工作的公司能够实施服务器端 LESS 或 SASS 预处理。这里其他的人声称他们只懂 CSS,但他们是程序员(ColdFusion),他们会很快理解 LESS 和 SASS。我们这里不使用 PHP,只使用 ColdFusion,所以也许我需要找到一个可以为 CF 移植 LESS 或 SASS 以在我们的服务器上运行的人。
我使用 SCSS(因为语法高亮,而不是我更喜欢的 SASS),仅用于开发,使用 Coda 2,并使用 Jade 进行我的标记,这是一个非常棒的组合。
我的第一次预处理器体验是 LESS 第一次发布的时候,我非常喜欢它,甚至还基于它创建了一个网格。然后我了解了 SASS 和 Compass,大量预定义的 mixin 使它成为了我的首选。
Andrew 做得棒极了!
好吧,首先我也开始使用 LESS——它比纯 CSS 好多了。但后来我尝试了 SASS/SCSS,并爱上了它。此外,Compass 真的很酷。
顺便说一句,这里有一个带有 Compass 参考 的好网站——我昨天找到的。
哦,谢谢!这比官方文档更易用,不幸的是,官方文档并不完美。
我更像是一个设计师类型,但我的一个程序员让我开始使用 SASS,我非常喜欢它。我让我们的服务器管理员在我们的 svn 提交序列中包含 SASS 钩子,所以我们对大型项目使用 SCSS。
我选择 SCSS 是因为我可以使用我们之前的所有 CSS(只需更改扩展名),并根据需要将酷炫的 SCSS 内容添加到文件中。它也让那些不太写 CSS 并且不想学习 SASS 的人感到舒适——他们只需编写 CSS 即可。
对于我的本地开发,我使用 Codekit,并且在我最近的项目中,我实际上同时使用 SCSS(用于大多数内容)和 LESS(用于 Twitter Bootstrap),因为 Codekit 允许这样做。我主要在 Coda 中开发(因为它们有很棒的代码补全);SASS/SCSS 模式是内置的。
为了使用 LESS CSS 语法,另一种解决方案是使用 像 Less Now 这样的 LESS CSS 编译器。
看看 Adobe 创建的新 CSS 工具 http://html.adobe.com/webstandards/csscustomfilters/cssfilterlab/,用于发现 CSS 过滤器和 CSS 自定义过滤器。它允许我们从列表中应用任意数量的过滤器,自定义其值,立即查看输出并获取生成的 CSS 规则。
感谢这篇内容丰富的文章,它展示的信息比文档更有价值。
当你开始使用 CSS 预处理器时,就无法再回到纯 CSS 了。
就我个人而言,我仍然更喜欢 LESS。主要是因为这是我最舒适的一种。
我现在知道如何创建新的 WordPress 主题并查看各种颜色,谢谢,这篇文章简单易懂,适合像我这样的新手。
设计师;我使用 LESS,我发现它很棒,一旦掌握了它。喜欢在类设置好后只写一次 .boxShadowMe(10)!
我使用 Drupal 7,并且有一个很棒的 LESS 预处理器模块。在 localhost 上使用 D7,我的工作流程与 1997 年以来一直一样——保存文件,刷新浏览器,重复。
一旦进入生产模式,您就会打开 LESS 缓存,它会使用最后写入的 CSS 文件,不会影响速度。
很棒的文章,谢谢。
我对本文中缺少的过程部分感兴趣,即您如何包含通过 php 网页表单输入的单个变量,例如颜色。您是如何实现这一点的?我之前见过 .css.php,但它似乎是一个糟糕的 hack,我很好奇您是如何从 PHP 修改 Less 文件变量的。您是在编译之前替换 Less 文件中的变量,还是每次重建时都在 php 中完全生成 variables.less 文件?
提前感谢,
Luke
我做了一个插件,可以在任何页面上实时编辑 Less 变量。不是免费的,但希望您会喜欢它
http://www.virtuosoft.eu/tools/live-less-theme-customizer/
任何建议都非常欢迎!