Главная » CSS, Веб-разработка

CSS переменные с помощью PHP

4 Декабрь 2009 просмотров 9 640 комментариев 30


Как мы знаем, CSS3 обещает нам такую фичу как CSS переменные, я рассказывала об этом тут. Но чудо это светит нам совсем не в ближайшем будущем. Однако выход всегда есть.

Если вы хотя бы немного знаете основы языка PHP, то нам с вами не составит труда  реализовать использование CSS переменных уже сейчас. Все довольно легко и просто, как пишет нам Крис Койер в своей статье.

Style.php

Вместо привычного нам  расширения .css, мы подключим к страничке файл .php

<link rel='stylesheet' type='text/css' href='css/style.php' />

Тип документа

В самом начале файла style.php необходимо указать, что на выходе нам все-таки нужен файл стилей, т.е. указываем тип документа:

<?php
header("Content-type: text/css; charset: UTF-8");
?>

Ломаете голову как сдать сессию? У нас курсовые работы на заказ срочно.

Вводим переменные

Теперь установим значения для нескольких переменных, например такие:

<?php
 header("Content-type: text/css; charset: UTF-8");

 $brandColor = "#990000";
 $linkColor = "#555555";
 $CDNURL = "http://cdn.blahblah.net"
?>

Использование переменных

Достаточно просто вывести обозначенные переменные в необходимых местах стилей:

#header {
 background: url("<?php echo $CDNURL; ?>/images/header-bg.png") no-repeat;
}
a
 color: <?php echo $linkColor; ?>;
}
...
ul#main-nav li a {
 color: <?php echo $linkColor; ?>;
}

Другие идеи использования CSS файла сгенерированного с помощью PHP

  1. Сжатие CSS файла с помощью PHP
  2. Теоретически, вы даже можете использовать информацию о User-agent для вывода стилей под конкретный браузер.
  3. В зависимости от сезона года, вы можете менять стили, используя информацию о текущей дате.
  4. Генерировать различные цвета, устанавливать фон случайным образом, и в конце-концов, просто тестировать.

Не работает?

В некоторых случаях (например для реализации нашей идеи в WordPress), вам возможно потребуется прописать следующие строчки в файле .htaccess (только для Apache):

<FilesMatch "^.*?style.*?$">
SetHandler php5-script
</FilesMatch>

При этом файл стилей оставляем с расширением .css, а  .htaccess кладем в туже папку, где и стили.

