programing

MUI 툴팁 스타일링 방법

mailnote 2023. 3. 27. 21:24
반응형

MUI 툴팁 스타일링 방법

MUI 스타일링 방법Tooltip텍스트? 호버에 있는 기본 툴팁은 텍스트 랩 없이 검은색으로 표시됩니다.배경, 색상 등을 변경할 수 있습니까?이 옵션은 사용할 수 있습니까?

이 질문에 대한 또 다른 일반적인 답변은 (André Junges의) 0.x 버전의 Material-UI입니다.아래에서는 Material UI의 Tooltip - Customization Style에서 답변을 복사하여 v3 및 v4에 대해 설명합니다.또한 v5를 사용한 예제의 버전을 추가했습니다.

다음은 테마를 통해 모든 툴팁을 덮어쓰거나 withStyles를 사용하여 단일 툴팁을 사용자 정의하는 방법의 예입니다(두 가지 다른 예).두 번째 방법은 글로벌하게 사용하지 않고 재사용할 수 있는 커스텀툴팁 컴포넌트를 작성하는 경우에도 사용할 수 있습니다.

import React from "react";
import ReactDOM from "react-dom";

import {
  createMuiTheme,
  MuiThemeProvider,
  withStyles
} from "@material-ui/core/styles";
import Tooltip from "@material-ui/core/Tooltip";

const defaultTheme = createMuiTheme();
const theme = createMuiTheme({
  overrides: {
    MuiTooltip: {
      tooltip: {
        fontSize: "2em",
        color: "yellow",
        backgroundColor: "red"
      }
    }
  }
});
const BlueOnGreenTooltip = withStyles({
  tooltip: {
    color: "lightblue",
    backgroundColor: "green"
  }
})(Tooltip);

const TextOnlyTooltip = withStyles({
  tooltip: {
    color: "black",
    backgroundColor: "transparent"
  }
})(Tooltip);

function App(props) {
  return (
    <MuiThemeProvider theme={defaultTheme}>
      <div className="App">
        <MuiThemeProvider theme={theme}>
          <Tooltip title="This tooltip is customized via overrides in the theme">
            <div style={{ marginBottom: "20px" }}>
              Hover to see tooltip customized via theme
            </div>
          </Tooltip>
        </MuiThemeProvider>
        <BlueOnGreenTooltip title="This tooltip is customized via withStyles">
          <div style={{ marginBottom: "20px" }}>
            Hover to see blue-on-green tooltip customized via withStyles
          </div>
        </BlueOnGreenTooltip>
        <TextOnlyTooltip title="This tooltip is customized via withStyles">
          <div>Hover to see text-only tooltip customized via withStyles</div>
        </TextOnlyTooltip>
      </div>
    </MuiThemeProvider>
  );
}
const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);

툴팁 사용자 지정 편집

다음은 툴팁 동작의 다양한 측면을 제어하기 위해 사용할 수 있는 툴팁 CSS 클래스에 대한 문서입니다.https://material-ui.com/api/tooltip/ # css

https://material-ui.com/customization/components/ #global-module-module 테마에서 이러한 클래스를 덮어쓰는 방법에 대한 매뉴얼을 다음에 나타냅니다.


다음은 유사한 예입니다. 단, Material-UI의 v5에서 작동하도록 업데이트되었습니다(일부 수정 후 5.0.3 이상 버전에서 작동한다는 점에 유의하십시오).테마에 의한 커스터마이즈, 를 사용한 커스터마이즈도 포함됩니다.styled및 를 사용한 커스터마이즈sx이 모든 커스터마이즈는 툴팁의 비주얼을 제어하는 요소에 CSS가 적용되도록 "툴팁 슬롯"을 대상으로 합니다.

import React from "react";
import ReactDOM from "react-dom";

import { createTheme, ThemeProvider, styled } from "@mui/material/styles";
import Tooltip from "@mui/material/Tooltip";

const defaultTheme = createTheme();
const theme = createTheme({
  components: {
    MuiTooltip: {
      styleOverrides: {
        tooltip: {
          fontSize: "2em",
          color: "yellow",
          backgroundColor: "red"
        }
      }
    }
  }
});
const BlueOnGreenTooltip = styled(({ className, ...props }) => (
  <Tooltip {...props} componentsProps={{ tooltip: { className: className } }} />
))(`
    color: lightblue;
    background-color: green;
    font-size: 1.5em;
`);

