How can I detect CSS Variable support with JavaScript?

后端 未结 4 1297
梦毁少年i
梦毁少年i 2021-02-01 04:32

The latest version of Firefox has support for CSS Variables, but Chrome, IE and loads of other browsers do not. It should be possible to access a DOM Node or write a little meth

4条回答
  •  闹比i
    闹比i (楼主)
    2021-02-01 05:17

    You don’t need Javascript to detect if a browser supports custom properties, unless the Do stuff... is Javascript itself. Since the thing you’re detecting support for is CSS, I assume that the stuff you’re trying to do is all CSS. Therefore, if there’s a way to remove JS from this specific problem, I would recommend Feature Queries.

    @supports (display: var(--prop)) {
      h1 { font-weight: normal; }
      /* all the css, even without var() */
    }
    

    Feature queries test support for syntax. You don’t have to query for display; you could use any property you want. Likewise, the value of --prop need not even exist. All you’re doing is checking to see if the browser knows how to read that syntax.

    (I just chose display because almost every browser supports it. If you use flex-wrap or something, you won’t catch the browsers that do support custom props but that don’t support flexbox.)

    Sidenote: I prefer calling them Custom Properties because that is exactly what they are: properties defined by the author. Yes, you can use them as variables, but there are certain advantages to them as properties, such as DOM inheritance:

    body    { --color-heading: green; }
    article { --color-heading: blue; }
    h1      { color: var(--color-heading); } /* no need for descendant selectors */
    

提交回复
热议问题