Комментариев 30 »

  • ]]>Anton Shevchuk пишет: ]]>

    В своей теме Constructor для WP использовал немного другой синтаксис:

    /* Output CSS */
    echo <<<CSS
    h1,
    h2 { color:{$color1} }
    h3,
    h4 { color:{$color2} }
    h5,
    h6 { color:{$color3} }
    CSS;

    Читабельность выше, но отсутствует подсветка синтаксиса CSS.

      Цитировать

  • ]]>Nayjest пишет: ]]>

    Осталось добавить кеширование ;)

      Цитировать

  • ]]>Николай Громов пишет: ]]>

    WP и так генерит нифиговую нагрузку на сервак, ибо при каждом запросе страницы запускает ВСЕ механизмы функций, а не только те, которые нужны.
    добавим генерацию CSS для каждой страницы и без агрессивного кеширования можно забыть о скорости…

      Цитировать

  • ]]>kix пишет: ]]>

    Да, генерируемый CSS — интересная идея. Можно, например, определять юзерагент, и не отдавать нормальным броузерам всякие хаки для IE.
    Чтобы оно не тормозило и не нагружало сервера, наверное, имеет смысл еще каким-то образом все это дело кешировать.

      Цитировать

  • ]]>biwebco пишет: ]]>

    ничего нового и полезного.
    Как читатили уже писали тут: дело уперается в кэширование.
    Напишите лучше статью как такое сделат.
    Спасибо.

      Цитировать

  • ]]>Автор пишет: ]]>

    biwebco,
    В комментариях к оригинальной статье уже есть ответ на этот вопрос.
    Достаточно добавить эти строчки в код файла:

    header("Cache-Control: must-revalidate");
    $offset = 60 * 60 ;
    $ExpStr = "Expires: " . gmdate("D, d M Y H:i:s", time() + $offset) . " GMT";
    header($ExpStr);
    

      Цитировать

  • ]]>Vadim пишет: ]]>

    Эх, а валидатору не нравится такое расширение :(
    org.w3c.www.http.HttpInvalidValueException: Invalid content type.

      Цитировать

  • ]]>Combox пишет: ]]>

    Проверял, точно валидатор не в восторге:(

      Цитировать

  • ]]>solarisadmin пишет: ]]>

    Спасибо за статью :)
    PS Очень приятно видеть девушек среди вебмастеров :) Спасибо за разрушение стереотипов!

      Цитировать

  • ]]>Sonya пишет: ]]>

    Проверял я, но поисковики не восторге(

      Цитировать

  • ]]>Texnar пишет: ]]>

    Не понял целесообразности предлагаемого метода. Генерировать, кешировать… Что меняется в качественном плане? На мой взгляд – ничего нового и хорошего такой подход не принесет.

      Цитировать

  • ]]>cava150 пишет: ]]>

    Добрый день!
    Очень понравилася=)
    а можно ж впринципе создать асоциативный массив,где будет свойство, и значение свойства, но вопрос будет ли оно целесобразно?

      Цитировать

  • ]]>Русский блоггер пишет: ]]>

    Texnar, представьте, если много много раз встречается какой то цвет, а вам нужно перенести шаблон на другой проект, изменив цвета, но сохранив дизайн в целом. Вот тут переменные очень удобны! И таких примеров можно привести массу. Идея мне очень понравилась.

      Цитировать

  • ]]>Lenny пишет: ]]>

    имхо, лучше пусть ява меняет css, меньше нагрузка не сервер будет.

      Цитировать

  • ]]>Санёк пишет: ]]>

    Русский блоггер:
    Texnar, представьте, если много много раз встречается какой то цвет, а вам нужно перенести шаблон на другой проект, изменив цвета, но сохранив дизайн в целом. Вот тут переменные очень удобны! И таких примеров можно привести массу. Идея мне очень понравилась.

    ctrl+h (замена) есть в любом редакторе. Не вижу смысла в таком методе.

      Цитировать

  • ]]>Руслан К. пишет: ]]>

    хорошая заметка, осталось найти место чтоб прикрутить :)

      Цитировать

  • ]]>walik пишет: ]]>

    Интересная статья, надо будет попробовать ))

      Цитировать

  • ]]>Joker-jar пишет: ]]>

    Мне больше нравится построение с помощью шаблонов. Написал свой собственный простенький шаблонизатор, сейчас все с помощью него реализовываю

      Цитировать

  • ]]>Frimen пишет: ]]>

    “лучше пусть ява меняет css, меньше нагрузка не сервер будет.”

    Мне тоже так кажется. Это слишком большая нагрузка на хостинг.

      Цитировать

  • ]]>z пишет: ]]>

    Vadim: Эх, а валидатору не нравится такое расширение :(
    org.w3c.www.http.HttpInvalidValueException: .  

    Нужно utf-8 убрать в заголовке

      Цитировать

  • ]]>Vadim пишет: ]]>

    Что-то я так и не понял, зачем это нужно?
    А если и нужно, то по-моему не так уж и сложно догадаться сменить расширение у CSS-файла.

      Цитировать

  • ]]>DuCOz пишет: ]]>

    Добрый день!
    Очень понравилася=)
    а можно ж впринципе создать асоциативный массив,где будет свойство, и значение свойства, но вопрос будет ли оно целесобразно?

      Цитировать

  • ]]>alexandret пишет: ]]>

    испоьзовал в новом проектике, получислоь как раз кстати:)

      Цитировать

  • ]]>Воффка пишет: ]]>

    Хм.. интересно! Надо где-то применить! :)

      Цитировать

  • ]]>demarket пишет: ]]>

    Спасибо, для своей создаваемой темы как раз это искал.

      Цитировать

  • ]]>vadimvx пишет: ]]>

    Нужно utf-8 убрать в заголовке  

    У меня в модуле Joomla mod_jmlogin возникала такая ошибка, убрал utf-8 – ошибка устранилась :) Спасибо, сам бы не додумался :)

      Цитировать

  • ]]>Zloy пишет: ]]>

    Такой подход очень удобен, если кто-то желает цветовые схемы для сайта. Чтобы не плодить .css, очень удобно выводить его через один .php стиль.

      Цитировать

  • ]]>рф пишет: ]]>

    css должен оставаться css, либо используйте js накрайняк.
    тем более в окончательной версии CSS3 планируют реализовать переменные.

      Цитировать

  • ]]>Mik пишет: ]]>

    Нужно utf-8 убрать в заголовке  

    Спасибо, помогло!

      Цитировать

Комментарии

Добавьте ваш комментарий, или трекбэк с сайта. Вы также можете подписаться на комментарии к этой статье через RSS.

Вы можете использовать теги:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Чтобы получить аватарку, зарегистрируйтесь на Gravatar.