首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态添加样式到Next.js中的styled-jsx

动态添加样式到Next.js中的styled-jsx
EN

Stack Overflow用户
提问于 2019-02-28 10:18:57
回答 2查看 1.4K关注 0票数 2

请看代码。我想有条件地为about链接添加一些额外的样式,因此我将其添加到标签的模板字符串的${}中。这不适用于新样式。

我尝试过连接模板字符串。这也不管用。

我不能在标记中设置样式{style=},因为这样我就不能使用:hover样式。

代码语言:javascript
复制
import Link from 'next/link'
import { withRouter } from 'next/router'

const Header = ({ children, router, href }) => {
  const isIndex = router.pathname === "/";
  const isAbout = router.pathname === "/about";
  return (
    <div>
        <Link href="/">
          <a id="home">Timers</a>
        </Link>
        <Link href="/about">
          <a id="about">About</a>
        </Link>
        <style jsx>{
          `
            a {
              font-family: 'Montserrat Subrayada', sans-serif;
              color: #ffffff;
              text-decoration: none;
              font-size: 24px;
              padding: 2px;
              margin-right: 30px;
            }
            a:hover {
              color: #000000;
              background-color: #ffffff;
              border-radius: 2px;
            }
            ${isAbout ? `
            #about {
              background-color: red;
              color: #000000;
            }
            #about:hover {
              background-color: blue;
              color: #ffffff;
            }
            ` : ``}

          `
        }</style>
    </div>
)}

export default withRouter(Header)

如何应用条件样式?

EN

回答 2

Stack Overflow用户

发布于 2019-02-28 10:18:57

解决方案是只动态更改属性值,而不是在单个条件中添加整个新选择器,您必须为每个属性执行此操作,如下所示:

代码语言:javascript
复制
<style jsx>{
  `
    a {
      font-family: 'Montserrat Subrayada', sans-serif;
      color: #ffffff;
      text-decoration: none;
      font-size: 24px;
      padding: 2px;
      margin-right: 30px;
      border-radius: 2px;
    }
    a:hover {
      color: #000000;
      background-color: #ffffff;
    }
    #home {
      background-color: ${isHome ? "#ffffff" : ""};
      color: ${isHome ? "#000000" : ""};
    }
    #about {
      background-color: ${isAbout ? "#ffffff" : ""};
      color: ${isAbout ? "#000000" : ""};
    }
  `
}</style>

(我边问边想出了我问题的答案,所以我想我还是把它和我的答案一起发布吧,以防其他人需要)

票数 2
EN

Stack Overflow用户

发布于 2021-03-31 17:17:05

因为样式-jsx在构建时编译样式,所以它不能预处理动态样式,这是文档here中提到的一个限制。

使用

插件可以使用流行的预处理器,如SASS、Less、Stylus、PostCSS,或者在编译时对样式应用自定义转换。

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

https://stackoverflow.com/questions/54917399

复制
相关文章

相似问题

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