【问题标题】:How to change icon color on hover?如何在悬停时更改图标颜色?
【发布时间】:2020-10-06 07:03:51
【问题描述】:

我正在尝试更改 IconButton 材质组件内的材质图标的颜色(应该触发颜色更改的操作 - 将鼠标悬停在 IconButton 上)。

如何做到这一点?仅当将鼠标悬停在图标本身而不是 IconButton 上时,才能直接向图标添加类。

我的代码:

<IconButton className="add-icon-btn" onClick={toggleNominationForm}>
  {!showForm ? <AddBoxIcon /> : <IndeterminateCheckBoxIcon /> }
</IconButton>

【问题讨论】:

  • 一个有效的 stackblitz 演示将真正有助于理解您的查询。
  • 我不知道为什么,但我无法在那里创建一个可行的应用程序 - stackblitz.com/edit/react-gwnrwh
  • 勾选this answer不想用就不用展开部分,像&lt;AddBoxIcon style={{backgroundColor: hover ? "blue" : "yellow"}} /&gt;一样简单使用

标签: javascript html css reactjs material-ui


【解决方案1】:

这里有一个完整的例子,我希望这能解决你的问题:

import React from 'react'
import { makeStyles } from '@material-ui/styles'
import IconButton from '@material-ui/core/IconButton'
import AddBoxIcon from '@material-ui/icons/AddBox'
import IndeterminateCheckBoxIcon from '@material-ui/icons/IndeterminateCheckBox'

export default () => {

    const [showForm, setShowForm] = React.useState(false)
    const classes = useClasses()

    return (
        <IconButton
            classes={{
                root: classes.iconContainer
            }}
        >
            {!showForm
                ? <AddBoxIcon className={classes.icon}/>
                : <IndeterminateCheckBoxIcon className={classes.icon}/>
            }
        </IconButton>
    )
}

const useClasses = makeStyles(theme => ({
    iconContainer: {
        "&:hover $icon": {
            color: 'red',
        }
    },
    icon: {
        color: 'blue',
    },
}))

【讨论】:

    【解决方案2】:

    你可能需要一个hover 状态。因此,您可以将onMouseEnter 和onMouseLeave 用于外部图标,然后使用此条件为内部图标设置样式。这个逻辑是从this answer 借来的。所以,我将我的答案设置为 CW。

    <IconButton
      onMouseEnter={() => {
        setHover(true);
      }}
      onMouseLeave={() => {
        setHover(false);
      }}
      className="add-icon-btn"
      onClick={toggleNominationForm}
    >
      {!showForm ? (
        <AddBoxIcon style={{ backgroundColor: hover ? "blue" : "yellow" }} />
      ) : (
        <IndeterminateCheckBoxIcon />
      )}
    </IconButton>
    

    【讨论】:

    • 在使用 Material-UI 时,最好使用内置方法进行样式设置,例如“制作样式”
    【解决方案3】:

    尝试添加以下 CSS -

    .IconButton:hover .Iconclass {
      background-color: /*desired color*/;
    }
    

    【讨论】:

    • 在使用 Material-UI 时,最好使用内置方法进行样式设置,例如“制作样式”
    猜你喜欢
    • 1970-01-01
    • 2020-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-29
    相关资源
    最近更新 更多