Как повторно использовать содержимое класса CSS в другом классе без копирования?
Можно ли использовать существующий класс css как контент в другом классе?
Я имею в виду что-то вроде:
Contained in some library:
.class1 { text-indent: 100 }
I can not change this:
<span class="class2" />
Определение для класса 2 также содержится в другой библиотеке. Поэтому я не мог изменить его напрямую.
But I want to do something like that in my CSS file:
.class2 { .class1 }
Я знаю, что в этой форме это невозможно. Но, возможно, можно использовать какой-то трюк для достижения поведения без копирования содержимого class1
? Мне нужно это, потому что я хочу переопределить класс с содержимым из другого класса CSS. В нашем проекте также используется JQuery, но я бы сделал это скорее с помощью CSS.
EDIT: я должен объяснить больше, я не мог изменить, как .class1 определен, потому что этот класс находится в библиотеке, и я не мог изменить разметку класса span.
Ответы
Ответ 1
Нельзя делать в стандартном CSS то, что вы комментируете, поскольку нет чистого наследования.
Несмотря на то, что это не относится к вашим ограничениям кода, это более удобный способ сделать это:
.class1, .class2 { text-indent: 100 }
.class2 {
/* Styles you want to have only in class 2 */
}
<span class="class2" />
С другой стороны, как @A. Вольф указал, что вы можете использовать js/jq для добавления класса к определенным элементам: $(function() {$ ('. Class2'). AddClass ('class1')}); Затем просто установите правило CSS для этих элементов.
Если вы не хотите использовать JS, для чего-то подобного вам нужно будет использовать SASS или подобное, которое "компилируется" в CSS.
Ответ 2
Да, это possoble.
Запись:
.class1,.class2 {text-indent:100;}
.class1{color:red;}
.class2{font-size:30px;}
Подробнее здесь.
Ответ 3
CSS не имеет возможности ссылаться на один набор правил из другого.
Ваши варианты включают:
Использование нескольких селекторов для вещей с общими правилами
.menu,
.nav {
font-weight: bold;
}
.nav {
display: inline-block;
}
Использование нескольких классов в одном элементе
.menu {
font-weight: bold;
}
.nav {
display: inline-block;
}
<li class="menu nav">
Создание вашего программного обеспечения программно
Например, SASS
@mixin menu {
font-weight: bold;
}
.nav {
display: inline-block;
@include menu;
}
Ответ 4
Другой вариант - использовать LESS для этого. Это очень хороший инструмент и некоторые улучшения в разработке CSS.
Взгляните на их документацию, это очень приятно. О компиляторах я использую Koala и рекомендую его.
Ответ 5
Лучшим способом было бы сделать receclare class1
чуть ниже ваших пользовательских концов css и переопределить их со значениями, которые вы ищете. Таким образом, унаследованные значения, которые вы не можете изменить + значения, которые необходимо включить, должны применяться.
Ответ 6
Вы упомянули в одном комментарии, что вы не можете использовать МЕНЬШЕ, но я думаю, что, возможно, вы неправильно поняли, как LESS (или другой препроцессор) может вам помочь. То есть вы не дали никаких оснований, чтобы я мог понять, почему вы не можете использовать его (даже в своем обновлении). Насколько я понимаю вашу проблему, у вас есть следующие параметры:
- Невозможно изменить html
- Невозможно изменить файл css, который определяет
.class1
.
- Вы можете изменить файл css, который определяет
.class2
.
Если это правильно, то вот как вы используете LESS (версия 1.5+). Вы создаете файл, определяющий .class2
a .less
файл. Затем, чтобы сохранить его в чистоте, я считаю, что вам нужно будет выполнить двухэтапный процесс (возможно, вы можете сделать шаг 2 без шага 1).
Шаг первый: сделайте CSS более низким
Создайте файл, скажем CSStoLESS.less
и поместите его в него:
@import (less) /path/to/your/your-css-defining-class1.css;
Это будет импортировать css и заставить процессор рассматривать его как код LESS. Возможно, что следующий шаг делает это также, у меня не было возможности проверить это.
Шаг второй: используйте этот файл в качестве ссылки в своем LESS
Выполняя это в файле .less
, определяющем .class2
:
@import (reference) /path/to/your/CSStoLESS.less;
.class2 { .class1; }
Вы импортируете предыдущий файл css, который был преобразован в значение меньше, чем ссылка. Это предотвратит получение дубликатов селекторов для .class1
или всего, что содержится в исходном файле css. Теперь вы можете использовать включение .class1
так же, как вы показываете в своем вопросе, чтобы сделать свойства .class1
похожими на .class2
.
Возможно, это работает только:
@import (reference) /path/to/your/your-css-defining-class1.css;
.class2 { .class1; }
То, что я не знаю, - это если включение (reference)
также по умолчанию делает make .css
в код LESS, например, приведение типа t216 > к типу на этапе 1. Мне нужно исследовать это больше. Если это так, то это одношаговый, а не двухэтапный процесс.
Ответ 7
Таким образом вы можете определить 2 класса
.class1, .class2 { text-indent: 100 }
И это сработает для вас
Кроме того, если вы хотите еще добавить объявление в class2, вы можете определить его
.class2 { /*whatever you want here*/ }
Ответ 8
Я предполагаю, что вы хотите все, что находится в .class1
плюс дополнительные свойства в .class2
Один из способов - просто применить оба класса к нужному элементу.
<span class="class1 class2" />
другой означает назвать оба класса при настройке свойств
.class1, .class2 {text-indent: 100}
.class2{/*extra properties here*/}