如何使用 next.js 中的 npm 类名库来选择性地应用 css 文件中的样式?
How do I use the npm classnames library in next.js to optionally apply styles from a css file?
在下面的 html 中,我有选择地应用 bootstrap 类、alert-danger 或 alert-primary,具体取决于 message.error 或 message.info .目标 类 是 bootstrap 类 并且它按预期工作。
<div
className={classnames(`alert, ${styles.alertDiv}`, {
"alert-danger": message.error,
"alert-primary": message.info,
})}
>
现在,代替警报危险,我想应用 css 文件中的样式,$(styles.activeDiv) 如果 message.error 为真。换句话说,我想用 $(styles.activeDiv) 替换 alert-danger。我该怎么做。
在 Next.js 和 Bootstrap 中,您可以覆盖默认 CSS 样式或编写特定的组件级别样式 Next.js Built-in CSS Support。有很多方法可以实现这一点,您可以将样式对象作为内联样式属性传入。我认为一个简单的方法就是 useState
挂钩。这个在两个不同的 CSS 类 之间切换,但您可以根据自己的需要进行更改:
在此示例中,当您单击 div
时,类名会发生变化
codesandbox example of Dynamic ClassName
import { useState } from "react";
export default function IndexPage() {
const [dynamicClassName, setDynamicClassName] = useState("info");
const handleClassChange = () => {
console.log("changing div class name");
dynamicClassName === "info"
? setDynamicClassName("alert")
: setDynamicClassName("info");
};
return (
<>
<div className={dynamicClassName} onClick={handleClassChange}>
This div has a dynamic CSS class based on click
</div>
<style jsx>
{`
.alert {
color: red;
border: 5px solid red;
}
.info {
color: green;
border: 5px solid green;
}
`}
</style>
</>
);
}
注意:针对更具体的工作示例进行了编辑
在下面的 html 中,我有选择地应用 bootstrap 类、alert-danger 或 alert-primary,具体取决于 message.error 或 message.info .目标 类 是 bootstrap 类 并且它按预期工作。
<div
className={classnames(`alert, ${styles.alertDiv}`, {
"alert-danger": message.error,
"alert-primary": message.info,
})}
>
现在,代替警报危险,我想应用 css 文件中的样式,$(styles.activeDiv) 如果 message.error 为真。换句话说,我想用 $(styles.activeDiv) 替换 alert-danger。我该怎么做。
在 Next.js 和 Bootstrap 中,您可以覆盖默认 CSS 样式或编写特定的组件级别样式 Next.js Built-in CSS Support。有很多方法可以实现这一点,您可以将样式对象作为内联样式属性传入。我认为一个简单的方法就是 useState
挂钩。这个在两个不同的 CSS 类 之间切换,但您可以根据自己的需要进行更改:
在此示例中,当您单击 div
时,类名会发生变化codesandbox example of Dynamic ClassName
import { useState } from "react";
export default function IndexPage() {
const [dynamicClassName, setDynamicClassName] = useState("info");
const handleClassChange = () => {
console.log("changing div class name");
dynamicClassName === "info"
? setDynamicClassName("alert")
: setDynamicClassName("info");
};
return (
<>
<div className={dynamicClassName} onClick={handleClassChange}>
This div has a dynamic CSS class based on click
</div>
<style jsx>
{`
.alert {
color: red;
border: 5px solid red;
}
.info {
color: green;
border: 5px solid green;
}
`}
</style>
</>
);
}
注意:针对更具体的工作示例进行了编辑