【问题标题】:What are advantageous features are in SCSS/Less/Sass vs <?php header("Content-type: text/css");SCSS/Less/Sass vs <?php header("Content-type: text/css");
【发布时间】:2018-11-12 13:58:27
【问题描述】:

我是一名长期的 PHP 开发人员,虽然我用 CSS 做了很多聪明的事情,但我从未真正深入研究过 SCSS/Less/Sass。

在 LAMP 堆栈中工作,我从未见过任何来自 SCSS/Less/Sass 的东西,只是让我的“css 文件”成为一个 .php 文件,我无法做得更好

<?php
header("Content-type: text/css");
/* Variables to be used in the following CSS heredoc */
echo <<< CSS
/* Lots of CSS code here that grabs calculated variables when I need them */
CSS;
?>

在 LAMP 堆栈中,我觉得这比安装额外的 SCSS/Less/Sass 编译器并遵循它们的语法更加通用和直接,并且它允许完整的语言发挥作用。

然而,我看到 SCSS/Less/Sass 一直在 LAMP 堆栈中使用,除了我自己和少数其他人之外,我几乎从未见过使用头技术。我已经尝试了 SCSS/Less/Sass 几次,只是对这些限制感到恼火。我错过了什么?

有哪些 SCSS/Less/Sass 提供的功能是通过创建带有 css 标头声明的 PHP 文件而缺少的?

(我自己发现的唯一一个是旧版本的 IE 会坚持将 .php 扩展名视为 - 不是 - 一个 css 文件,但这很容易通过一两行 .htaccess 来解决重定向,

但这种轻微的一次性不便似乎并不能抵消功能损失?)。

【问题讨论】:

  • 使用您的场景需要的任何内容。如果出于任何原因都不需要另一个,那么只需选择一个。这对于本网站来说过于宽泛和固执己见。许多好的问题会根据专家的经验产生一定程度的意见,但这个问题的答案往往几乎完全基于意见,而不是事实、参考资料或特定的专业知识。
  • 人们经常发布前端资产的“构建”版本,其中文件被合并、缩小等。在发布新版本之前在前端运行这些工具时,能够扩展其他 SCSS 非常方便项目(如引导程序)只需更改一些变量等。

标签: php css sass less


【解决方案1】:

Sass 可以处理的不仅仅是变量。如果您认为这是 Sass 的唯一/主要好处,

really want to dig into the docs a bit more

首先,最有用的功能之一是允许原生 CSS 不允许的嵌套。这使您可以按逻辑方式对规则进行分组,因此:

#main {
    // some rules
}

#main .p {
    // some more rules
}

变得更清晰(更重要的是,从逻辑/可读性的角度来看,更清晰):

#main {
    // some rules

    p {
        // some rules just for paragraphs
    }
}

将伪类及其元素逻辑分组也很方便:

a {
    // some rules

    &:hover {
        // some rules just for the hover
    }
}

与上述相同的方法也可以用于媒体查询。非常方便:

#foo {
    // some rules

    @media screen and (max-width: 320px) {
        // some media queried rules
    }
}

或者对于数学,PHP 无法原生处理(下面是一个明显人为的示例,但这种事情可以非常有用):

width: 1px + 1px + 1px;

颜色数学:

>> #777 + #777
#eeeeee

您必须在 PHP 中复制各种各样的built-in functions。根据我的经验,彩色的可能非常有用。

最后一点:我见过的大多数走 PHP-as-CSS 路线的人不会对其进行任何类型的缓存,需要 PHP 每次都生成 CSS。 Sass 编译成 static 文件,这在您的服务器上更容易。

【讨论】:

  • 哦...不要忘记 control expressions like @for, @each, @ifmix-ins 用于您自己的自定义函数、@extends 以执行 include() 样式包含另一个规则等等。您描述的“功能丧失”可能只是缺乏对 Sass 等实际强大程度的了解。
  • @liljoshu 所以,所有这些都是可能的,但逻辑不应该真的像你想的那样在 CSS 中。一些例子...按时间/日期更改功能,您可能会通过输入&lt;body class="morning"&gt;&lt;div class="new"&gt; 或诸如此类的东西以及适用于.morning.new 的一些CSS 规则来实现。使用您的 PHP 在 HTML 中输出 类名,而不是在 CSS 中输出规则。
  • 登录时的标题颜色与未登录的方式相同。你会做类似&lt;body class="logged-in"&gt; 然后做body.logged-in #header { color: red; }
  • 对于真正独特的东西——比如用户配置的背景图片——你可以使用&lt;body style="background-image: &lt;?php echo $foo; ?&gt;"&gt;或在头部输出&lt;style&gt;标签。
  • 是的,如果您让用户设置整个自定义主题,您可能需要采用数据库驱动的 PHP 方法。您仍然可以使用 Sass 制作主站点 CSS,然后将用户的 CSS 作为单独的(PHP 驱动的)CSS 文件包含在内。这样一来,两者都有好处。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-17
  • 1970-01-01
  • 2017-02-12
  • 1970-01-01
  • 1970-01-01
  • 2017-11-06
  • 2010-12-08
相关资源
最近更新 更多