【问题标题】:Nesting Emotion 10 classes for cascade嵌套 Emotion 10 类级联
【发布时间】:2019-02-13 01:21:08
【问题描述】:

以前在 Emotion 9 中,您可以使用 Emotion 类名称来利用级联。您可以将情感 const 包裹在大括号中,并在其前面加上句点,然后是美元符号。例如,您可以这样做:

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>

【问题讨论】:

    标签: reactjs emotion


    【解决方案1】:

    以下将起作用,它只是在 CodePen 中不起作用,因为输出代码上附加了更多文本,并且它再次对 const 名称进行哈希处理。但是,如果您在自己的代码库中进行测试,这确实有效。我不喜欢这样做,踏入对象中获取名称,感觉很hacky。希望 Emotion 有针对这些实例的特定内容。

    const cat = css`
      color: red;
    `;
    const dog = css`
      color: green;
      .css-${cat.name} {
        border-bottom: 1px solid currentColor;
      }
    `;
    

    【讨论】:

    • 这并不完全安全,请注意。如果您正在渲染子组件,它们将不会总是获得相同的散列类名称。此外,似乎 Emotion 会将子组件名称附加到散列类名称的末尾,以避免我假设的冲突。所以,谨慎行事。我真正想要的是让 Emotion 返回它在 V.9 中的功能——一个例子可以在他们的 V9 文档中找到,这个页面上的最后一个例子:5bb1495273f2cf57a2cf39cc--emotion.netlify.com/docs/nested
    • 这在 Emotion 11 中不起作用(仅在本地)。
    • @BMCwebdev 我在 github 问题上看到了你的帖子。你找到解决办法了吗?
    • @jwkoo 不,我现在只是不以这种方式编写带有 Emotion 的 CSS。我能理解他们为什么远离它。如果您发布回复或什至打开问题并联系我,我可以给您一些建议以实现您想要完成的目标。干杯。
    • @BMCwebdev 哦,谢谢你的分享!那么请问您使用的是什么替代方案?
    猜你喜欢
    • 2011-10-07
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多