Ответ 1
Текущее состояние [обновление в декабре 2015 года]
W3C выпустил черновик о переменных CSS всего через месяц после того, как этот ответ был отредактирован в последний раз. И в этом месяце довел этот проект до рекомендации кандидата. Он останется в обзоре, по крайней мере, до июня 2016 года. Доступен набор тестов.
Итак, в целом, CSS будет иметь переменные, также называемые "custom properties" :
A настраиваемое свойство - это любое свойство, имя которого начинается с двух тире (U + 002D HYPHEN-MINUS), например
--foo
.<custom-property-name>
производство соответствует этому: оно определяется как любой действительный идентификатор, начинающийся с двух тире. Пользовательские свойства предназначены исключительно для авторов и пользователей; CSS никогда не придаст им значения, кроме того, что представлено здесь.Пример 1
Пользовательские свойства определяют переменные, ссылающиеся на нотацию var(), которая может использоваться для многих целей. Например, страница, которая последовательно использует небольшой набор цветов в своем дизайне, может сохранять цвета в пользовательских свойствах и использовать их с переменными:
:root { --main-color: #06c; --accent-color: #006; } /* The rest of the CSS file */ #foo h1 { color: var(--main-color); }
Именование дает мнемонику для цветов, предотвращает непрозрачные опечатки в цветовых кодах, и, если цвета тембров меняются, фокусирует изменение на одном простом месте (значение пользовательского свойства), а не требует много редактирует все таблицы стилей на веб-странице.
В отличие от других свойств CSS, пользовательские имена свойств чувствительны к регистру.
Эта функция реализована только в Firefox и Chrome на данный момент, и она (вероятно) займет довольно много времени, пока она не будет реализована в текущие браузеры.
Старый ответ с 2012 года
Это оригинальный ответ с марта 2012 года. Он предваряет как "официальный" проект W3C, так и экспериментальные реализации браузера.
Почему переменные CSS не используются в CSS 1 или 2?
EDIT: Это уже было допрошено Håkon Wium Lie, отцу CSS (Opera Watchblog (машина Wayback)):
Берни Циммерманн: Håkon, почему CSS не поддерживает константы? Например, возможность присвоить значение RGB константе может упростить управление таблицами стилей. Это был просто недосмотр?
Хакон: Нет, мы думали об этом. Правда, он сохранил бы некоторую типизацию. Однако есть и некоторые недостатки. Во-первых, синтаксис CSS был бы более сложным и более похожим на программирование. Во-вторых, каков будет объем константы? Файл? Документ? Зачем? В конце концов мы решили, что это не стоит.
Так что это не в стандарте, потому что они думали, что это не стоит.
Обходные
Константы или переменные, которые вы определили, являются просто заполнителями. Поскольку такой заполнитель имеет смысл только в том случае, если он используется в той же декларации, он бесполезен, поскольку группировка уже предоставляет этот механизм:
Когда несколько селекторов используют одни и те же объявления, они могут быть сгруппированы в список, разделенный запятыми. CSS2: группировка
Таким образом, вместо того, чтобы использовать цвет в десяти селекторах, часто лучше собирать общие объявления и группировать их. Вместо
.header{
color: red;
}
.section:nth-of-type(2n) > .ridi.culous > .article:hover{
color: red;
}
.footer{
color: blue;
border: 1px solid blue;
}
использовать
/* Color definitions */
.header,
.section:nth-of-type(2n) > .ridi.culous > .article:hover{
color: red;
}
.footer{
color: blue;
}
/* border definitions */
.footer{
border: 1px solid;
}
Также используйте наследование по возможности.
Обратите внимание, что вы можете объявить почти какую-то переменную, если используете абстрактные/простые классы, например
.margin5em{
margin: 5em;
}
.corporateIdentityBackgroundColor{
background-color: #881200;
}
.corporateIdentityBackgroundImage{
background-image: url(we/are/awesome/corporation);
}
.backgroundCenter{
background-position: center center;
}
.backgroundNoRepeat{
background-repeat: no-repeat;
}
Это позволит вам использовать
<div class="corporateIdentityBackgroundImage backgroundCenter backgroundNoRepeat">Ridiculos long class names</div>
<div class="article">
<p class="margin5em">Yesterday I found a new hobby: Creating class names that are longer then most common words.</p>
</div>
См. также: