请看代码。我想有条件地为about链接添加一些额外的样式,因此我将其添加到标签的模板字符串的${}中。这不适用于新样式。
我尝试过连接模板字符串。这也不管用。
我不能在标记中设置样式{style=},因为这样我就不能使用:hover样式。
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)如何应用条件样式?
发布于 2019-02-28 10:18:57
解决方案是只动态更改属性值,而不是在单个条件中添加整个新选择器,您必须为每个属性执行此操作,如下所示:
<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>(我边问边想出了我问题的答案,所以我想我还是把它和我的答案一起发布吧,以防其他人需要)
发布于 2021-03-31 17:17:05
因为样式-jsx在构建时编译样式,所以它不能预处理动态样式,这是文档here中提到的一个限制。
使用
插件可以使用流行的预处理器,如SASS、Less、Stylus、PostCSS,或者在编译时对样式应用自定义转换。
https://stackoverflow.com/questions/54917399
复制相似问题