【问题标题】:How to style child elements with vanilla extract?如何用香草精为子元素设置样式?
【发布时间】:2022-01-02 05:15:42
【问题描述】:

我开始使用香草提取物来设置 NextJS 应用程序的样式。有没有办法在不创建另一个类的情况下从父元素中设置子元素的样式?

我在 react 组件中有这样的结构:

 <ul className={styles.ul}>
   <li>a</li>
   <li>b</li>
   <li>c</li>
 </ul>

在样式文件中是这样的:

import { style } from "@vanilla-extract/css"

export const ul = style({
    display: vars.display.flex,
    listStyleType: vars.none,
})

【问题讨论】:

  • 你得到答案了吗?

标签: css next.js vanilla-extract


【解决方案1】:

您可以使用&amp; 表示法,并在您的样式中使用nth-child 等css 选择器,如下所示:

编辑:这个 sn-p 代码根本不起作用:(

  export const ul = style({
    display: vars.display.flex,
    listStyleType: vars.none,
    selectors:{
      '& li:nth-child(n)': {
          display: vars.display.flex,
      }
    }
  })

事实上,&amp; 代表了你在 css 中可能知道的风格。 .class-name:nth-child。 & 在本例中表示 class-name

编辑: 正如香草提取物文档所述: 为了提高可维护性,每个样式块只能针对单个元素。为了强制执行这一点,所有选择器都必须以“&”字符为目标,该字符是对当前元素的引用。

例如,'&:hover:not(:active)' 和 [${parentClass} &amp;] 被认为是有效的,而 '& a[href]' 和 [&amp; ${childClass}] 则无效。

如果您想定位另一个作用域类,则应改为在该类的样式块中定义它。

例如,[&amp; ${childClass}] 是无效的,因为它的目标不是“&”,所以它应该在 childClass 的样式块中定义。

如果你想全局定位当前元素中的子节点(例如'&amp; a[href]'),你应该使用 globalStyle。

有用的链接:
https://github.com/seek-oss/vanilla-extract
https://tsh.io/blog/vanilla-extract-library/

【讨论】:

  • 我尝试过使用香草和普通 css ......它只针对
      元素。为了将它与 css 一起使用,它将是 ul li:nth-child(n){...}
  • 是的。我错了。在我编辑时在选择器中尝试。
  • 不,这种方法只针对对
      元素而不是子元素
  • 我误解了你想要的。试试新版本。
  • 我试过了,它抛出了Error: Invalid selector: &amp; li:nth-child(n)screenshot
猜你喜欢
  • 2017-05-24
  • 2019-02-03
  • 2014-05-26
  • 2021-08-03
  • 2021-10-24
  • 2022-10-06
  • 2011-12-28
  • 2014-02-01
相关资源
最近更新 更多