Git Product home page Git Product logo

conditional-css's Introduction

conditional-css

This repo is just a demonstration of the possibility to perform boolean tests using CSS vars.

The idea comes from this stackoverflow answer: https://stackoverflow.com/a/64322555/8086209

Sometimes you have one component that should behave differently based on its size (or its container's), but CSS doesn't provide a way to handle this simply (just like media queries to handle viewport size). The container query is supposed to be implemented soon, but as I write these lines, it's still an experimental feature, so this is a workaround.

The idea is to perform operations on a CSS variable so it outputs 0 or 1.

We would declare a --width & a --threshold var, and then do:

  • --result = calc(var(--width) - var(--treshold)) : this outputs a negative number if width is inferior to threshold
  • --positive = max(var(--result), 0) : outputs the above result if positive, otherwise 0
  • --boolean = min(1, --positive) : outputs 1 or 0

So the shorthand for this would be :

--boolean = min(1, max(var(--width) - var(--threshold), 0))

Then this value can be used to trigger animations states using the step property. When --boolean equals 0, the animation won't be triggered so the element will get the default properties, otherwise the to keyframe will override them:

animation: element-if-true steps(var(--boolean)) forwards;

All animatables properties can be changed conditionnally using this technique.

The complete process can be seen in the style.css file & the result is shown here: https://corbin-c.github.io/conditional-css/

conditional-css's People

Contributors

corbin-c avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.