улучшить и упростить css с помощью php-парсера

Я хочу улучшить синтаксис 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-библиотеку, которая анализирует файл, синтаксис которого похож на css, и создает действительный документ css.

Важно, что я не хочу вставлять синтаксис php в свой файл css, потому что:

  • PHP выглядит сложным и уродливым
    #foo {color:<?php echo $color1; ?>;}
  • Notepad++ совершенно запутался. Я тоже

SASS — очень хорошее решение для автономной работы, но я все еще ищу решение для PHP, потому что :

  • Улучшенные файлы css будут доступны для других разработчиков, чтобы они могли изменять и тестировать их. Для более крупного сообщества использование php-parser на сервере является более простым способом.
  • PHP также может экономить ресурсы благодаря простой системе ревизий, основанной на дате изменения файла и хэш-коде.

Вот пример того, что я написал: парсер php на /css/index.php

Применение:

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

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

HTML-ссылка:

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

Это работает только с цветами. Мне нужен парсер для перечисленных вариантов.


person Community    schedule 22.05.2011    source источник
comment
Что именно вы подразумеваете под «определением переменных» и «наследованием стиля»? Вы хотите иметь переменную PHP со значением цвета, чтобы вы могли использовать ее для более чем одного свойства CSS?   -  person Midas    schedule 23.05.2011
comment
I need a php file which parse my improved php, который анализирует ваш css? Я не понимаю, что вы имеете в виду. Чтобы разобрать его, вы можете просто использовать переменные php без необходимости создавать собственный парсер.   -  person dynamic    schedule 23.05.2011
comment
Эта ссылка может быть интересна. developer.yahoo.com/performance/rules.html#css_expressions   -  person Felipe    schedule 23.05.2011
comment
нет. Я видел библиотеку, которая делает именно то, что мне нужно, но я забыл ее название. так оно и есть. надеюсь кто-нибудь знает это имя или похожее   -  person Gergely Fehérvári    schedule 23.05.2011
comment
Я не вижу смысла в наследовании, так как вы можете просто указать больше элементов в CSS: em, strong { #foobar } вместо em { #foobar }; strong { #foobar }?   -  person Midas    schedule 23.05.2011
comment
добавленный вами синтаксический анализатор полностью снижает производительность. Я предлагаю вам избегать этого 100% времени   -  person dynamic    schedule 23.05.2011
comment
@omnosis, даже если SASS написан на рубине, он генерирует статические файлы CSS на диске. Таким образом, нет необходимости запускать PHP-скрипт для каждого запроса, чтобы генерировать один и тот же CSS и снижать производительность. SASS создает для вас статический файл всякий раз, когда вы изменяете документ SASS, поэтому вы можете быть уверены, что у вас есть последний скомпилированный CSS на диске, когда вы решите что-то изменить.   -  person rid    schedule 23.05.2011
comment
Почему минусы?! Это совершенно правильный вопрос.   -  person Konrad Rudolph    schedule 23.05.2011


Ответы (6)


Попробуйте SASS. Он поддерживает переменные, математические вычисления, наследование стилей и многие другие функции. Он не реализован в PHP, но генерирует статические файлы.

person rid    schedule 22.05.2011

Вы пробовали CSS Crush?

person Community    schedule 27.05.2011

вы можете включить свой css с php с помощью:

<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; ?> }

Дополнение

Наследование:

<?php

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

.inheritance {
    <?php echo $parent['td']; ?>
   //> other rules here
 }
