Могу ли я создавать пользовательские определения цветов, которые я могу использовать между CSS, JS и HTML?

У меня есть синий цвет, который я хочу использовать во многих местах в моем приложении, и в настоящий момент я копирую и вставляю его между стилями в своем CSS. Есть ли способ определения константы, такой как стандартные цвета, "синий", "красный" и т.д., Которые я мог бы разделить между моим CSS, моим HTML и моим JS?

Я бы хотел сказать (где-то, желательно CSS)

myblue = #33CC99

в CSS говорят...

background-color:myblue;

в HTML говорят...

<td color="myblue"/>

и в JavaScript

tag.style.backgroundColor = myblue;

Я предполагаю, что это невозможно, и google ничего не изменил, так что у кого-нибудь есть идеи? Я сомневаюсь, что я единственный человек, которому это нужно.

Ответ 1

Очень перспективный продукт, который "компилирует" выражения более высокого уровня, такие как переменные в CSS, LESS. Это нужно Руби. Я еще не использовал его, но это определенно стоит посмотреть.

Более примитивный способ сделать это будет использовать серверный скриптовый язык, такой как PHP.

Вы определяете константы в PHP так:

define ("MYBLUE", "#33CC99");

а затем выведите значение, когда необходимо, с помощью <?=MYBLUE;?>

Большой недостаток. Чтобы сделать это во внешних файлах css и js, вам, очевидно, нужно было бы их проанализировать с помощью интерпретатора PHP, что не очень хорошо оценивается, если у вас много посетителей. Для сайта с низким трафиком это, вероятно, не имеет значения.

Ответ 2

Да, это невозможно. Однако вы можете написать собственный препроцессор CSS (или использовать один из существующих там), например, с PHP. Большой недостаток заключается в том, что вам придется выводить код цвета на весь сайт с помощью PHP, и ваши сценарии будут выглядеть как

tag.style.backgroundColor = <? echo $myblue; ?>

а также в CSS

.someClass {
  background-color: <? echo $myblue ?>
}

или что-то подобное. И это тоже не очень приятно. Конечно, вы можете использовать любой серверный script язык по вашему выбору. Насколько я могу судить, это единственная возможность использовать постоянную цвета на всем веб-сайте.

Вы можете посмотреть на некоторые процессоры:

Ответ 3

Вы можете посмотреть HAML + SASS. Хотя вы не можете определить переменные для всех трех языков одновременно, эти два могут упростить запись HTML + CSS.

Ответ 4

Как бы я хотел это сделать, это сделать класс в моем CSS.

.color_class {color: #33CC99;}

Затем вызовите его в моем HTML

<td class="color_class" />

Вы можете назначить несколько классов элементу HTML.

В JS просто назовите класс

document.getElementById('id').className = 'color_class';

Конечно, вы можете играть с тем, как вы хотите выбрать свой элемент. Библиотека JS, вероятно, имеет еще более простые методы для назначения классов CSS.

Ответ 5

Чтобы достичь этого, используя любой динамический CSS (например, служащий файлу PHP с типом контента text/css), лучше всего выделить разделы, в которых вы определяете тему.

<script type="text/javascript">
   var theme = '#003366';
 </script>

Затем вы можете использовать файл JavaScript для записи стилей на основе тем.

Однако, если вы можете использовать предварительный процессор CSS, пойдите с этим. У вас будет гораздо больше гибкости, и код будет легче поддерживать. Я почти всегда использую страницу PHP или JSP для CSS.

Ответ 6

Как отмечают другие пользователи, вы не можете сделать это в прямом HTML, JS или CSS, если вы не передадите весь контент HTML, JS и CSS через CGI/PHP/ASP script - который на самом деле не плохой подход как это легко поддерживать.

Если вы используете строку запроса в ссылке на включенные файлы CSS/JS - например, '/css/stylesheet.php?timestamp=2010-01-01+00:00:00', тогда почти все клиенты будут агрессивно кэшировать ваши файлы CSS/JS, отрицая какое-либо влияние на синтаксический анализ загрузки на языке сценариев, возможно, хотя, если сайт, скорее всего, будет особенно занят, я не буду слишком связан с этим).

Если вы используете Apache (что вполне вероятно), альтернативный подход будет использовать что-то вроде mod_set, чтобы переписать все HTML, JS и CSS файлы на лету для вас. Это может быть сложнее поддерживать, если вы не знакомы с настройкой Apache (или используете другой веб-сервер).

Что касается именования тегов:

В любом из подходов я решительно рекомендую использовать четкую систему тегов для обозначения ваших динамических переменных (например,% MyBlue%) и рассмотреть возможность отображения имен переменных (например,% HeadingBackgroundColor%,% FontColor%, даже если для обоих установлено значение% MyBlue%), так как это может помешать тому, чтобы потом получилось волосатое (когда вы обнаружите, что изменение одного значения имеет предполагаемые последствия).

Использование более типичных имен может показаться излишне подробным с первого взгляда, но во многих случаях это вызывает проблемы, потому что цвета заканчиваются непреднамеренными способами, когда они существенно отличаются от исходной схемы (это относится к большому программному обеспечению, является скин-сайтом - потому что автор сделал предположение, что% value1% и% value2% всегда будут совпадать, и поэтому значение% 1% и% value3% - что означает, что параметры для тематики сильно ограничены непреднамеренной зависимостью).

Ответ 7

Я делаю это во время сборки, запустив мои файлы CSS через Freemarker.

Ответ 8

Я не уверен в твоей конечной цели. Если разрешить выбор одной из нескольких тем для веб-страницы, вы можете просто иметь несколько файлов CSS, а таблица файлов cookie/сеанс/хранилище данных пользователя предпочитает таблицу стилей. Тогда вы могли бы просто сделать

 <link rel=<? echo stylepref; ?> type='text/css'>

или что-то в этом роде

Если вы хотите полностью настроить сайт, вам понадобится один из вышеуказанных ответов.

Ответ 9

В CSS нет понятия "переменных", но я настоятельно рекомендую не делать то, что вы делаете. нет никакой веской причины, по которой вы не можете определить всю свою информацию о стиле в своем листе CSS как классы CSS. Если вы это сделаете, а затем просто примените указанные классы в html и javascript, это один большой откат с точки зрения копирования и вставки.

Во-вторых, помните, что вы можете определить более одного класса CSS для элемента, например.

<div class='blue-text white-background'>my content</div>

Затем вы можете определить их самостоятельно в CSS, a la:

.blue-text { color : Blue; }
.white-background { background-color: white;}

и вы даже можете создавать правила, которые вступают в силу только тогда, когда оба применяются:

.blue-text.white-background { color : AliceBlue; }

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

Ответ 10

На чистых клиентских сайтах селектор группировки CSS позволяет вам размещать один и тот же цвет на разных элементах:

p, .red, #sub, div a:link { color: #f00; }