【问题标题】:Why simply use PHP variables for dynamic stylesheets?为什么简单地将 PHP 变量用于动态样式表?
【发布时间】:2013-08-20 11:01:49
【问题描述】:

我一直在阅读有关动态样式表的文章,并且偶然发现了几个选项,包括 sass 和 less。但我的问题是为什么不把我的stylesheet.css 变成stylesheet.css.php 并简单地使用php 变量。然后,我避免了与所有这些其他方法相关的所有依赖问题。

我这样做是否忽略了一些严重的问题?

【问题讨论】:

  • 那么你的服务器就会有额外的过载。
  • 哪里好像我在客户端用了“less”,服务器就不用辛苦了?
  • 如果你的意思是使用less.js,服务器只将静态文件作为其他静态文件发送到客户端。
  • Sass 和 LESS 做了很多,而不仅仅是变量。嵌套 CSS 规则是我现在离不开的东西,而且在 PHP 中实现它们会很痛苦。

标签: php css sass less


【解决方案1】:

内联 CSS 代码中使用的 PHP 变量

在 CSS 中使用 PHP 变量有很多优点,其中之一是您不必学习新的语法。在 CSS 代码中使用 PHP 变量是一种已知做法,已在许多框架、主题和其他网站相关脚本中实现。

最常见的用途是内联 CSS。下面是一个使用 PHP 变量的内联 CSS 示例:

<html>
<head>

    <style>
    .class {
        color: <?php echo $text_color; ?>
    }
    </style>

</head>
<body>
</body>
</html>

当 PHP 变量表示通过管理界面设置的用户设置时,通常使用此技术。一个实际的例子是在 WordPress 主题中,用户可以通过主题的后端设置背景或文本颜色。

外部 CSS 文件中的 PHP 变量

当涉及到外部 CSS 文件时,也可以使用 PHP 变量,但为了避免 PHP 在每次检索 CSS 文件时解析它,你必须将输出保存到像 @ 这样的静态文件中987654324@.

在保存到“.css”文件之前,都需要解析 SASS 和 LESS。您的 PHP 文件也是如此,您将执行该文件并将输出保存到静态“.css”文件,就像其他语法一样。

解析 CSS 文件是一种非常常见的做法,并在许多网站和大多数知名网站上广泛使用。对于increase site's performance,通常通过压缩(节省约 25%)CSS 代码、将多个文件合并为一个(减少 HTTP 请求)和 gzip(节省约 80%)生成的文件来完成。

这是一个示例,说明如何在名为 stylesheet.php 的文件中使用 PHP 变量,并将结果保存到 stylesheet.css

<?php

// Get the parsed CSS code with the 
$processed_CSS = file_get_contents('http://www.example.com/stylesheet.php')

// Save the processed CSS to a static CSS file
file_put_contents('stylesheet.css', $processed_CSS);

将上述 PHP 代码放入名为“parse-css.php”的文件中,并通过网络浏览器访问它,以创建或更新生成的静态 CSS 文件。

然后在您的 HTML 代码中包含 stylesheet.css 而不是 stylesheet.php

您可以改进您的 解析器 以使其也缩小 CSS 代码,例如使用 CSSMin PHP 类。

【讨论】:

    【解决方案2】:

    存在代码重用的论点:在编写 PHP 代码以生成 CSS 时,您实际上是在复制(一些)背后的逻辑,例如 sass 和 less。当有一个广泛使用、经过测试和完整的替代方案可用时,您为什么要这样做?

    另一件事是性能。标准 CSS 文件由您的 Web 服务器提供,并带有关于浏览器缓存的合理标头。您的浏览器不会每次都下载相同的 CSS 文件,它只是从浏览器端的缓冲区中获取。默认情况下,PHP 根本不被缓存(您通常不希望它被缓存)。这意味着,默认情况下,您的 PHP 生成的 CSS 不会被缓存,从而在您的服务器上产生额外的负载并为您的客户端带来额外的等待时间。虽然其中一些可以解决(包括生成 CSS 的 PHP 代码中的合理标头输出),但其中一些无法解决(例如,Web 服务器启动 PHP 的开销)。

    【讨论】:

    【解决方案3】:

    我这样做是否忽略了一些严重的问题?

    我在 CDN 上托管所有静态资产,您也应该这样做。 CDN 不做 PHP。

    还有:缓存、运行时性能、缩小

    【讨论】:

    • 同意,你在缩小部分击败了我! grr
    • 我不认为这是 OP 要求的。
    • CDN 不会阻止使用 LESS、SASS、缩小或任何其他动态解析。应该做的是将解析的输出缓存到一个静态文件中,该文件可以在任何 CDN 中使用。详情见我的回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多