person dynamic    schedule 22.05.2011
comment
это не css. это пхп. - person Gergely Fehérvári; 23.05.2011
comment
то, что вы просите НЕ css. тебе известно? И почему вы добавили PHP в качестве тега? Я бы не ответил этим, если бы вы не добавили этот тег - person dynamic; 23.05.2011
comment
да, это правильно, но я не хочу использовать функции переменных php в моем не css файле. я хочу использовать css как материал, а не парсить с php. Кстати, ваш ответ не может решить проблемы наследования. я добавил тег php, потому что парсер должен быть PHP. - person Gergely Fehérvári; 23.05.2011
comment
Вы не понимаете сути. Вы не можете использовать CSS-подобные вещи, потому что то, что вам нужно, НЕ является CSS. И, конечно же, вы можете решить эту проблему с помощью PHP. Вам просто нужно сохранить в переменной родительские правила, а затем повторить переменную. Я отредактировал свой ответ, чтобы показать вам, как это сделать. - person dynamic; 23.05.2011
comment
ты меня не понимаешь. спасибо за ваш ответ, но это не то, что я ищу. я знаю, что могу изменить css с помощью php. но я ищу парсер. - person Gergely Fehérvári; 23.05.2011
comment
@omnosis, хорошо, как хочешь. в следующий раз добавьте больше деталей в свой вопрос. И учтите следующее: используя собственный парсер, вам нужно будет изучить его синтаксис, а если вы используете мое решение, вы можете делать все, что хотите, без необходимости изучать собственное нестандартное решение. - person dynamic; 23.05.2011
comment
вы правы, но что касается jquery, то это не те функции, которые предоставляют вам браузеры, а помощь в создании лучшего javascript-документа, улучшение разработки, экономия вашего времени и т. д. jquery не является стандартным решением! - person Gergely Fehérvári; 23.05.2011

я не думаю, что это хорошая идея, особенно в производственной среде, но если вы настаиваете на этом, я бы предложил просто установить SASS и выполнить его из php с помощью passthru()

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

если вы хотите пофантазировать, вы можете использовать правило перезаписи для направления всех ваших запросов *.css через ваш PHP-скрипт.

eg:

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

таким образом, когда вы запрашиваете /example.css в браузере, он переписывается как /cssparse.php?cssfile=example.css, который вызывает SASS и возвращает результат.

person Community    schedule 25.05.2011
comment
спасибо, я проверю, как только у меня будет время для этого - person Gergely Fehérvári; 25.05.2011

То, что вы хотите сделать, просто не очень хорошая идея. Каждый раз, когда пользователь загружает ваш файл CSS, он сначала должен пройти через функцию PHP, которая генерирует файл CSS из вашей «улучшенной» версии. Это необходимо, например, только для сайтов социальных сетей, на которых пользователи могут создавать собственные макеты. Затем пользовательские стили должны быть загружены из базы данных и вставлены в файл CSS с помощью PHP.

Для веб-сайта без этой функции после парсинга CSS разницы нет. Создание файла CSS было для вас проще/эффективнее.

Кроме того, если ваш CSS должен пройти анализатор PHP, невозможно изменить CSS в автономном режиме.

person Midas    schedule 22.05.2011
comment
Я думаю, вам лучше не тратить время на поиск скрипта, который сделает это за вас. Я лично сделал бы все, чтобы ускорить мой CSS. И я думаю, что скорость веб-сайта важнее, чем то, насколько легко дизайнеру сделать CSS. - person Midas; 23.05.2011
comment
Вы правы, но если php генерирует css, я могу сохранить его простым запросом. Просто для разработки было бы здорово. - person Gergely Fehérvári; 23.05.2011
comment
Вы также можете удалить парсер со своего веб-сайта после создания окончательной версии файла CSS. - person Midas; 23.05.2011
comment
офк. это не о php, но с php мне не нужно открывать программу синтаксического анализатора, а затем сохранять, а затем загружать страницу. php делает это автоматически. - person Gergely Fehérvári; 23.05.2011

Меньше Php

Благодаря @Kru я нашел Less.js, который является очень хорошим и умным парсером css. , но, как я уже сказал, лучшим решением будет PHP. После небольшого поиска на форумах и в Google я нашел LessPhp, который является портом PHP. Less.js

Документацию можно найти здесь.

LessPhp также находится на github.

person Community    schedule 27.05.2011