15

A completely different way to write responsive, vanilla, CSS

 4 years ago
source link: https://propjockey.github.io/css-media-vars/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Basics of css-media-vars

css-media-vars adds several --custom-css-variables, all namespaced with "--media-" and based on media queries, onto the HTML tag. These vars act as universal mixins for your CSS values. If the media query is true, your value will be used. If it's false, the var(..., fallback) will be used.

For example, there are several named breakpoints that respond to the width of the screen, such as --media-lte-sm .

In your CSS, if you want a value to only apply when the screen is less than or equal to the "small" breakpoint range, you mix it into your value:

--my-small-value: var(--media-lte-sm) 2px;

From this point, you can use your variable anywhere and it will only be "2px" if the media query is true. Else, it uses the fallback you provide, like so:

border: var(--my-small-value, 15px) solid green;
MnqeAba.gif

Here's a link to the jsbin pictured in the gif: https://jsbin.com/giqedowale/edit?css,output

If you need multiple break points, all you have to do is mix a different breakpoint into another variable and use it in the first fallback:

          --my-small-value: var(--media-lte-sm) 2px;

          --my-medium-value: var(--media-md) 15px;

          border: var(--my-small-value, var(--my-medium-value, 30px)) solid green;

        

In this case, because the small values are listed first, this approach is mobile-first ! CSS Variables don't compile the fallback unless it's used (similar to the expected short-circuting of conditionals in JavaScript).

This is all vanilla CSS. No JS or build step is necessary.

The library is small and built on a CSS trick called "Space Toggle" discovered in the development of augmented-ui . You can read more about Space Toggle in these tweets which contain links to JSBins you can explore further with:

Second Tweet, a simple demo

First Tweet, an advanced demo

Browser support for CSS Variables is currently 94% globally according to caniuse .

Each of the --media-* vars are using the actual media query in CSS to switch them to the "true" state. Browser support depends on the feature but will always behave as if it's "false" if the media query isn't supported in the user's browser, such as --media-prefers-light which only recently gained traction.


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK