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


I want to add my class name with each element in css using php

我想创建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解析器。这些对我的解决方案来说还不够好。

为此,我推荐Sabberworm的PHP CSS Parser。我自己也用过,这是一个很棒的工具。您可以通过Composer将下面的代码添加到您的Composer.json 中来安装它

{
    "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()来完成。

希望这能有所帮助。

css方式:

*{
    background: #333;
}

js方式:

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

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

(php方式)

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

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