是否可以在 css-in-js 中测试自定义数据属性?
Is it possible to test for custom data-attributes in css-in-js?
我正在尝试从 JSS 引用数据属性,对其进行测试,如果测试为真,则应用样式。但是,当我 运行 下面的代码时,它不适用 "color:green" 我不知道为什么!
import React from "react";
import { createUseStyles } from "react-jss";
const useStyles = createUseStyles({
statusDiv: {
backgroundColor: "lightGrey",
padding: "10px",
fontWeight: "bold",
'[data-status="OPEN"]': {
// no effect ..?
color: "green",
},
},
});
const App = () => {
const classes = useStyles();
return (
<div data-status="OPEN" className={classes.statusDiv}>
OPEN
</div>
);
};
export default App;
如果你的 JS 是这样的:
<div data-customAttribute={value} className={classes.testClass}></div>
您的 CSS 将如下所示:
.testClass[data-customAttribute="value"] {
// your styles
}
这是一个有趣的案例。
你可以做的是:
export default {
'@global' : {
'div.testClass[data-custom="value"]': {
color: 'red',
border: '1px, solid navy'
}
}
}
这假设安装了 JSS 插件@global,但我认为拥有它非常有用。
关于插件的更多信息 @global - here
如果你想像编辑示例 0 中那样处理 data- 属性,你应该这样做:
testClass: {
'[data-custom="value"]': {
//styles for the custom data
}
}
在标记中你将拥有(取决于你提取 class 的方式):
testClass.classes['[data-custom="value"]']
...自定义数据的样式将由上述应用。
您在上次编辑中的写作方式将行不通。不过你应该加一点。要运行您提供的代码示例:
...
fontWeight: "bold",
'& [data-status="OPEN"]': {
// no effect ..?
color: "green",
},
& 需要嵌套插件设置 - here 更详细。
感谢@Vladyn 的大力支持,下面的代码演示了这个完美的工作:D
import React from "react";
import { create } from "jss";
import { JssProvider, createUseStyles } from "react-jss";
import nested from "jss-plugin-nested";
const jss = create();
jss.use(nested());
const useStyles = createUseStyles({
statusDiv: {
backgroundColor: "lightGrey",
padding: "10px",
fontWeight: "bold",
'&[data-status="OPEN"]': {
color: "green",
},
'&[data-status="CLOSED"]': {
color: "red",
},
},
});
const App = () => {
const classes = useStyles();
const status = "OPEN";
return (
<JssProvider jss={jss}>
<div data-status={status} className={classes.statusDiv}>
{status}
</div>
</JssProvider>
);
};
export default App;
我正在尝试从 JSS 引用数据属性,对其进行测试,如果测试为真,则应用样式。但是,当我 运行 下面的代码时,它不适用 "color:green" 我不知道为什么!
import React from "react";
import { createUseStyles } from "react-jss";
const useStyles = createUseStyles({
statusDiv: {
backgroundColor: "lightGrey",
padding: "10px",
fontWeight: "bold",
'[data-status="OPEN"]': {
// no effect ..?
color: "green",
},
},
});
const App = () => {
const classes = useStyles();
return (
<div data-status="OPEN" className={classes.statusDiv}>
OPEN
</div>
);
};
export default App;
如果你的 JS 是这样的:
<div data-customAttribute={value} className={classes.testClass}></div>
您的 CSS 将如下所示:
.testClass[data-customAttribute="value"] {
// your styles
}
这是一个有趣的案例。 你可以做的是:
export default {
'@global' : {
'div.testClass[data-custom="value"]': {
color: 'red',
border: '1px, solid navy'
}
}
}
这假设安装了 JSS 插件@global,但我认为拥有它非常有用。 关于插件的更多信息 @global - here
如果你想像编辑示例 0 中那样处理 data- 属性,你应该这样做:
testClass: {
'[data-custom="value"]': {
//styles for the custom data
}
}
在标记中你将拥有(取决于你提取 class 的方式):
testClass.classes['[data-custom="value"]']
...自定义数据的样式将由上述应用。
您在上次编辑中的写作方式将行不通。不过你应该加一点。要运行您提供的代码示例:
...
fontWeight: "bold",
'& [data-status="OPEN"]': {
// no effect ..?
color: "green",
},
& 需要嵌套插件设置 - here 更详细。
感谢@Vladyn 的大力支持,下面的代码演示了这个完美的工作:D
import React from "react";
import { create } from "jss";
import { JssProvider, createUseStyles } from "react-jss";
import nested from "jss-plugin-nested";
const jss = create();
jss.use(nested());
const useStyles = createUseStyles({
statusDiv: {
backgroundColor: "lightGrey",
padding: "10px",
fontWeight: "bold",
'&[data-status="OPEN"]': {
color: "green",
},
'&[data-status="CLOSED"]': {
color: "red",
},
},
});
const App = () => {
const classes = useStyles();
const status = "OPEN";
return (
<JssProvider jss={jss}>
<div data-status={status} className={classes.statusDiv}>
{status}
</div>
</JssProvider>
);
};
export default App;