Git Product home page Git Product logo

open-props-scss's Introduction

open-props-scss

Problem: Open Props is super awesome but it leans heavily into PostCSS for things like custom media queries and treeshaking unused props. Sometimes you just want to use a color or shadow without bringing in the whole thing or configuring anything.

Solution: Sass variables! Import the whole thing, use only what you need, the rest will get compiled away. No need for any extra configuration.

Try it on Stackblitz.

Installation

npm i open-props-scss

Usage

Import the package under a namespace:

@use 'open-props-scss' as op;

And start using the props!

Most of the names follow the same naming convention as open props CSS variables, except the -- is replaced with $. You can find the values of all props by inspecting the scss files on npm.

body {
  font-family: op.$font-sans;
}

Shadows are made available through a shadow() function rather than a variable. This allows choosing between light and dark themes, as well as modifying $shadow-color and $shadow-strength if desired.

box-shadow: op.shadow(1);
box-shadow: op.shadow('inner-3', dark);
box-shadow: op.shadow(5, $shadow-color: var(--my-shadow-color));

Animations are made available as mixins rather than a variable. Some animations (e.g. fade-in-bloom and fade-out-bloom) also have a dark theme version, which can be included by passing a dark argument to the mixin.

button {
  @include op.scale-up;
}

section {
  @include op.fade-in-bloom(dark);
}

Custom properties

A common workflow is to assign open props to your own custom properties. This requires interpolating the values inside #{}.

:root {
  --page-bg: #{op.$gray-2};
  --page-text: #{op.$gray-9};

  @media (op.$OSdark) {
    --page-bg: #{op.$gray-9};
    --page-text: #{op.$gray-1};
  }

  background-color: var(--page-bg);
  color: var(--page-text);
}

Unprefixed usage

You can also import the props into the global scope to use them without a prefix. Be careful when doing this as it might cause conflicts with some of your own variables.

@use 'open-props-scss' as *;

:root {
  --page-bg: #{$gray-2};
  --page-text: #{$gray-9};

  @media ($OSdark) {
    --page-bg: #{$gray-9};
    --page-text: #{$gray-1};
  }

  font-family: $font-sans;
  background-color: var(--page-bg);
  color: var(--page-text);
}

Acknowledgements

All I did is convert the tokens to Sass variables. The credit for actually making Open Props goes to Adam Argyle. ๐Ÿ’œ

open-props-scss's People

Contributors

mayank99 avatar woodcox 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.