我想创建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解析器。那些对我的解决方案来说还不够好。
答案 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/到您的产品