Divyansh Goenka
Divyansh Goenka

Reputation: 1094

React How to remove the animation of Material-UI Select

I'm using the React Material UI's Select Component. I wish to remove or speeden the animation that comes when the menu is opening. I tried something like:

 <Select
     ...
     TransitionComponent={({children}) => children}
 >
     <MenuItem value={...}>...</MenuItem>
     ...
 </Select>

But this is not working, please help

Upvotes: 6

Views: 19316

Answers (4)

dat
dat

Reputation: 395

For those that are using a corresponding Material UI InputLabel component with a mui Select component, I was able to pass in the following props to the InputLabel component to disable the animation and shrink altogether:

<div>
   <FormControl>
     <InputLabel
       disableAnimation={true}
       shrink={false}
       ...
     >
       {`some label`}
     </InputLabel>
     <Select>
      {`...`}
     </Select>
   </FormControl>
 </div>

MUI Input Label API

Upvotes: 3

Kevin Reilly
Kevin Reilly

Reputation: 6252

To add to keikai's answer, you can also do this globally with a theme change:

const theme = createMuiTheme({
  overrides: {
    MuiPaper: {
      root: {
        transition: 'none !important'
      },
    },
  }
});

Upvotes: 3

keikai
keikai

Reputation: 15146

The reason why it doesn't work:

MUI <Select /> API don't have props TransitionComponent, as well as some other components like <Tooltip /> do have

Refer: API document of

Related QA: React Material UI Tooltips Disable Animation


Solution

Override the transition style would be fine.

div.MuiPaper-root {
  transition: none !important;
}

enter image description here


Explanation

The HTML structure for options:

Since it's been dynamically generated outside the main component, it's not suitable for us to directly set styles for them.

However, we can optionally override the styles by those classNames like MuiPaper-root, or some other ways like a given id.

<div
  class="MuiPaper-root MuiMenu-paper MuiPopover-paper MuiPaper-elevation8 MuiPaper-rounded"
  tabindex="-1"
  style="opacity: 1; transform: none; min-width: 40px; transition: opacity 251ms cubic-bezier(0.4, 0, 0.2, 1) 0ms, transform 167ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; top: 16px; left: 16px; transform-origin: -8px 7.7px;"
>
  <ul
    class="MuiList-root MuiMenu-list MuiList-padding"
    role="listbox"
    tabindex="-1"
  >
    ...
  </ul>
</div>;

enter image description here

Upvotes: 7

Anatol Zakrividoroga
Anatol Zakrividoroga

Reputation: 4518

add this to your stylesheet:

.MuiMenu-paper {
    transition-duration: 0s !important;
}

This basically overrides the transition duration of the select dropdown and sets it to 0 seconds.

You can also change the duration according to what you like (make it faster). The default animation duration is:

transition-duration: 251ms, 167ms;

Upvotes: 7

Related Questions