目前我正在使用PHP创建完全动态的网站。现在我想通过我的Index.php编辑一些CSS属性
在Index.php里面我将边框的颜色发送到带有会话的css文件。
session_start();
$_SESSION['CssBorder'] = 'red';
在我的Css文件中,我参加会议
<?php
header('Content-type: text/css');
$CssBorder = $_SESSION['CssBorder'];
?>
然后在css中使用它如下
.Container{
border-left: 1px solid <?php echo $CssBorder ?>;
这不起作用,它没有显示颜色。而且我必须做其他错误的事情,因为跟随的第一个CSS属性没有被使用,之后的所有内容看起来都应该是。
另外,我知道它有效,当我用一个普通的字符串替换会话如下。它很完美。
$string = 'red';
为什么它不起作用,我该如何解决这个问题?
非常感谢。
答案 0 :(得分:2)
不,您希望能够以这种方式访问外部样式表,最适合您的解决方案是,
在标题中设置样式标记,在标题之前,您应该为$CssBorder
分配值。
<head>
<style type="text/css">
h1 {color:red;}
p {color:blue;}
.Container {border-left: 1px solid <?php echo $CssBorder ?>;
</style>
</head>
注意:作为最佳实践,我相信您应该将课程重命名为有意义的内容。的动态边界强>
所以它看起来像,
.dynamic-border {border-left: 1px solid <?php echo $CssBorder ?>;
答案 1 :(得分:0)
使用PHP生成CSS是一种不常见但可行的方法。我认为在某些情况下可能存在竞争条件,特别是因为您明确指出使用$_SESSION
是问题。
我的意思是,我不确定当请求PHP生成的样式表时{04}已被刷新并且可以从其他进程读取。例如
$_SESSION['CssBorder']
此时browser >>>: GET index.php
server <<<: 200 OK
server <<<: Set-Cookie: PHPSESSIONID=blah
server <<<: HTML response body here... until some style.php
browser <<<: GET style.php
browser <<<: Cookie: PHPSESSIONID=blah
可能尚未对处理第二个请求的进程可见。但这只是猜测。
答案 2 :(得分:0)
正如@Nikil所说,'我猜你在你的css文件中缺少start_session()? “我在CSS文件中错过了一个开始会话。
对不起,我在我的问题中创建了一个有这种错误的问题。 我是初学者PHP编码器,之前从未使用Session。
我读到并且你只需要在创建你的激情变量的文件中使用session_start。
谢谢大家,真诚的道歉。 (和我的英文)