首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编写样式-不带选择器的jsx

编写样式-不带选择器的jsx
EN

Stack Overflow用户
提问于 2019-05-07 00:11:05
回答 1查看 238关注 0票数 2

在不使用选择器(button {})指定/包装的情况下,以下styled-jsx样式声明将起作用。按钮的样式很合适,这很棒。然而,像这样的用法在网站上没有记录,所以我想知道这种语法是否得到了官方的支持,并且可以安全地使用?

代码语言:javascript
复制
<button>
  <style jsx>{`
    background-color: red;

    :hover {
       background-color: #ccc;
    }
  `}
  </style>
Test
</button>

另一个例子,使用resolve标签也是有效的:

代码语言:javascript
复制
const { className, styles } = css.resolve`
  font-weight: bold;
`;
EN

回答 1

Stack Overflow用户

发布于 2019-05-07 03:38:16

styled-jsx在幕后使用stylis css preprocessor。下面是styled-jsx转换style标签内容的方式:

代码语言:javascript
复制
    transformedCss = transform(
      isGlobal ? '' : getPrefix(dynamic, staticClassName),
      plugins(css, pluginsOptions),
      { splitRules, vendorPrefixes }
    )

请注意,这里的transform是一个围绕stylis的包装函数。

因此,在<style jsx>标记中声明的样式将使用动态生成的类进行包装,然后使用stylis进行转换。在您的示例中,styled-jsx将生成以下css:

如果您使用global选择器,则不会向生成的代码中添加任何类选择器,因此生成的css将不会应用于页面上的任何元素。

在我看来,在没有选择器的情况下使用样式是没有错的,但是,您应该小心地使用<style jsx>标记,因为在这种情况下,样式将应用于组件中的每个元素。

css.resolve中使用此功能看起来更加安全,因为您可以手动选择要应用css的元素。

据我所知,官方文件没有对如此重要的细节进行解释。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56008859

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档