const TextOnlyTooltip = styled(({ className, ...props }) => (
  <Tooltip {...props} componentsProps={{ tooltip: { className: className } }} />
))(`
    color: black;
    background-color: transparent;
`);

function App(props) {
  return (
    <ThemeProvider theme={defaultTheme}>
      <div className="App">
        <ThemeProvider theme={theme}>
          <Tooltip title="This tooltip is customized via overrides in the theme">
            <div style={{ marginBottom: "20px" }}>
              Hover to see tooltip customized via theme
            </div>
          </Tooltip>
        </ThemeProvider>
        <BlueOnGreenTooltip title="This tooltip is customized via styled">
          <div style={{ marginBottom: "20px" }}>
            Hover to see blue-on-green tooltip customized via styled
          </div>
        </BlueOnGreenTooltip>
        <TextOnlyTooltip title="This tooltip is customized via styled">
          <div style={{ marginBottom: "20px" }}>
            Hover to see text-only tooltip customized via styled
          </div>
        </TextOnlyTooltip>
        <Tooltip
          title="This tooltip is customized via the sx prop"
          componentsProps={{
            tooltip: {
              sx: {
                color: "purple",
                backgroundColor: "lightblue",
                fontSize: "2em"
              }
            }
          }}
        >
          <div>
            Hover to see purple-on-blue tooltip customized via the sx prop
          </div>
        </Tooltip>
      </div>
    </ThemeProvider>
  );
}
const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);

툴팁 사용자 지정 편집

v4와 v5의 테마 구조 변경에 관한 문서:https://mui.com/guides/migration-v4/ #http://https://mui.com/guides/migration-v4/

Material-UI 문서의 툴팁 맞춤 예: https://mui.com/components/tooltips/ # customization

MUI v5 업데이트

커스터마이즈 할 수 있습니다.Tooltip툴팁 슬롯의 스타일을 덮어쓰기 합니다.v5에서는 3가지 방법이 있습니다.자세한 내용은 의 커스터마이제이션 섹션을 참조하십시오.Tooltip기타 예sx소품 및createTheme여기도 보이고 여기도 보이고

styled()

const ToBeStyledTooltip = ({ className, ...props }) => (
  <Tooltip {...props} classes={{ tooltip: className }} />
);
const StyledTooltip = styled(ToBeStyledTooltip)(({ theme }) => ({
  backgroundColor: '#f5f5f9',
  color: 'rgba(0, 0, 0, 0.87)',
  border: '1px solid #dadde9',
}));

sx받침대

<Tooltip
  title="Add"
  arrow
  componentsProps={{
    tooltip: {
      sx: {
        bgcolor: 'common.black',
        '& .MuiTooltip-arrow': {
          color: 'common.black',
        },
      },
    },
  }}
>
  <Button>SX</Button>
</Tooltip>

createTheme+ThemeProvider

const theme = createTheme({
  components: {
    MuiTooltip: {
      styleOverrides: {
        tooltip: {
          backgroundColor: 'pink',
          color: 'red',
          border: '1px solid #dadde9',
        },
      },
    },
  },
});

Codesandbox 데모

Tooltip의 텍스트 색상, 글꼴 크기...를 변경하는 방법은 간단합니다.

Martial Ui 툴팁의 제목에 태그를 삽입할 수 있습니다.다음은 예를 제시하겠습니다.

<Tooltip title={<span>YourText</span>}>
   <Button>Grow</Button>
</Tooltip>

원하는 대로 태그 스타일을 만들 수 있습니다.

다음 예시를 확인합니다.

module-allen-6ubp6 편집

이 답변은 구식입니다.이 답변은 2016년에 0.x 버전의 Material-UI에 대해 작성되었습니다.버전 3 및 4에서 사용할 수 있는 접근법에 대해서는 다음 답변을 참조하십시오.

mui 테마를 커스터마이즈하는 텍스트 색상과 요소 배경을 변경할 수 있습니다.

color는입니다. - 는 텍스트 색상입니다.

rippleBackgroundColor 는 툴팁 입니다.

: :「」를 사용합니다.IconButton 안 돼요. - 이렇게 하면 안 돼요.Tooltip접....

