Вложенные эмоции 10 классов для каскада

Ранее в Emotion 9 вы могли использовать имена классов Emotion, чтобы использовать преимущества каскада. Вы должны заключить эмоцию в фигурные скобки и поставить перед ней точку, а затем знак доллара. Например, вы можете сделать это:

const child = css`
  color: green;
`;
const parent = css`
  color: red;
  .${child} {
    color: yellow;
  }
`;

<div className={parent}>I am red</div>
<div className={child}>I am green</div>
<div className={parent}>
  <div className={child}>I am yellow</div>
</div>

Как я могу добиться такого поведения в Emotion 10? Это мой вопрос.

Ниже приведена дополнительная информация о том, что происходит, если вы не используете знак доллара.


Теперь следующее было и желательно: если в Emotion 9 или 10 не используются точки, родительский const будет наследовать вложенные стили const. И, кроме того, если этот вложенный const имеет переопределенные стили, он в конечном итоге будет унаследован родителем.

const child = css`
  color: green;
`;
const parent = css`
  color: red;
`;
<div className={parent}>I am red</div>
<div className={child}>I am green</div>

const child = css`
  color: green;
`;
const parent = css`
  ${child}
`;
<div className={parent}>I am green</div>

const child = css`
  color: green;
`;
const parent = css`
  ${child} {
    color: yellow;
  }
`;
<div className={parent}>I am yellow</div>

const child = css`
  color: green;
`;
const parent = css`
  color: red;
  ${child}
`;
<div className={parent}>I am green</div>

const child = css`
  color: green;
`;
const parent = css`
  color: red;
  ${child} {
    color: yellow;
  }
`;
<div className={parent}>I am yellow</div>

1 ответ

Решение

Следующее будет работать, оно просто не работает в CodePen, так как выходной код содержит больше текста и снова хэширует имена констант. Но если вы тестируете в своей собственной кодовой базе, это работает. Мне не нравится делать это, входить в объект, чтобы получить имя, это кажется хакерским. Хотелось бы, чтобы у Emotion было что-то конкретное для этих случаев.

const cat = css`
  color: red;
`;
const dog = css`
  color: green;
  .css-${cat.name} {
    border-bottom: 1px solid currentColor;
  }
`;
Другие вопросы по тегам