npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@aleph/nought-sass-mixins

v2.0.0

Published

A set of useful mixins for use on sass projects

Downloads

145

Readme

Nought Sass Mixins

A collection of useful mixins! When Aleph bootstraps a new website project, we like to leverage CSS Modules and Sass. While every project is different, our workflow around layout grids, breakpoints and other global stuff is pretty much the same. Thus, we have this library!

Use It

yarn add -D @aleph/nought-sass-mixins

or

npm i -D @aleph/nought-sass-mixins

Depending on how your framework standardizes Sass imports, you can import the whole library directly, or use the different modules individually:

/// Everything, not using a namespace
@use "@aleph/nought-sass-mixins" as *;

/// Just the grids, not using a namespace
@use "@aleph/nought-sass-mixins/sass/grid" as *;

/// Just the utilities, with the default "utils" namespace
@use "@aleph/nought-sass-mixins/sass/utils";

/// Then, to reset a button
button {
    @include utils.buttonReset;
}

Including and Customizing for Your Project

All these mixins come with sensible defaults that can usually be overwritten by variables when @use or @forward them in your project. Details on specific variables you can set are below, but here's a somewhat standard setup that might be useful as a simple example.

Assuming you are including this library as a complement to your own project-specific mixins, you might want a single scss file with all mixins in it that you can @use anywhere. If you wanted to keep all the defaults you'd just put this up top in your _mixins.scss file:

@forward "@aleph/nought-sass-mixins";

If you wanted to instead override just the default global container width and padding, you'd do this:

@forward "@aleph/nought-sass-mixins" with (
  $container-width: 1180px
  $container-padding: 36px
);

From there, you can write a bunch of mixins in this file and then @use it in your project wherever you like.

What's Inside

There are a few different modules available for use, and within them mixins that may be useful to you.

Breakpoints

Convenience mixins for media queries along a set system of breakpoints. This is directly lifted from Bootstrap 5's media query mixins. These default variable values can be overridden:

/// You can have as many breakpoints as you like, and call them whatever you like.
/// Currently, this entire map needs to be overwritten to override defaults.
$grid-breakpoints: (
  xs: 0,
  sm: 576px,
  md: 768px,
  lg: 992px,
  xl: 1200px,
  xxl: 1400px,
);

Detailed usage docs are available here, but here's the basic list of all mixins, assuming using default breakpoints:

@include media-breakpoint-up(md) { ... } // min width 768px
@include media-breakpoint-down(md) { ... } // max-width: 767.98px
@include media-breakpoint-only(md) { ... } // min 768 and max 991.98px
@include media-breakpoint-between(md, xl) { ... } // min 768 and max 1199.98px

Grid

The layout grid module is a set of convenience features utilizing CSS Grids to manage containers and grids / columns inside them. Here are the default variables you can override:

/// default settings for the "grid()" mixin
$grid-column-count: 12;
$grid-column-gap: 24px;
$grid-row-gap: 24;

/// NB! You can set this up however you want but the key names must
/// match responsive breakpoint keys(from above) to work properly!
$grid-responsive-column-counts: (
  md: 8, /// e.g. by default, make the grid 8 columns at the "md" breakpoint
  sm: 4,
);

/// NB! You can set this up however you want but the key names must
/// match responsive breakpoint keys(from above) to work properly!
$grid-responsive-column-gap: (
  md: $grid-column-gap,
  sm: $grid-column-gap,
) !default; /// at the "md" and sm" breakpoints

/// Defaults for container() mixin
$container-width: 1200px;
$container-padding: 48px;
/// NB! You can set this up however you want but the key names must
/// match responsive breakpoint keys(from above) to work properly!
$container-responsive-padding: (
  md: $container-padding,
  sm: 12px,
) !default; /// at the "md" and sm" breakpoints

Here's all the mixins with default args:

@include grid( // create a grid container
    $columns: $grid-column-count, 
    $responsive-columns: true, /// if false, the grid won't automatically flex change column numbers at any width
) { ... } 

@include grid; // 12 column grid, goes to 8 and 4 at md and sm breakpoints
@include grid(5, false) // 5 column grid at all widths

@include columns(
  $startColumn, // container starts at the left edge of this column
  $endColumn, // container ends at the left edge of this column's left gutter
  $fullWidthBreakpoint: sm // container goes to full width at this breakpoint
) { ... }

@include columns(1, 7) // takes up the left 6 columns, goes to full-width at sm breakpoint
@include columns(2, 4, false) // spans columns 2-3, doesn't go to full-width automatically


@include spanColumns( // creates columns based on a span count
  $spanColumns, // number of columns container spans
  $startColumn: false, // start column for span, if left out it just starts at the next available column
  $fullWidthBreakpoint: sm // container goes to full width at this breakpoint
) { ... }

@include spanColumns(2) // spans two columns, starting at next available space in a row.
@include spanColumns(4, 1) // spans four columns starting all the way to the left.
@include spanColumns(5, $fullWidthBreakpoint: md) // spans 5 columns, goes full-width at md breakpoint
@include spanColumns(3, $fullWidthBreakpoint: false) // 3 columns, doesn't go to full width ever

@include container() // a container div restricted to a max-width defined in $container-width
@include fullBleed() // breaks out of a container to full bleed. Doesn't work inside a grid!
@include containerGrid() // helper that sets up a default grid inside a container

Utility Mixins

Here's a little group of helpers that we use on most projects:

@include srOnly; // Hides from everything but Screen Readers
@include buttonReset; // Kills off default button styles
@include listReset; // Resets all styles on lists

Testing and Contributing

This repo includes our stylelint standards you can run to make sure you're keeping everything clean. After cloning the repo and running yarn you can lint your work at any time with yarn test (Autofix with yarn test --fix).

If you run yarn dev you'll get a test page with the default styles compiled. You can play with the features in the test/index.html to see how stuff's working.