Разбор CSS и удаление правил, которые дают ошибку
Я хочу удалить правила CSS, которые дают ошибку, как здесь пример
.banneritem {
border: 1px solid #CED4E0;
border color: #CBCBCB;// is not valid cause it actually refers to border-color missing (-)
margin-bottom: 10px;
}
Есть ли какие-либо рамки или библиотеки, которые будут опускать такого рода правила CSS из файла.
Я использую sabberworm CSS анализатор здесь мой пример кода
if ($loadedContents != ""){
preg_match_all('/display: none/is', $loadedContents, $matchvalue);
if (count($matchvalue[0]) > 0) {
$oCssParser = new Sabberworm\CSS\Parser($loadedContents);
$oDoc = $oCssParser -> parse();
foreach ($oDoc->getAllRuleSets() as $oRuleSet) {
if ($oRuleSet instanceof Sabberworm\CSS\RuleSet\AtRule) {
break;
}
$sSelector = $oRuleSet -> getSelectors();
$sSelector = $sSelector[0] -> getSelector();
$aDisplayRule = $oRuleSet -> getRules('display');
if (count($aDisplayRule) > 0) {
$aValues = $aDisplayRule['display'] -> getValues();
if ($aValues[0][0] == "none") {
$displayValue[] = "display:none;";
$displaySelector[] = $sSelector;
}
}
$bDisplayRule = $oRuleSet -> getRules('visibility');
if (count($bDisplayRule) > 0) {
$bValues = $bDisplayRule['visibility'] -> getValues();
if ($bValues[0][0] == "hidden") {
$visibilityValue[] = "visibility:hidden;";
$visibilitySelector[] = $sSelector;
}
}
}
}
}
Я здесь работаю над всеми правилами CSS и нахожу вывод: ни одно из правил пока что из-за этого ошибочного правила я получаю фатальную ошибку.
Любая помощь будет высоко ценится.
2 ответа
Да, я нашел решение,
Сначала я поставил тот же код, что и в моем предыдущем вопросе, а затем я создал новый фиктивный CSS и создал новую функцию, см. Ниже,
Для этого я использую два класса имя 1). csstidy 2). Stylecow
require "../stylecow/autoload.php";
//for css rules omition
require('../csstidy/class.csstidy.php');
function makeDummyCssFile($html)
{
$cssTidy = new csstidy();
$newCss ="";
foreach ($html->find('link') as $e) {
$cssHrefs = $e -> href;
preg_match_all('~favicon~is', $cssHrefs, $feviMatch);
if (count($feviMatch[0]) == 0) {
preg_match_all('~(\bhttp|https\b)~is', $cssHrefs , $isThirdPartyCss);
if(count($isThirdPartyCss[0]) > 0)
{
$loadedHrefs = $cssHrefs;
}
else
{
preg_match_all('~' . SITE_NAME . '~is', $cssHrefs, $match);
if (count($match[0]) == 0) {
$loadedHrefs = SITE_NAME . $cssHrefs;
} else {
$loadedHrefs = $cssHrefs;
}
}
$loadedContents = file_get_contents($loadedHrefs);
$css = Stylecow\Parser::parseFile($loadedContents);
$newCss.= $css;
}
}
$result = $cssTidy->parse($newCss);
$newCss = $cssTidy->print->plain();
if($result)
{
foreach($cssTidy->log as $line => $array)
{
// echo "<pre>";print_r($array);
$array_size = count($array);
for($i = 0; $i < $array_size; ++$i)
{
if($array[$i]['t'] == "error")
{
$newCss = preg_replace("~(".$array[$i]['m']['selector']."[^\}]*\})~is", "", $newCss);#qtip-overlay div[^\}]*\}
}
}
}
}
$cssName = explode("http://", SITE_NAME);
$cssFileName = str_replace(".", "-", str_replace("/","",$cssName[1])) . "-" . date('Y-m-d') . ".css";
$str = "";
$myFile = DUMYPATH . $cssFileName;
if ($myFile != "") {
$fh = fopen($myFile, 'w+') or die("can't open file");
$stringData = $newCss;
fwrite($fh, $stringData);
fclose($fh);
}
return $cssFileName;
}
Надеюсь это поможет:)
Я предлагаю использовать более надежный синтаксический анализатор, основанный на LESS, SASS или SCSS. Если вы используете Compass, среду предварительной обработки CSS, это поможет вам написать более структурированный код, а также проверить ваш CSS. Есть несколько команд времени компиляции, которые могут оказаться полезными:
-q, --quiet Quiet mode.
--trace Show a full stacktrace on error
--force Allows compass to overwrite existing files.
--dry-run Dry Run. Tells you what it plans to do.
--boring Turn off colorized output.