自定义样式的 MUI 图标按钮不适用于工具提示

Posted

技术标签:

【中文标题】自定义样式的 MUI 图标按钮不适用于工具提示【英文标题】:Custom styled MUI IconButton does not work with tooltop 【发布时间】:2021-12-20 13:44:14 【问题描述】:

我已经设置了 IconButton 的样式,所以看起来我需要我现在遇到的问题是,当我使用 ToolTip 时,它不会出现在我的按钮附近,而是出现在页面的左上角。

我做错了什么?

import  styled  from '@mui/material/styles';
import IconButton from '@mui/material/IconButton';
import  motion  from "framer-motion"

export const Colors = ['#58b864', '#91d704', '#9ad436', '#fd9828', '#ff7826', '#fc4a41', '#e01f1f', '#4065ac', '#4065ac', '#4065ac', '#4065ac'];

const Button = (props, Component) => 
    const  color, greyed, children, className, icon, ...other  = props;

    const StyledButton = styled(IconButton)(( theme ) => (
        borderRadius: '18%',
        height: '26px',
        width: '26px',
        fontSize: '15px',
        backgroundColor: greyed ? '#293357' : color,
        color: greyed ? (theme.palette.mode === 'dark' ? '#63697d' : '#bebebe') : '#fff' , //?  : theme.palette.grey[50]
        '& svg': 
            fontSize: '16px'
        ,
        '&:hover': 
            color: '#fff',
            backgroundColor: color,
            filter: icon ? 'none' : 'brightness(1.2)',
            cursor: icon ? 'default' : 'pointer'
        ,
        '&.Mui-disabled': 
            backgroundColor: '#293357',
            color: '#666979'
        
    ));

    return (
        <StyledButton
            ...other
            component=icon ? null : motion.div
            whileHover=
                scale: 1.1,
                transition:  duration: 0.3 
            
            whileTap= scale: 0.9 
        >
            children
        </StyledButton>
    )


export default Button;

更新: 我发现这适用于工具提示:

const properties = ['color', 'greyed', 'icon']

const Button = styled(IconButton,  shouldForwardProp: (prop) => !properties.includes(prop))
    (( theme, color, greyed, icon ) => (
    borderRadius: '18%',
    height: '26px',
    width: '26px',
    fontSize: '15px',
    backgroundColor: greyed ? '#293357' : color,
    color: greyed ? (theme.palette.mode === 'dark' ? '#63697d' : '#bebebe') : '#fff' ,
    '& svg': 
        fontSize: '16px'
    ,
    '&:hover': 
        color: '#fff',
        backgroundColor: color,
        filter: icon ? 'none' : 'brightness(1.2)',
        cursor: icon ? 'default' : 'pointer'
    ,
    '&.Mui-disabled': 
        backgroundColor: '#293357',
        color: '#666979'
    
));

但后来我不明白如何从运动成帧器全局应用动画。请帮忙,我错过了什么?

【问题讨论】:

【参考方案1】:

我加position:"relative"试试看。

      const StyledButton = styled(IconButton)(( theme ) => (
position:"relative",
        borderRadius: '18%',
        height: '26px',
        width: '26px',
        fontSize: '15px',
        backgroundColor: greyed ? '#293357' : color,
        color: greyed ? (theme.palette.mode === 'dark' ? '#63697d' : '#bebebe') : '#fff' , //?  : theme.palette.grey[50]
        '& svg': 
            fontSize: '16px'
        ,
        '&:hover': 
            color: '#fff',
            backgroundColor: color,
            filter: icon ? 'none' : 'brightness(1.2)',
            cursor: icon ? 'default' : 'pointer'
        ,
        '&.Mui-disabled': 
            backgroundColor: '#293357',
            color: '#666979'
        
    ));

【讨论】:

以上是关于自定义样式的 MUI 图标按钮不适用于工具提示的主要内容,如果未能解决你的问题,请参考以下文章

如何从 MUI 图标按钮设置按钮样式

Ag-grid 自定义工具提示不适用于网格单元

如何自定义谷歌课堂分享按钮的外观

Excel自定义功能栏图标突然变大,快捷键不能全部显示,应如调整

缩进不适用于自定义 UITableViewCell

自定义样式不适用于 angular 10