Вложенность классов CSS
могу ли я сделать что-то вроде следующего?
.class1{some stuff}
.class2{class1;some more stuff}
8 ответов
невозможно с ванильным CSS. Однако вы можете использовать что-то вроде:
Sass снова делает CSS забавным. Sass является расширение CSS3, добавление вложенных правила, переменные, миксины, селектор наследство и многое другое. Это переведено для хорошо отформатированного стандартного CSS инструмент командной строки или веб-фреймворк плагин.
или
вместо построения длинного селектора имена для указания наследования, в менее вы можете просто вложить селекторы внутри другие селекторы. Эта марка наследование ясно и стилей укорачиваться.
пример:
#header {
color: red;
a {
font-weight: bold;
text-decoration: none;
}
}
Не с чистым CSS. Ближайший эквивалент таков:
.class1, .class2 {
some stuff
}
.class2 {
some more stuff
}
обновление: существует спецификация CSS3 для вложенности уровня 3 CSS. В настоящее время проект. https://tabatkins.github.io/specs/css-nesting/
если одобрено, синтаксис будет выглядеть следующим образом:
table.colortable {
& td {
text-align:center;
&.c { text-transform:uppercase }
&:first-child, &:first-child + td { border:1px solid black }
}
& th {
text-align:center;
background:black;
color:white;
}
}
статус: предложение спек не было одобрено рабочей группой.
не напрямую. Но вы можете использовать расширения, такие как меньше, чтобы помочь вам достичь того же.
нет.
можно использовать группировка селекторов и / или несколько классов на одном элементе, или вы можете использовать язык шаблонов и обрабатывать его с помощью программного обеспечения для написания CSS.
см. Также мою статью о наследование CSS.
попробуйте это...
дайте элементу ID, а также имя класса. Затем вы можете вложить #IDName.className в вашем CSS.
Я не верю, что это возможно. Вы можете добавить class1
ко всем элементам, которые также имеют class2
. Если это не практично делать вручную, вы можете сделать это автоматически с помощью JavaScript (довольно легко сделать с jQuery).
вы можете сделать это с помощью JavaScript:
static generateStyle = (parentSelector, allCss) => {
const reg = /(.+?)\s?\{\s?(.+?)\s?\}+/g;
const matches = allCss.match(reg);
const styles = [];
for (let i = 0; i < matches.length; i++) {
const cssDecleration = matches[ i ];
if (cssDecleration.indexOf('@media') === -1) {
styles.push(`${ parentSelector } ${ cssDecleration }`);
}
else {
const mediaPos = cssDecleration.indexOf('{');
if (mediaPos === -1) {
continue;
}
const mediaQuery = cssDecleration.substring(0, mediaPos);
const rest = cssDecleration.substring(mediaPos);
const restPlaced = MicroServiceData.generateStyle(parentSelector, rest);
styles.push(`${ mediaQuery } ${ restPlaced }`);
}
}
return styles.join('\n');
};