如何做CSS:JSX中的悬停功能?

13 jsx reactjs

嗨,谢谢你们在这里的出色工作.我正在使用react.js为我的项目构建我的组件,我觉得现在我的项目有点困难.我试图设置一个具有悬停功能的按钮,我不知道如何应用它来做出反应.

这是代码:

let button = {
    backgroundColor: colorPalette.white,
    border: "1px solid rgb(12,106,145)",
    color: colorPalette.brandCol1,
    textAlign: 'center',
    textDecoration: 'none',
    fontSize : 'inherit',
    fontWeight : 600,
    padding : "5px 8px 5px 8px"
}
Run Code Online (Sandbox Code Playgroud)

我想像在css中一样添加悬停样式

button:hover {
style here.......
}
Run Code Online (Sandbox Code Playgroud)

什么是正确的语法?

小智 15

您可以使用:

    const styles = {
    myStyleClassName: {
            padding: '16px 0px 16px 0px',
            '& a': {
                textDecoration: 'none',
                color: '#0000ee',
            },
            '& a:hover': {
            textDecoration: 'underline',
        },
    },
    myButtonClass: {
        '&:hover': {
             textDecoration: 'underline',
        },       
    },
};
Run Code Online (Sandbox Code Playgroud)

....

render() {
    <span className={myStyleClassName}><a tag><button><someDomObjct></span>
    <button className={myButtonClass}>my label</button>
}
Run Code Online (Sandbox Code Playgroud)

请参阅:http : //cssinjs.org/jss-nested/ ?v=v6.0.1回购不是所有事情都必需的,上述内容应该可以立即使用。

  • 我不明白如果没有 jss 这是如何工作的。我收到“对象无法分配给类型”字符串”。 (3认同)
  • 这将如何运作?首先,它应该是“&lt;span className={styles.myStyleClassName}...”吗?而且,这真的是应该设置的 _className_ 吗?它不应该是 _style_ 属性吗? (2认同)

Tyl*_*ian 8

您可以onMouseEnter onMouseLeave用来调整组件的状态

<button
  onMouseEnter={() => setButtonHovered(true)} 
  onMouseLeave={() => setButtonHovered(false)}
  className={buttonIsHovered ? 'hover' : null}
/>
Run Code Online (Sandbox Code Playgroud)

看到这里了解更多信息

还是只是css上课?

import './style.css'

<button className="Button"/>

.Button:hover {
  ...
}
Run Code Online (Sandbox Code Playgroud)

  • 您可能需要添加更多内容来为初学者提供有关如何实现上述内容的指导。例如,定义“setButtonHovered(bool)”以及如何/在何处放置“hover”类定义的 CSS (2认同)

Joh*_*ohn 5

使用 react 来管理悬停动画的状态是一种矫枉过正的方式。您不需要使用 javascript 来实现简单的 CSS 悬停……您在浏览器中,使用正确的工具完成正确的工作,对吧?

所以在这里我将展示几种不同的方法来实现同一目标:

在我的组件中,我导入了 glamor 和我的样式文件:

import { style } from 'glamor';
import styles from '../styles';
Run Code Online (Sandbox Code Playgroud)

在我的样式文件中,我有这样的东西:

import { style } from 'glamor';

const styles = {
redHoverbutton: style({
  backgroundColor: "#aaaaaa",
  fontSize: "1.1rem",
  transition: "all ease .5s",
  ":hover": {
    backgroundColor: "#ff0000",
    color: "#ffffff"
  }
})
};

export default styles;
Run Code Online (Sandbox Code Playgroud)

这使得悬停功能通过 css 工作,如下所示:

<div {...styles.redHoverbutton}></div>
Run Code Online (Sandbox Code Playgroud)

这是一个 css 驱动的悬停效果(如果你注意到了,还有过渡),但这不是内联 css。尽管如此,您的样式可以在同一个文件中制作,如下所示:

let theStyle = style({ backgroundColor: "#aaaaaa",transition: "all ease .5s", ":hover": { cursor: "pointer", backgroundColor: "#ffff9b", color: "#fd0808" } });

return (<div {...theStyle}>Hover me!</div>);
Run Code Online (Sandbox Code Playgroud)

现在,如何将样式和展开运算符放到 JSX 元素的同一行和内部?

<div {...style({ backgroundColor: "#aaaaaa", height: "30px", width: "100%", padding: "6px", fontsize: "16px", transition: "all ease .5s", ":hover": { cursor: "pointer", backgroundColor: "#ffff9b", color: "#fd0808" } })}>Hover Me!</div>
Run Code Online (Sandbox Code Playgroud)

它可能并不完美,但它运行良好,并以类似的方式完成了与真正的内联样式相同的事情。