CSS - это хорошо продуманная парадигма, и многие ее функции используются не очень широко.
Если под условием и переменной вы подразумеваете механизм для распределения изменения некоторого значения по всему документу или в рамках некоторого элемента, то это как это сделать:
var myVar = 4;
document.body.className = (myVar == 5 ? "active" : "normal");
body.active .menuItem {
background-position : 150px 8px;
background-color: black;
}
body.normal .menuItem {
background-position : 4px 8px;
background-color: green;
}
<body>
<div class="menuItem"></div>
</body>
Таким образом, вы распределяете влияние переменной по стилям CSS.
Это похоже на то, что предлагают @amichai и @SeReGa, но более универсально.
Другой такой трюк заключается в распространении идентификатора какого-либо активного элемента по всему документу, например снова при выделении меню: (используется синтаксис Freemarker)
var chosenCategory = 15;
document.body.className = "category" + chosenCategory;
<#list categories as cat >
body.category${cat.id} .menuItem { font-weight: bold; }
</#list>
<body>
<div class="menuItem"></div>
</body>
Конечно, это практично только с ограниченным набором предметов, таких как категории или состояния, а не с неограниченными наборами, такими как товары интернет-магазина, иначе сгенерированный CSS будет слишком большим Но это особенно удобно при создании статических автономных документов.
Еще один трюк для выполнения «условий» с CSS в сочетании с генерирующей платформой заключается в следующем:
.myList {
/* Default list formatting */
}
.myList.count0 {
/* Hide the list when there is no item. */
display: none;
}
.myList.count1 {
/* Special treatment if there is just 1 item */
color: gray;
}
<ul class="myList count${items.size()}">
<!-- Iterate list's items here -->
<li>Something...</div>
</ul>