使用php解析器改进和简化css

时间:2011-05-22 21:09:59

标签: php css parsing simplification

我想通过几种方式改进css语法,例如:

  • 定义变量
     link-color1 = #fff
  • 数学计算
     width:500-3-2 这看起来很愚蠢,但有变量:
      width: container - inner - 3px;
  • 风格延伸
      #foo{background:#ddd;color:#eee;} #bar {@extend: #foo;color:#fff;}
  • 跨浏览器功能
      -moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;替换为 border-radius:3px;

这些只是我的想法的例子,但是库可以是不同的

我正在寻找一个php库,解析一个sytax类似于css的文件,并生成一个有效的css文档。

这很重要我不想将php sytax插入我的css 文件,因为:

  • PHP看上去很复杂,很难看 #foo {color:<?php echo $color1; ?>;}
  • Notepad ++绝对困惑。 我也是

SASS是离线工作的非常好的解决方案,但我仍在搜索PHP解决方案,因为:

  • 改进的css文件可供其他开发人员使用,以便他们可以修改和测试它。对于更大的社区,服务器上使用的php-parser是更容易的方式。
  • PHP也可以通过基于文件修改日期和哈希码的简单修订系统来节省资源。

这是我写的示例: 在/css/index.php

php parser

用法:

@color1: #1a1a1a;
@color2: #444444;

div#container {background:@color1;}
div#inner {background:@color2;}

HTML链接:

<link rel="stylesheet" type="text/css" href="/css/?main.css" />

这仅适用于颜色。我需要一个解析器来列出所选的选项。

6 个答案:

答案 0 :(得分:5)

试试SASS。它支持变量,数学计算,样式继承和更多功能。它没有在PHP中实现,但它会生成静态文件。

答案 1 :(得分:4)

您是否尝试过CSS Crush

答案 2 :(得分:1)

你可以用php包含你的css:

<link href="style.php" rel="stylesheet" type="text/css" />

在你的style.php中,你可以:

header("Content-Type: text/css");

此时你可以使用php的所有功能来做你想做的事情:

<?php

 $rules = 'font-size:11px;padding:5px;';

?>

td { <?php echo $rules; ?> }

Addedum

继承:

<?php

   $parent=array( 'td' => 'color:;padding;etc;'
                  'p' => 'other rules'
                   //> other rules
               );
?>

.inheritance {
    <?php echo $parent['td']; ?>
   //> other rules here
 }

答案 3 :(得分:1)

我不认为这是一个好主意,特别是在生产环境中,但如果你坚持这样做,我建议只安装SASS并使用passthru()从php执行它

http://sass-lang.com/

http://www.php.net/manual/en/function.passthru.php

喜欢这个

<?php
$css_path = '/';  // location of your real css files
$sass_cmd = 'sass -f';  // sass cmd
passthru($sass_cmd . $css_path . $_GET['cssfile'];
?>

通过

调用
cssparse.php?cssfile=xyz.css

如果你想获得幻想,可以使用重写规则通过PHP脚本汇集所有* .css请求。

例如:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} \.css$
RewriteRule   ^(.*\.css)$  cssparse.php?cssfile=$1

当您在浏览器中请求/example.css时, 它被重写为/cssparse.php?cssfile=example.css 它调用SASS并返回输出

答案 4 :(得分:0)

你想要做的只是一个好主意。每次用户加载CSS文件时,首先必须通过PHP函数生成“改进”版本的CSS文件。只有社交网站才需要用户可以自定义布局。然后必须从数据库加载自定义样式并使用PHP将其插入到CSS文件中。

对于没有此功能的网站,在解析CSS之后,没有区别。创建CSS文件对您来说更容易/更有效。

此外,如果您的CSS必须通过PHP解析器,则无法离线修改CSS。

答案 5 :(得分:0)

LessPhp

感谢@Kru我发现Less.js这是一个非常好用且聪明的css解析器,但正如我所说,最好的解决方案是PHP。在论坛和谷歌上搜索一下后,我发现LessPhp是Less.js的PHP端口

可以找到文档here

LessPhp也在github上。