6

How can you use the @supports css rule in material ui makeStyles?

I tried to search that but didn't find anything describing how to include css rules like supports

Here is the styles I want to have:

@supports (display: grid) {
  div {
    display: grid;
  }
}

I tried this but it didn't work:

const useStyles = makeStyles(() => ({
    paper: {
        '@supports': {
            '(display: grid)': {
                display: 'grid';
            },
        },
    }
}))
Anatol
  • 3,720
  • 2
  • 20
  • 40

2 Answers2

6

The syntax for this is similar to the syntax for media queries. In your case, you would want the following:

const useStyles = makeStyles(() => ({
    paper: {
        '@supports (display: grid)': {
            display: 'grid'
        }
    }
}))

Here's a working example:

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

const useStyles = makeStyles((theme) => ({
  button: {
    "@supports (background-color: red)": {
      marginTop: theme.spacing(5),
      backgroundColor: "red"
    },
    "@supports not (display: unsupportedvalue)": {
      color: "white"
    },
    "@supports not (display: grid)": {
      backgroundColor: "purple"
    }
  }
}));
export default function App() {
  const classes = useStyles();
  return (
    <Button className={classes.button} variant="contained">
      Hello World!
    </Button>
  );
}

Edit CSS supports

Related answer:

Related documentation:

Ryan Cogswell
  • 75,046
  • 9
  • 218
  • 198
2

Just like you use media queries in the Mui, the same way you can make use of @support in it!

For example:

const useStyles = makeStyles((theme) => ({
  grid: {
    "@supports (display: grid)": {
      display: "grid",
      gridTemplateColumns: "1fr 1fr"
    }
  }
}));

Whole component will look like this:

import React from "react";
import { makeStyles } from "@material-ui/core";
function Grid() {
  const useStyles = makeStyles((theme) => ({
    grid: {
      "@supports (display: grid)": {
        display: "grid",
        gridTemplateColumns: "1fr 1fr"
      }
    }
  }));

  const styles = useStyles();

  return (
    <div className={styles.grid}>
      <div>Grid Item</div>
      <div>Grid Item</div>
      <div>Grid Item</div>
      <div>Grid Item</div>
    </div>
  );
}

export default Grid;

And here's the working codesandbox example: https://codesandbox.io/s/priceless-lamarr-olciu

Prathamesh Koshti
  • 1,322
  • 10
  • 17