【问题标题】:PHP Variables in CSS not workingCSS中的PHP变量不起作用
【发布时间】:2015-08-25 00:20:03
【问题描述】:

我的 html 文件有以下代码:

<html>
<head>
<link rel='stylesheet' href='css/style.php' media = "screen"/>
</head>
<body>
<h1 id="foo">My h1 foo element</h1>
</body>
<html>

对于我的 php 文件:

<?php
    header("Content-type: text/css; charset: UTF-8");
    $asd = '#0000ff';
?>

h1#foo  {
    color: <?php echo $asd;?>;
}

我已经学习了一些教程,这是我可以制作的最简单的教程,但不知何故,输出没有按应有的方式工作。我错过了什么吗?

附:如果我要在 css 中使用 php 变量,它可以是动态的吗?我的意思是在php主体内部,我可以覆盖css中使用的php变量的值并且输出会改变吗?

非常感谢您的帮助!

【问题讨论】:

  • “它不起作用”到底是什么意思。颜色值是空的还是 php 没有被视为 css 文件?您是否通过开发者工具查看过响应?
  • 签入html源码!!
  • @PraveenKumar 我不会对此提出异议,但有一种更简单的方法可以做到这一点。他们工作太努力了。
  • @Fred-ii- 同意。 :)
  • php分号后面的空格怎么样?

标签: php html css


【解决方案1】:

对我来说很好用^^

使用这个语法:

cssman.php

<?php
ob_clean();
header('Content-Type: text/css');
header('Cache-Control: no-cache, must-revalidate');

error_reporting( 0 );

// These are just to show you can use dynamic values and such:
$type  = isset($_GET['type'])   ? $_GET['type']  : '';
$theme = isset($_GET['theme'])  ? $_GET['theme'] : '';

/** Simply print or echo your css here **/

ob_end_flush(); 
?>

首先尝试您的输出,手动导航到 .php 文件。如果根本没有内容,则很可能是 PHP 代码有错误,为了调试,您可以添加错误报告(不要忘记也 ini_set('display_errors',1),否则只会记录错误)。

然后将其添加到您的视图中:

你的看法

<style type="text/css">             
    @import "/Library/Stylesheets/cssman.php?type=cms"  screen;
    /* any aditional files here aswell */
</style>

【讨论】:

  • error_reporting( 0 ); 这会关闭报告功能,请务必让 OP 知道这一点。
  • @fred-ii- 谢谢你的建议,但我加入了If there is no content at all, there is most likely a mistake in the PHP code, for debugging you could add error repporting (don't forget to also ini_set('display_errors',1), else errors will only be logged). 这还不够吗?
  • 天啊,让它发挥作用!我认为这与输出缓冲有关:)
  • @fred-ii- 没有汗水!我很感激你的关心!在仍然有一些错误的同时禁用错误是一个非常常见的错误。我只是禁用了它,因为很可能会出现愚蠢的贬低消息或某些东西会破坏输出 /dirty ^^;;
  • 哦,稍微描述一下我为什么使用重新验证缓存标头:如果我不这样做,客户端只会保存输出...使 php 文件在更新时无用。
【解决方案2】:

你可以这样做

echo"
<style>
 h1#foo {
   color: ".$asd.";
}
</style>
";

【讨论】:

  • 这没有答案。他正在使用它作为css 文件链接。
  • 你错了。他像 CSS 一样包含它:&lt;link rel='stylesheet' href='css/style.php' media = "screen"/&gt;
  • @DanyalSandeelo 你同意吗?
  • @PraveenKumar 他已经清楚地提到他正在他的 php 文件中这样做......请检查它..
  • 我认为 Praveen 建议您不需要 style 标签。
【解决方案3】:

首先,要包含一个 php 文件,这种语法是绝对错误的:

<link rel='stylesheet' href='css/style.php' media = "screen"/>

要包含 Css 文件,我们使用以下语法:

<link rel='stylesheet' href='css/style.css' media = "screen"/>

并包含我们使用的 php 文件:

<?php
include_once "a.php"; // this will include a.php
?>

【讨论】:

  • 实际上可以引用 PHP 文件,因为它的行为类似于 CSS 文件。请参阅 OPs 帖子中的输出标题。
  • 我已经解释过它的语法错误。在问题中,他使用该语法包含一个 php 文件。
  • 你认为这条线是什么意思? header("Content-type: text/css; charset: UTF-8"); 如果你想给出一个有效的答案,你可以使用&lt;style type="text/css"&gt;&lt;?php include_once "style.php"; ?&gt;&lt;/style&gt; 回答你的答案是无关紧要的,因为建议应该在 cmets 中。
【解决方案4】:

不使用 PHP 来管理 CSS,您可能需要考虑专门用于该目的的 CSS 预处理器之一。它还将您的客户端代码与服务器端技术分离。

http://lesscss.org/
https://learnboost.github.io/stylus/
http://sass-lang.com/

另一种值得考虑的方法是将 CSS 分解为多个文件。您可以将一个通用文件应用于所有设备上的所有页面,一个包含颜色,另一个管理布局,可能还有一些特定于设备的页面。

【讨论】:

    【解决方案5】:

    您发布的代码按预期工作。 id=foo 的标题变蓝了。唯一的问题是它没有为 css 文件使用 .css 扩展名。为了解决这个问题,你可以在 css 文件夹中放入一个 .htaccess 并指示 Apache Web 服务器使用 Php 解释器来处理 css 文件(看看这个 link)。

    但是,对于从 php 动态更改它,您的意思可能是更改值(例如,在用户输入或其他一些事件之后)。 但如果我理解你的问题,答案是否定的。

    php 只能预处理你的页面,它不能在浏览器从用户那里加载后动态修改你的页面。需要注意的是,使用变量 $asd 上方的代码只能在 style.php 中更改,并且在此之前在代码中使用它。

    我建议你改用javascript,它更容易。使用一些像jQuery 这样的javascript 库来完成这种工作。

    【讨论】:

    • 哦...我明白了,我认为它可能会以某种方式覆盖。太棒了!
    猜你喜欢
    • 1970-01-01
    • 2012-05-22
    • 1970-01-01
    • 1970-01-01
    • 2020-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多