为啥 className 出现在我的样式规则中?

Posted

技术标签:

【中文标题】为啥 className 出现在我的样式规则中?【英文标题】:Why is className showing up in my style rule?为什么 className 出现在我的样式规则中? 【发布时间】:2019-12-03 23:32:21 【问题描述】:

我正在尝试应用关键帧动画来淡出元素,但是当该类被添加到元素时,它似乎会调整规则本身并将 className 注入规则以引用 fadeOut 关键帧。

      <div
        className=cx(
          [styles['announcement__sliderWrapper__single']]: true,
          [styles['announcement__dismissed']]:
            dismissedItems.includes(annnouncement.id)
        )
      >
@keyframes fadeOut 
  0% 
    opacity: 100%;
  
  99% 
    opacity: 0%;
  
  100% 
    display: none;
  


.announcement__dismissed 
  animation: fadeOut 5s 0 1; /* IE 10+, Fx 29+ */

当类应用于元素时,Chrome 开发工具中会显示以下内容:

.Announcements__announcement__dismissed___2-ucg 
    -webkit-animation: Announcements__fadeOut___u8Ob- 5s 0 1;
    animation: Announcements__fadeOut___u8Ob- 5s 0 1;


【问题讨论】:

你正在使用一个框架/库,我想你没有在标签或描述中列出。也许材料-ui?这不是 React 行为 是的,对不起!从类名中使用 cx。我看看能不能加进去 不,cx 只是类名的实用程序...您确定您不再使用任何东西吗?你的 CSS 是老式的纯 CSS 还是什么? 啊k。我正在使用 sass 【参考方案1】:

由于SASS nesting,类名可能被注入到您的动画名称中,但如果没有更多上下文,我们无法确定。

如果你想让这个动画工作,你应该改变两件事:

    opacity 应该是介于 0 和 1 之间的数字,而不是 0% 和 100%。 您将 iteration count 设置为 0(淡出 5s 0 1),延迟为 1(不指定单位)。您可以通过查看元素的计算属性来检查这一点。 (尝试fadeOut 5s 1s)

【讨论】:

以上是关于为啥 className 出现在我的样式规则中?的主要内容,如果未能解决你的问题,请参考以下文章

根据状态动态更新 className 样式

为啥 Jquery 在我的 html 中添加内联样式?

为啥在我的 VS Code 终端中出现“无法加载 nodemon”?

为啥 React 组件库更喜欢基于 prop 的样式

为啥单击按钮后`JQuery`选项卡会丢失样式

Next.Js 带有样式组件的 React 应用程序。警告:道具 `className` 不匹配。服务器:“x” 客户端:“y”