你需要使用CSS和一些技巧,但下面是一个将其包装起来的小组件。
https://jsfiddle.net/0gjs8bh3/3/
const InvertHoverButton = ({ id, backgroundColor, labelColor }) => {
// cubic-bezier(0.23 , 1 , 0.32 , 1 )
const transition = `background-color 450ms ${MaterialUI.transitions .easeOutFunction } 0ms `;
return (
<div style={{ display : 'inline-block' }}>
<style>
{`
#${id}:hover {
transition : ${transition } !important;
background-color : ${labelColor} !important;
color : ${backgroundColor} !important;
}
#${id} {
transition : ${transition } !important;
background-color : ${backgroundColor} !important;
color : ${labelColor} !important;
}
`}
</style>
<RaisedButton id={id} backgroundColor={labelColor} labelColor={backgroundColor} className="test">Fiddle!</RaisedButton>
</div >
);
};
例子:
// Must set id, backgroundColor and labelColor
<InvertHoverButton id ="myButton" backgroundColor="red" labelColor="white" >Fiddle!</InvertHoverButton>
您可以选择在此处以不同的方式进行CSS,但我只是试图在SO上为您封装它,以使其更易于测试。如果您选择以不同的方式实现此操作,则关键点如下:
1)您需要在RaisedButton渲染的元素上使用CSS :hover。
2)您必须使用已经反转颜色的RaisedButton
属性进行初始化(这是因为material-ui使用标签颜色来确定悬停覆盖和涟漪颜色)。使用您的CSS来在没有:hover时“修复”交换的颜色。
3)您需要匹配material-ui在按钮标签上使用的过渡,否则它不会正确地进行动画处理。
注意:如果您正在使用material-ui的自定义主题,您可以修改此组件以使用raisedButton主题的主/次颜色而不是接受自定义颜色。
RaisedButton
已被弃用,如果您正在使用较新版本的Button
,请参阅此问题。 - NearHuscarl