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

@nib-styles/responsive-grid

v0.4.2

Published

Downloads

5

Readme

responsive-grid

We use a responsive grid component to build all of the layouts on the site. This grid is used entirely with classes in the markup. This means we can keep the layout of pages separate from from the other modules.

Installation

component install nib-styles/responsive-grid

Usage

The grid is made up of these parts:

  • Grid classes
  • Size classes
  • Visibility classes
  • Spacing classes

With these it is possible to create layouts for any device without needing to write any new CSS. This means the CSS will scale regardless of how many new pages are added.

The Grid

The grid itself consists of 12 columns with a max width of 960px. The grid has no gutters and the columns sit flush against each other. The reason for this is that we can use fixed percentages for the widths of columns, for example, with 2 columns, each column is 50%. Using percentages this way means the grid is responsive. The width of the grid can change, but those two columns will always be 2 columns.

This is possible because of the box-sizing:border-box property. This allows us to then add padding and border to the columns without making the columns wider.

Class Prefixes

Every class in this package is prefixed with rg-. This is just a namespace for the classes so they are easily identifable.

Breakpoints

The grid has 5 breakpoints.

  • up to 320px (4 columns)
  • 480px (6 columns)
  • 640px (8 columns)
  • 800px (10 columns)
  • 960px (12 columns)

These aren't based on devices, they all fall on columns on the grid. The breakpoints are all set in em units so they are relative to the font size.

As the window size decreases there are few columns available. This means that at 960px and above, we're using a 12 column grid, at 800px we're using a 10 column grid and so forth.

Size Classes

The main layout classes are based on the grid columns:

<div class="rg-1of12"></div>

This will make the div 1 column wide when there are 12 columns available. If we change this:

<div class="rg-2of10"></div>

This will no be 2 columns wide when there are 10 columns available. This is between 800px and 960px.

These classes are available for each breakpoint, for example:

.rg-1of4
.rg-1of6
.rg-1of8
.rg-1of10
.rg-1of12
etc...

Mobile First

The sizing classes are all mobile-first. What this means is that if you apply a class of .rg-2of4 (50%) this will work at every breakpoint above it, so you don't need to do this:

<div class="rg-1of4 rg-3of6 rg-4of8 rg-5of10 rg-6of12"></div>

Instead, you can do this:

<div class="rg-1of4 rg-3of6"></div>

And this will be carried up to each higher breakpoint. It will be 1 column at 4 columns wide (320px) and 2 columns wide at 6 columns and higher.

Grid Units

You obviously need more than just widths. You want these columns to sit next to each other. For this you need to setup a few classes:

<div class="rg-Grid">
  <div class="rg-Unit rg-3of6"></div>
  <div class="rg-Unit rg-3of6"></div>
</div>

The rg-Unit class makes the element inline-block and the rg-Grid class makes them sit flush next to each other. Think of rg-Grid as a row of columns. We structure it like this so that nesting of grids is possible. This allows an infinite number of layouts.

Page Class

Most of the time you don't want the grid sitting on the left of the screen. For this you want to center everything in the middle of the page and set the max width of the grid.

<div class="rg-Page"> <!-- Centers the grid -->
  <div class="rg-Grid"> <!-- Aligns the grid units -->
    <div class="rg-Unit rg-3of6"></div> <!-- A grid unit  -->
    <div class="rg-Unit rg-3of6"></div>
  </div>
</div>

Visibility Classes

Showing and hiding elements at breakpoints

With responsive design there are often times when you want to show and hide elements at different breakpoints. There are visibility classes for this:

<div class="rg-Grid">
  <div class="rg-Unit rg-3of6 rg-invisibleAt4 rg-visibleAt12">
    Only shown at 12 columns or higher
  </div>
  <div class="rg-Unit rg-3of6 rg-invisibleAt12">
    Only shown below 12 columns
  </div>
</div>

There are two types of classes rg-invisibleAtX and rg-visibleAtX.

Spacing Classes

One of the key parts of writing maintainable CSS is separating the layout from the decoration. Having spacing classes in our html as part of the layout means that our other CSS modules don't need to include padding or margin, making them even more flexible.

The spacing classes are used to add padding and margin at different breakpoints. Just like the size classes they are mobile first.

<div class="rg-mx3at4"></div>
<div class="rg-pt4at4"></div>

There are two types of spacing classes - margin and padding. Then spacing can be applied on all sides, top, left, bottom, right, horizontally (left and right) and vertically (top and bottom).

They can then be multiple sizes: 0px, 5px, 10px, 20px, 40px, 60px.

Finally, they can be applied at specific breakpoints.

Using these factors we can build up the classes we need. For example, if we want 20px padding on the top only at 12 columns wide:

rg-pt4at12

Lets break it down:

  • pt - Padding top
  • 4 - 4th largest size (20px)
  • at12 - Only at 12 columns

Here are some examples of the various sizes you can choose:

  • p - This will apply padding on all sides
  • pt - Padding on the top
  • pr - Padding on the right
  • pb - Padding on the bottom
  • pl - Padding on the left
  • px - Padding on the left and right
  • py - Padding on the top and bottom

You can replace the p in all these examples to use margin instead of padding.

Mobile First

As with the sizing classes, these are mobile first, so you don't need to apply spacing at every breakpoint, just at the lowest point.

For example, if you wanted 20px padding on all sides at every breakpoint, just apply it at 4 columns: rg-p4at4. This will affect every breakpoint above it.

Development & Testing

If you want to work on this project, don't edit the CSS file directly. Edit the Sass files and rebuild the CSS file. To build it you can run this:

component install --dev && make build