如何在 JS 中使用 css 来实现嵌套悬停样式,Material UI
how to use css in JS for nested hover styles, Material UI
我正在使用 Material UI 并尝试将普通 css 类 转换为 js 文件。
.nav {
list-style-type: none;
margin: 0;
padding: 0;
overflow: hidden;
}
.navItem {
float: left;
flex: 1;
}
.navLink {
color: white;
text-decoration: none;
display: block;
font-size: '1 rem';
font-weight: 500;
line-height: 1.6;
letter-spacing: '0.0075em';
opacity: 1;
text-transform: 'none';
min-width: 0;
padding: 10px;
margin-left: 10px;
margin-right: 10px;
}
.navLink-static {
color: white;
text-decoration: none;
display: block;
font-size: '1rem';
font-weight: 500;
line-height: 1.6;
letter-spacing: '0.0075em';
opacity: 1;
text-transform: 'none';
padding: 10px;
margin-left: 10px;
margin-right: 10px;
}
.navLink:hover {
border-bottom: 2px solid mediumvioletred;
background: #8DB8DD;
cursor: pointer;
}
.navLink:hover > div:hover {
border-bottom: none;
}
.navLink.active {
font-weight: 600;
border-radius: 0;
border-color: transparent;
border-bottom: 3px solid orange;
padding-bottom: 10px;
}
<ul className={classes.nav}>
<li className={classes.navItem}>
<NavLink className={classes.navLink} to="/" exact>
abc
</NavLink>
</li>
<li className={classes.navItem}>
<NavLink className={classes.navLink} to="/def" exact>
def
</NavLink>
</li>
<li className={classes.navItem}>
<NavLink className={classes.navLink} to="/ghi">
ghi
</NavLink>
</li>
</ul>
如何将这些 css 样式转换为 material ui 模式。我没有看到任何关于如何为元素设置 'active' 状态和嵌套悬停样式的示例。更多与此类高级场景相关的文档会有所帮助。
以下是我在转换这些文件方面取得的进步..
const styles = theme => ({
nav: {
listStyleType: 'none',
margin: 0,
padding: 0,
overflow: 'hidden'
},
navItem: {
float: 'left',
flex: 1
},
navLink: {
color: 'white',
textDecoration: 'none',
display: 'block',
fontSize: '1rem',
fontWeight: 500,
lineHeight: 1.6,
letterSpacing: '0.0075em',
opacity: 1,
textTransform: 'none',
minWidth: 0,
padding: '10px',
marginLeft: '10px',
marginRight: '10px',
'&:hover': {
borderBottom: '2px solid mediumvioletred',
background: '#8DB8DD',
cursor: 'pointer',
// '& div': {
// '&:hover': {
// borderBottom: 'none',
// }
// },
'&> div &:hover': {
borderBottom: 'none',
}
},
// 'div:hover': {
// borderBottom: 'none',
// },
},
navLinkStatic: {
color: 'white',
textDecoration: 'none',
display: 'block',
fontSize: '1rem',
fontWeight: 500,
lineHeight: 1.6,
letterSpacing: '0.0075em',
opacity: 1,
textTransform: 'none',
padding: '10px',
marginLeft: '10px',
marginRight: '10px',
}
});
如何将其转换为 material 样式
.navLink:hover > div:hover {
我尝试过的东西。
navLink: {
'&:hover': {
borderBottom: '2px solid mediumvioletred',
background: '#8DB8DD',
cursor: 'pointer',
// '& div': {
// '&:hover': {
// borderBottom: 'none',
// }
// },
// '&> div &:hover': {
// borderBottom: 'none',
// }
},
'&:hover > div:hover': {
borderBottom: 'none'
}
},
感谢任何帮助。
正确的语法是"&:hover > div:hover": { ... }
。
这是一个演示语法的工作示例:
import React from "react";
import ReactDOM from "react-dom";
import { makeStyles } from "@material-ui/core/styles";
const useStyles = makeStyles({
navlink: {
border: "1px solid green",
fontSize: "16pt",
"&:hover": {
backgroundColor: "lightgreen"
},
"&:hover > div:hover": {
backgroundColor: "lightblue"
}
}
});
function App() {
const classes = useStyles();
return (
<div className="App">
<div className={classes.navlink}>
Hello <div>CodeSandbox</div>
</div>
</div>
);
}
const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);
它也可以用这种语法进行深度嵌套:
const useStyles = makeStyles({
navlink: {
border: "1px solid green",
fontSize: "16pt",
"&:hover": {
backgroundColor: "lightgreen",
"& > div:hover": {
backgroundColor: "lightblue"
}
}
}
});
这里是相关的 JSS 文档:https://cssinjs.org/jss-plugin-nested/?v=v10.0.0-alpha.24
相关回答:
我正在使用 Material UI 并尝试将普通 css 类 转换为 js 文件。
.nav {
list-style-type: none;
margin: 0;
padding: 0;
overflow: hidden;
}
.navItem {
float: left;
flex: 1;
}
.navLink {
color: white;
text-decoration: none;
display: block;
font-size: '1 rem';
font-weight: 500;
line-height: 1.6;
letter-spacing: '0.0075em';
opacity: 1;
text-transform: 'none';
min-width: 0;
padding: 10px;
margin-left: 10px;
margin-right: 10px;
}
.navLink-static {
color: white;
text-decoration: none;
display: block;
font-size: '1rem';
font-weight: 500;
line-height: 1.6;
letter-spacing: '0.0075em';
opacity: 1;
text-transform: 'none';
padding: 10px;
margin-left: 10px;
margin-right: 10px;
}
.navLink:hover {
border-bottom: 2px solid mediumvioletred;
background: #8DB8DD;
cursor: pointer;
}
.navLink:hover > div:hover {
border-bottom: none;
}
.navLink.active {
font-weight: 600;
border-radius: 0;
border-color: transparent;
border-bottom: 3px solid orange;
padding-bottom: 10px;
}
<ul className={classes.nav}>
<li className={classes.navItem}>
<NavLink className={classes.navLink} to="/" exact>
abc
</NavLink>
</li>
<li className={classes.navItem}>
<NavLink className={classes.navLink} to="/def" exact>
def
</NavLink>
</li>
<li className={classes.navItem}>
<NavLink className={classes.navLink} to="/ghi">
ghi
</NavLink>
</li>
</ul>
如何将这些 css 样式转换为 material ui 模式。我没有看到任何关于如何为元素设置 'active' 状态和嵌套悬停样式的示例。更多与此类高级场景相关的文档会有所帮助。
以下是我在转换这些文件方面取得的进步..
const styles = theme => ({
nav: {
listStyleType: 'none',
margin: 0,
padding: 0,
overflow: 'hidden'
},
navItem: {
float: 'left',
flex: 1
},
navLink: {
color: 'white',
textDecoration: 'none',
display: 'block',
fontSize: '1rem',
fontWeight: 500,
lineHeight: 1.6,
letterSpacing: '0.0075em',
opacity: 1,
textTransform: 'none',
minWidth: 0,
padding: '10px',
marginLeft: '10px',
marginRight: '10px',
'&:hover': {
borderBottom: '2px solid mediumvioletred',
background: '#8DB8DD',
cursor: 'pointer',
// '& div': {
// '&:hover': {
// borderBottom: 'none',
// }
// },
'&> div &:hover': {
borderBottom: 'none',
}
},
// 'div:hover': {
// borderBottom: 'none',
// },
},
navLinkStatic: {
color: 'white',
textDecoration: 'none',
display: 'block',
fontSize: '1rem',
fontWeight: 500,
lineHeight: 1.6,
letterSpacing: '0.0075em',
opacity: 1,
textTransform: 'none',
padding: '10px',
marginLeft: '10px',
marginRight: '10px',
}
});
如何将其转换为 material 样式 .navLink:hover > div:hover {
我尝试过的东西。
navLink: {
'&:hover': {
borderBottom: '2px solid mediumvioletred',
background: '#8DB8DD',
cursor: 'pointer',
// '& div': {
// '&:hover': {
// borderBottom: 'none',
// }
// },
// '&> div &:hover': {
// borderBottom: 'none',
// }
},
'&:hover > div:hover': {
borderBottom: 'none'
}
},
感谢任何帮助。
正确的语法是"&:hover > div:hover": { ... }
。
这是一个演示语法的工作示例:
import React from "react";
import ReactDOM from "react-dom";
import { makeStyles } from "@material-ui/core/styles";
const useStyles = makeStyles({
navlink: {
border: "1px solid green",
fontSize: "16pt",
"&:hover": {
backgroundColor: "lightgreen"
},
"&:hover > div:hover": {
backgroundColor: "lightblue"
}
}
});
function App() {
const classes = useStyles();
return (
<div className="App">
<div className={classes.navlink}>
Hello <div>CodeSandbox</div>
</div>
</div>
);
}
const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);
它也可以用这种语法进行深度嵌套:
const useStyles = makeStyles({
navlink: {
border: "1px solid green",
fontSize: "16pt",
"&:hover": {
backgroundColor: "lightgreen",
"& > div:hover": {
backgroundColor: "lightblue"
}
}
}
});
这里是相关的 JSS 文档:https://cssinjs.org/jss-plugin-nested/?v=v10.0.0-alpha.24
相关回答: