我想用css中的每个元素添加我的类名

时间:2015-07-02 07:36:43

标签: php css

我想创建css解析类型..

Parse会在CSS中为每个元素添加我的类名。

例如我有以下CSS

.class1 {font-size:10px}
.class2 {font-style:italic}
body {height:100%}
html {width:100%}

在我的解析器之后它会是这样的。

.myclass .class1 {font-size:10px}
.myclass .class2 {font-style:italic}
.myclass body {height:100%}
.myclass html {width:100%}

我已经创建了一个函数,但是当@media查询带有嵌套元素的CSS时,它不起作用。

任何人都可以为我提供良好的CSS解析器/解决方案。我已经尝试过可用的CSS解析器。那些对我的解决方案来说还不够好。

3 个答案:

答案 0 :(得分:1)

为此,我推荐Sabberworm的PHP-CSS-Parser。我自己用过它,这是一个很棒的工具。您可以通过将代码添加到composer.json

下面的Composer来安装它
{
    "require": {
        "sabberworm/php-css-parser": "*"
    }
}

安装后,它非常直接。您可以从包含字符串中的css的变量传入CSS代码,也可以从特定目录中读取文件。在我的例子中,我将从目录中读取它。

$oCssParser = new Sabberworm\CSS\Parser(file_get_contents('style.css'));
$oCssDocument = $oCssParser->parse();

现在你准备好了。在这个解析器的Github上,他们实际上有一个如何为所有选择器添加id的示例。我将告诉你如何用课程来完成它。

$myClass = ".myclass";
foreach($oCssDocument->getAllDeclarationBlocks() as $oBlock) {
    foreach($oBlock->getSelectors() as $oSelector) {
        $oSelector->setSelector($myClass.' '.$oSelector->getSelector());
    }
}

现在你已经开始上课了。现在你想要退回最终产品,不是吗?通过使用内置函数render()可以轻松完成。像这样的东西

$oFormat = Sabberworm\CSS\OutputFormat::create()->indentWithSpaces(4)->setSpaceBetweenRules("\n");
print $oCssDocument->render($oFormat);

当然,如果您想将其输出到文件,您也可以使用file_put_contents()执行此操作。

希望这有帮助。

答案 1 :(得分:0)

<强> CSS-方式:

*{
    background: #333;
}

<强> JS-方式:

document.body.getElementsByTagName("*").classList.add("class");

document.getElementsByTagName("*").classList.add("class");

<强>(PHP-方式)

echo "<script>document.getElementsByTagName('*').classList.add('yourclass');</script>"

答案 2 :(得分:-1)

也许您应该只使用http://sass-lang.com/到您的产品