【问题标题】:Store CSS in PHP variable?将 CSS 存储在 PHP 变量中?
【发布时间】:2013-08-14 23:56:53
【问题描述】:

我是一个新手 php 学习者,我正在尝试如何动态链接不同的 php 文件。在试验过程中,我意识到我可以在我的 php 文件中创建变量,并使我的模板文件回显出我需要的 html,而无需编辑我的模板文件......

例如: 在 about-me.php 页面中,我使用

包含了 header.php 和 footer.php
 <?php include ('includes/header.html'); ?>
 <?php include ('includes/footer.html'); ?>

然后我创建一个变量

  $page_title = 'CompanyABC';

并在 header.php 中回显

  $page_title = 'South Asia Exact'; 

现在我的问题是我也可以对我的内联 CSS 执行此操作吗? 例如,我创建了一个变量,用于存储我所有的内联 css:

 $page_inlinecss = "#SAEcontentR div#certification_certificate {
    margin:0 auto 0 auto;
    width:580px; 
    height:464px;
     }\n";

然后我像这样在 header.php 中回显:

<style type="text/css">
<?php echo $page_inlinecss; ?>
</style>

我试过了,效果很好,但我想知道这样做是否正确?

【问题讨论】:

  • 为什么不按预期将 CSS 放入样式表中?

标签: php css dynamic


【解决方案1】:

内联 CSS 没有正确的方法

您的代码可以工作,它会生成一个有效的页面,并且对用户来说绝对没问题。但你不应该那样做。

那么,你为什么不这样做呢?

可维护性是您不应该以这种方式处理 CSS 的主要原因。管理一个单独的 CSS 文件比通过 PHP 代码寻找 CSS 规则来改变要容易得多。

看起来您存储的数据是静态的,变量的意义在于存储可以更改的数据。网站名称 (Company ABC) 之类的内容在脚本执行期间不太可能发生变化,因此您应该将它们包含在静态 HTML 模板中。

除此之外还有缓存(大多数浏览器缓存 .css 文件,节省带宽)和可访问性(屏幕阅读器可能不知道如何处理内联样式和 js)等问题。

您应该如何处理动态样式?

结合 PHP 和 CSS 处理动态样式(即基于不同页面加载的信息的样式)的一种方法是在外部文档中定义类样式,然后使用 PHP 应用它们.

比如把这个放在styles.css:

span.greentext { color: #0f0; }

这在你的 PHP 文件中:

<span class='<?php echo ($someCondition) ? "greentext" : null; ?>'>Some text</span>

或者,如果您有更多样式需要处理:

或者,您可以根据条件加载特定样式表:

<?php if($someCondition): ?>
    <link rel="stylesheet" href="styles/conditional.css" type="text/css" media="screen">
<?php endif; ?>

希望这会有所帮助,除非必要,否则请不要使用内联 CSS 或变量。当您必须在 5 个月后更改网站时,您会为此感谢自己。

【讨论】:

    【解决方案2】:

    你能做到吗?是的。 你应该这样做吗?嗯。 (No.有点刺耳...)

    最好将 CSS 文件名存储在 php 变量中,然后在标题中添加:

    <link rel="stylesheet" href="<?php echo $this_page_style_sheet; ?>" />
    

    【讨论】:

      【解决方案3】:

      在这种情况下没有对错。

      您可以将 CSS 存储在一个字符串中并在您认为合适的时候回显它。或者您甚至可以将其嵌入到您的includes/header.html 文件中。这取决于你。

      个人而言,如果是 CSS 规则的集合,我会将其保存在自己的 CSS 文件中,并在需要时回显文件名。

      $css_filename = "/path/to/rules.css";
      // ... etc etc
      
      <link rel="stylesheet" href="<?php echo $css_filename; ?>">
      

      【讨论】:

        【解决方案4】:

        这是系统工作方式的一个优点和一个缺陷。您可以这样做,它可以工作,而且似乎不会出现任何直接和明显的安全问题。我不知道这是否是 PHP 的预期用途,但它可以工作,所以如果它适合您的情况,您可以使用它。当使用足够多的这些小变通方法时,陷阱就会出现,最终可能会在某处出现安全问题,但我不记得 CSS 曾被用作攻击的媒介。

        【讨论】:

          【解决方案5】:

          你可以这样做来生成动态css

          文件 css.php

          <?php
          header("Content-Type: text/css");
          
          echo 'p {color:red}';
          ?>
          

          html(不完整,但应该可以跨浏览器使用)

          <link rel="stylesheet" href="css.php" type="text/css" />
          <p>This should be red</p>
          

          【讨论】:

            【解决方案6】:

            一些更严格/严谨的人可能会说正确的 CSS 不需要变量,yadda yadda。

            我个人认为,如果这可行,那么这是为 CSS 添加一些易用性的聪明方法。我完全赞成。

            【讨论】:

              猜你喜欢
              • 2021-06-22
              • 2014-03-24
              • 1970-01-01
              • 2017-07-11
              • 1970-01-01
              • 2016-06-17
              • 1970-01-01
              • 2011-07-15
              • 2016-05-01
              相关资源
              最近更新 更多