import React from 'react';
import IconButton from 'material-ui/IconButton';
import MuiThemeProvider from 'material-ui/lib/styles/MuiThemeProvider';
import getMuiTheme from 'material-ui/lib/styles/getMuiTheme';

const muiTheme = getMuiTheme({
  tooltip: {
    color: '#f1f1f1',
    rippleBackgroundColor: 'blue'
  },
});

const Example = () => (
  <div>
    <MuiThemeProvider muiTheme={muiTheme}>
        <IconButton iconClassName="muidocs-icon-custom-github" tooltip="test" />
    </MuiThemeProvider>
  </div>
);

할 수 요.styleTooltip)IconButtontooltipStyles ) - 단, 에만 적용됩니다.) - 이, 이, 이, 이, 이, 이, 이, 이, 이, 이, 이, 이, 이, 이, 이, 이, 이, 이, 이, 이, 이, 이, 이, 이, 이, 이, 이, 이, 이.

레이블 스타일을 여러 줄로 줄 바꿈하도록 변경할 수 없습니다.

저도 이 문제에 직면했습니다.툴팁의 색상을 변경하기만 하면, 다음과 같은 솔루션을 이용할 수 있습니다.

import React from 'react';
import { makeStyles } from '@material-ui/core/styles';

import Tooltip from '@material-ui/core/Tooltip';
import Button from '@material-ui/core/Button';
import DeleteIcon from '@material-ui/icons/Delete';

const useStyles = makeStyles(theme => ({
  customTooltip: {
    // I used the rgba color for the standard "secondary" color
    backgroundColor: 'rgba(220, 0, 78, 0.8)',
  },
  customArrow: {
    color: 'rgba(220, 0, 78, 0.8)',
  },
}));

export default TooltipExample = () => {
  const classes = useStyles();

  return (
    <>
      <Tooltip
        classes={{
          tooltip: classes.customTooltip,
          arrow: classes.customArrow
        }}
        title="Delete"
        arrow
      >
        <Button color="secondary"><DeleteIcon /></Button>
      </Tooltip>
    </>
  );
};

MUI v5 커스텀컴포넌트

니어허스칼의 답변을 바탕으로 구축:sx가장 간단한 방법은 스타일링과 각 툴팁에 반복하고 싶은 기타 속성을 포함하는 커스텀 컴포넌트를 작성하는 것이었습니다.

예를 들어, 컴포넌트는 아래쪽에 화살표와 더 큰 글꼴 크기로 툴팁을 표시할 수 있습니다.

const StyledTooltip = ({ title, children, ...props }) => (
  <Tooltip
    {...props}
    title={title}
    placement="bottom"
    arrow
    componentsProps={{
      tooltip: {
        sx: {
          fontSize: '1.125rem',
        },
      },
    }}
  >
    {children}
  </Tooltip>
);

const Buttons = () => (
  <div>
    <StyledTooltip title="This is one">
      <Button>One</Button>
    </StyledTooltip>
    <StyledTooltip title="This is two">
      <Button>Two</Button>
    </StyledTooltip>
  </div>
);

HtmlTooltip을 사용한 다른 솔루션

하여 HtmlTooltip을 합니다.arrow: {color: '#f5f5f9',},화살표 툴팁 스타일에 사용합니다.

툴팁 스타일 자체도 훨씬 더 중요합니다.

저는 ★★★★★★★★★★★★★★★★★★★★★.ValueLabelComponent.TooltipUI.

다른 방법으로 자료를 편집할 수 있기를 바랍니다.UI 툴팁 :)

const HtmlTooltip = withStyles((theme) => ({
  tooltip: {
    backgroundColor: 'var(--blue)',
    color: 'white',
    maxWidth: 220,
    fontSize: theme.typography.pxToRem(12),
    border: '1px solid #dadde9',
  },
  arrow: {
    color: '#f5f5f9',
  },
}))(Tooltip);

function ValueLabelComponent({ children, open, value }) {
  return (
    <HtmlTooltip arrow open={open} enterTouchDelay={0} placement="top" title={value}>
      {children}
    </HtmlTooltip>
  );
}

...
...

return (
    <div className={classes.root}>
      <Slider
        value={value}
        onChange={handleChange}
        onChangeCommitted={handleChangeCommitted}
        scale={(x) => convertRangeValueToOriginalValue(x, minMaxObj)}
        valueLabelDisplay="auto"
        valueLabelFormat={(x) => '$' + x}
        ValueLabelComponent={ValueLabelComponent}
        aria-labelledby="range-slider"
      />
    </div>
  );

