当前位置: 首页 > 面试题库 >

如何在JS中将JS中的CSS用于嵌套悬停样式,材质UI

毕和志
2023-03-14
问题内容

我正在使用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>

如何在材料ui模式中转换这些CSS样式。我没有看到任何有关如何为元素设置“活动”状态和嵌套悬停样式的示例。与此类高级方案相关的更多文档会有所帮助。

这是我在转换这些内容方面走了多少。

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',
    }
});

如何将其转换为材质样式 .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-html" target="_blank">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



 类似资料:
  • 问题内容: 我想知道是否有可能用JS触发CSS HOVER效果,而不必使用其他类… 我尝试使用触发效果,但这不会触发CSS悬停效果。 PS:我做了一个功能,可以帮助用户使用在线CMS。帮助功能通过在图像上四处移动来显示操作方法,以显示操作方法。虚拟光标可以单击内容,显示元素等。但是我希望该虚拟光标也可以触发CSS中设置的:hover效果。 问题答案: 我知道您要做什么,但为什么不简单地这样做: 该

  • 我非常喜欢React中的内联CSS模式,并决定使用它。 但是,不能使用和类似的选择器。那么,在使用内联CSS样式时,实现悬停高亮显示的最佳方法是什么? #reactjs的一个建议是使用一个可点击的

  • 问题内容: 我有一个嵌套列表: 问题是,悬停“ foo”也会悬停“ fnord”及其所有元素。如何仅将鼠标悬停在上面悬停? 嵌套是可变的,理论上可以是无穷无尽的。 。 问题答案: 我相信使用CSS可以得到的最接近的结果是从悬浮元素的子元素中删除悬浮样式…这对父母没有帮助。 对于您发现的重复项,可接受的答案是用JavaScript做到这一点的最佳方式,方法是:使用CSS级联-hover效。不过,您将

  • 问题内容: 我试图理解reactjs中的一些概念,但是我无法理解函数的嵌套。我创建了以下示例来调查我的担忧。 在下面的示例中,我呈现了一些内容,这些内容的价值来自一系列嵌套函数。但是,出现错误“未捕获的TypeError:无法读取未定义的属性’renderInnerContent’”。您能帮我了解发生了什么以及如何解决此问题吗?我的主要动机是了解如何将事物抽象为不同的功能。 问题答案: 未在该函数

  • 问题内容: 我有两个不同的应用程序。在集成到单个应用程序期间,我不得不 嵌套ng-views。 对于示例(index.html)是 我的应用程序视图之一是(view2.html) 现在,此应用程序内部再次具有不同的视图。 我试过了,但是页面没有加载。有可能嵌套ng-views吗? 如果不可能,可以解释一下 提前致谢 问题答案: 更新的答案: UI路由器(现在位于此处:https : //angul

  • 问题内容: 这应该是一个简单的问题,但是我似乎找不到解决方案。 我有以下标记: 我需要将背景色绑定到示波器,因此我尝试了以下操作: 那没有用,所以我做了一些研究发现,但是那没用,所以我尝试删除动态部分,只是像这样硬编码其中的样式… 甚至都不起作用。我误会如何工作吗?有没有一种方法可以放入普通样式属性并使其插入值? 问题答案: ngStyle 指令允许您动态设置HTML元素上的 CSS 样式。 表示