Подтвердить что ты не робот

Вложенные классы CSS

Можно ли сделать что-то вроде следующего?

.class1{some stuff}

.class2{class1;some more stuff}
4b9b3361

Ответ 1

Невозможно использовать ванильный CSS. Однако вы можете использовать что-то вроде:

Сасс снова добавляет CSS. Сасс - это расширение CSS3, добавление вложенных правила, переменные, mixins, селектор наследование и многое другое. Его перевод для хорошо отформатированного стандартного CSS с использованием инструмент командной строки или плагин web-framework.

или

Вместо того, чтобы строить длинный селектор имена для указания наследования, в Less вы можете просто вставить селектор внутри другие селекторы. Это делает наследование прозрачное и таблицы стилей короче.

Пример:

#header {
  color: red;
  a {
    font-weight: bold;
    text-decoration: none;
  }
}

Ответ 2

Не с чистым CSS. Ближайшим эквивалентом является следующее:

.class1, .class2 {
    some stuff
}

.class2 {
    some more stuff
}

Ответ 3

Обновление 1: существует спецификация CSS3 для вложенности уровня 3. Это в настоящее время проект. https://tabatkins.github.io/specs/css-nesting/

Обновление 2 (2019): теперь у нас есть черновик CSSWG https://drafts.csswg.org/css-nesting-1/

В случае одобрения синтаксис будет выглядеть так:

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;
  }
}

.foo {
  color: red;
  @nest & > .bar {
    color: blue;
  }
}

.foo {
  color: red;
  @nest .parent & {
    color: blue;
  }
}

Статус: оригинальная заявка на 2015 год не была утверждена Рабочей группой.

Ответ 4

Не напрямую. Но вы можете использовать расширения, такие как LESS, чтобы помочь вам достичь того же.

Ответ 5

Нет.

Вы можете использовать селектор группировки и/или несколько классов для одного элемента, или вы можете использовать язык шаблона и обрабатывать его с помощью программного обеспечения, чтобы напишите свой CSS.

См. также мою статью о Наследование CSS.

Ответ 6

Попробуйте это...

Дайте элементу идентификатор, а также имя класса. Затем вы можете вставить # IDName.className в свой CSS.

Здесь лучшее объяснение https://css-tricks.com/multiple-class-id-selectors/

Ответ 7

Вы можете сделать это с помощью 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');
};

Ответ 8

Я не считаю, что это возможно. Вы можете добавить class1 ко всем элементам, которые также имеют class2. Если это нецелесообразно делать вручную, вы можете сделать это автоматически с помощью JavaScript (довольно легко сделать с jQuery).