하였습니다.makeStyles()렇게끝끝 끝끝끝다다

import React from 'react';
import Grid from '@mui/material/Grid';
import Typography from '@mui/material/Typography';
import Tooltip from '@mui/material/Tooltip';
import InfoOutlinedIcon from '@mui/icons-material/InfoOutlined';
import { makeStyles } from '@material-ui/core/styles';

const styles = makeStyles({
    tooltip: {
        backgroundColor: '#FFFFFF',
        color: '#000000',
        border: '.5px solid #999999',
        fontSize: '.85rem',
        fontWeight: '400'
    }
});

const HeaderTooltip = ({ header, tooltip }) =>
    <Grid container direction="row" alignItems="center" spacing={1}>
        <Grid item>
            <Typography variant='h5'>{header}</Typography>
        </Grid>
        <Grid item>
            <Tooltip title={tooltip} classes={{ tooltip: styles().tooltip }}>
                <InfoOutlinedIcon />
            </Tooltip>
        </Grid>
    </Grid>

export default HeaderTooltip;

Styled Component 및 MUI V5

import styled from 'styled-components';
....
....

           <StyledTooltip title={tooltip}>
                  <IconTextStyle>
                    {icon}
                    <Label>{label}</Label>
                  </IconTextStyle>
            </StyledTooltip>
const StyledTooltip = styled((props) => (
  <Tooltip classes={{ popper: props.className }} {...props} />
))`
  & .MuiTooltip-tooltip {
    display: flex;
    background-color: #191c28;
    border-radius: 4px;
    box-shadow: 0px 0px 24px #00000034;
  }
`;

다음과 같은 방법으로 커스텀 툴팁을 만듭니다.

import React from 'react'
import Tooltip from '@material-ui/core/Tooltip'
import ErrorOutlineOutlinedIcon from '@material-ui/icons/ErrorOutlineOutlined'
import {
    makeStyles,
    createStyles,
    withStyles,
} from '@material-ui/core/styles'
import Typography from '@material-ui/core/Typography'
import { Divider, Link, Paper } from '@material-ui/core'


const HtmlTooltip = withStyles(theme => ({
    arrow: {
        '&::before': {
            color: 'white'
        }
    },
    tooltip: {
        backgroundColor: '#f5f5f9',
        boxShadow: theme.shadows[8],
        color: 'rgba(0, 0, 0, 0.87)',
        fontSize: 14,
        maxWidth: 800,
        padding: 0,
    },
    tooltipPlacementTop: {
        margin: '4px 0',
    },
}))(Tooltip)

const imageStyles = { root: { color: 'deeppink', height: 20, marginBottom: 0, width: 20 } }

const Image = withStyles(imageStyles)(({ classes }) => (
    <ErrorOutlineOutlinedIcon classes={classes} />
))

const useStyles = makeStyles(theme =>
    createStyles({
        content: {
            border: `1px solid ${theme.palette.grey[300]}`,
            margin: 0,
            minWidth: 600,
            padding: 0,
            zIndex: 1,
        },
        contentInner: {
            padding: theme.spacing(1)
        },
        header: {
            backgroundColor: 'deeppink',
            fontWeight: 'bold',
            padding: theme.spacing(1),
        }
    })
)

export default function CustomTooltip(params) {
    const classes = useStyles()
    const labelDisplay = params.content
    const textDispaly = params.text
    return (
        <>
            {labelDisplay && labelDisplay.length > 20 ? (<HtmlTooltip arrow interactive title={
                <Paper className={classes.content}>
                    <div className={classes.header}>
                        <Typography color='inherit' variant='body1' style={{color: 'white', fontSize: '20px'}}>
                            {params.title}
                        </Typography>
                    </div>
                    <Divider />
                    <div className={classes.contentInner}>
                        {textDispaly}
                    </div>
                </Paper>}
            placement='top'
            >
                <div style={{ alignItems: 'center', display: 'flex', fontSize: '12px', justifyContent: 'space-between' }}>
                    {labelDisplay}<Image/>
                </div>
            </HtmlTooltip>) : (labelDisplay)}
        </>
    )
}

언급URL : https://stackoverflow.com/questions/36759985/how-to-style-mui-tooltip

반응형