tl;dr-我想知道是否可以将一个对象传递到带有CSS头的PHP文件中,这样我就可以使用这个对象来操作各种CSS属性
我试图做的是允许我的PHP/CSS文件与网页中的其他对象/PHP文件交互,例如菜单项对象。我的最终目标是在CSS文件中使用PHP来计算菜单项的数量,并应用适当的width
值,以便在页面上均匀地分配它们。
下面我用一个非常简单的基于颜色的例子来展示我到目前为止的理解。。。
我知道,对于CSS文件中PHP的基本用法,可以执行以下操作:
<?php header("Content-type: text/css");
$dkgreen = '#008400';
body {
background:<?=$white?>;
}
?>
我也知道OO PHP可以用来实现类似的事情,例如:
class css {
function __construct($args=array()) {
foreach($args as $key => $field) {
$this->{"$key"} = $args["$key"];
}
return $this;
}
}
$css = new css(
array(
bgcolor => '#00FF00',
fgcolor => '#000000',
)
);
body {
background: <?php echo $css->bgcolor; ?>;
color: <?php echo $css->fgcolor; ?>;
}
实验结果
1) OO风格
我首先尝试让我的css类为css创建一个singleton对象,我尝试使用$css = css::singleton()
和getCss()
函数而不是$css = new css(...)
来检索该对象。我的想法是,我不会简单地初始化另一个css对象,这对我来说毫无用处
$css = css::singleton();
$css->getCss()->bgcolor;
没有成功。
2) 将链接标签中的href更改为style.php?bgcolor=00FF00&fgcolor=000000
当我可以轻松地键入$bgcolor = $_GET['bgcolor'];
时,这种方法非常有效,但在我看来并不是一种优雅的解决方案。
理想情况下,我希望保留面向对象的方法,但如果这不可能,我会很乐意接受POST方法(即允许我使用$bgcolor = $_POST['bgcolor'];
),以避免在链接标记中用丑陋的参数填充源代码。
如果可能的话,我也希望避免创建多个.css文件。
有什么建议吗?
非常感谢,
欧文。
实现这一点的最简单方法是将CSS文件创建为PHP文件,并链接到它。
<link href="style.php" rel="stylesheet" type="text/css" media="all" />
然后,您解析所有代码,并在最后将其转储出去。
$css = ''; # all of your compiled CSS after you do what you need to
header("Content-type: text/css");
print $css;
exit;
现在,您的CSS正在按照您希望的方式进行解析,并作为CSS提供。
我认为这是不可能的,这不符合CSS的目的。
编辑:基本上,假设CSS包含在定义良好的结构上应用样式的数据。所以CSS甚至不应该有变量(这是一个很大的争论)。解决问题的"好的理论方法"是生成具有适当id和类的html代码,这样你就不必使用CSS进行任何计算:你只需要应用一个样式。
此外:CSS文件被缓存。如果它们一直在更改,则可能存在缓存问题,或者需要要求不要缓存文件。您可能需要使用PHP生成内联CSS,但不需要CSS文件本身。