Есть ли способ определить стили для комбинации классов? Например, я бы хотел, чтобы мой HTML выглядел так, но вывод отображался в соответствующем цвете:
<span class = "red">Red Text</span><br/>
<span class = "green">Green Text</span><br/>
<span class = "red green">Yellow Text</span><br/>
Редактировать: Вышеупомянутое, кажется, сбивает людей с толку, когда это был просто пример; так вот еще один пример:
<style>
.style1 { background-color: #fff; }
.style2 { background-color: #eee; }
.style1.highlight { color: red; }
.style2.highlight { color: blue; }
</style>
<ul>
<li class = "action style1">Do Action 1</li>
<li class = "action style2">Do Action 2</li>
<li class = "action style1 highlight">Do Action 1</li>
<li class = "action style2 highlight">Do Action 2</li>
</ul>
<script language = "javascript" type = "text/javascript">
$("li.action").bind("click", function(e) {
e.preventDefault();
// Do some stuff
$(this).addClass("highlight");
$(this).unbind("click");
});
</script>
Опять же, это просто пример, так что не зацикливайтесь на чередующихся элементах или на чем-то подобном. Чего я пытаюсь избежать, так это необходимости дублировать функцию привязки для каждого другого styleN или писать структуру elseif, которая проверяет каждый класс styleN. К сожалению, этот код не работает в IE 6 или 7 - выделенный текст для элементов .style1 и .style2 оказывается синим.






Вы можете выбрать несколько классов:
span.red.green { color: yellow; }
Это применимо к любому элементу span с красным и зеленым классами. Возможно, это не то, что вам нужно, поскольку это также применимо, например, к:
<span class = "red green blue">white</span>
Обратите внимание, что в IE 6 это не работает.
IE решает это как ИЛИ, а не И - то есть он будет соответствовать любому элементу с «зеленым» классом. Вы можете обойти это с помощью правильного дизайна, но не всегда. Если бы вы могли поставить нам конкретную цель, мы могли бы ее решить.
может что-то вроде этого
.red
{
color: red;
}
.red_green
{
color: #AS8324;
}
и вы можете использовать свой html-код
<span class = "red">Red Text</span><br/>
<span class = "green">Green Text</span><br/>
<span class = "red_green">Yellow Text</span><br/>
Я не знаю, что именно вы хотите, но это мой подход. Я надеюсь, что это помогает.
Конечно.
.red { color: red; }
.green { color: green; }
.red.green { color: yellow; }
Вы можете сделать это с помощью Javascript, хотя мне было бы лучше просто создать желтый класс, если вас интересует метод javascript, прокомментируйте (мне нужно подумать об этом, и было бы более эффективно просто сделать это в своем логический слой)
РЕДАКТИРОВАТЬ | Еще больше редактирования (добавлено регулярное выражение для текущих цветов)
Хорошо, вам это не интересно, но я все равно напишу это, потому что это кажется забавным:
var re = /([0-9]?)/g;
$("span").each( function(){
$this = $(this);
results = re.exec( $this.css('background-color')); // background is something like: 'rgb( 0, 132, 12)'
var sRed = results[1];
var sGreen = results[2];
var sBlue = results[3];
/* OLD!
var sRed = '0';
var sGreen = '0';
var sBlue = '0';*/
if ($this.hasClass('red')) { sRed = '255'; }
if ($this.hasClass('green')) { sGreen = '255'; }
if ($this.hasClass('blue')) { sBlue = '255'; }
$this.css('background-color', 'rgb(' + sRed + ',' + sGreen + ',' + sBlue ')';
});
Для этого вам понадобится jQuery, хотя вы, вероятно, могли бы сделать это без jQuery.
Очень хорошо! К сожалению, я не собираюсь ничего делать с цветом; это был просто пример, который я использовал.
Ах, ладно, неважно, писать об этом было весело, когда-нибудь это может пригодиться.
почему ты хочешь сделать это? это возможно, но я не вижу пользы. Вы бы также определили class = "short fat" и class = "high thin" или как насчет class = "light dark"? Классы должны быть простыми и конкретными для ясности и повторного использования. Следует избегать множественного наследования (фальшивого или иного), когда оно не нужно и может сбивать с толку.
class = "red green"
сбивает с толку
class = "yellow"
кратко и ясно
Обновлено: я видел второй пример, мой совет остается неизменным. Один класс краткий и ясный, два потенциально сбивают с толку. Предполагая, что это должно работать (а я думаю, что это так), прилагать большие усилия для борьбы с ошибками в самом популярном браузере (IE), вероятно, не стоит.
Извините, мне не следовало использовать два противоречащих друг другу класса, как в моем первом примере. Пожалуйста, посмотрите мой второй пример.
@Soldarnal: если комбинации не работают в IE, сколько усилий вы готовы потратить на борьбу с ошибками в самом популярном браузере? Особенно, когда альтернатива - сделать другой класс - настолько проста ...?
Вот мой обходной путь:
<style>
.style1 { background-color: #fff; }
.style2 { background-color: #eee; }
.style1 .highlight { color: red; }
.style2 .highlight { color: blue; }
</style>
<ul>
<li class = "action style1"><span>Do Action 1</span></li>
<li class = "action style2"><span>Do Action 2</span></li>
<li class = "action style1"><span class = "highlight">Do Action 1</span></li>
<li class = "action style2"><span class = "highlight">Do Action 2</span></li>
</ul>
<script language = "javascript" type = "text/javascript">
$("li.action").bind("click", function(e) {
e.preventDefault();
// Do some stuff
$(this).children("span").addClass("highlight");
$(this).unbind("click");
});
</script>
Это не так элегантно, как я надеялся. Он использует дополнительный элемент для каждого элемента; но, по крайней мере, он все еще довольно чистый.
Хм ... похоже, не работает и в IE7 (зеленый цвет - желтый), что является своего рода нарушением сделки.