Shoelace.css: A Back to the Basics CSS Starter Kit

By  on  

CSS frameworks such as Bootstrap and Semantic UI have become an essential part of web design. They provide the necessary resets, default styles, and components that save us hours and hours of work.

Most CSS frameworks are built using preprocessors such as Less or Sass, which is great, except when folks include the entire library like this:

<!-- Bootstrap 4 - 192KB -->
<link rel="stylesheet" href="bootstrap.min.css">

Or this:

<!-- Semantic UI 2.2 - 567KB --> 
<link rel="stylesheet" href="semantic.min.css">

Note the file sizes for the minified versions. And that doesn't even include scripts.

There are a couple problems here:

One, you don't need most of the things frameworks ship with. They weren't designed for you to use the bundled version, except perhaps for building a really quick prototype.

Two, when you use the bundled version you lose what makes preprocessors so great, such as customizing everything with variables. For example, in Bootstrap 4 you'll need to update at least 30 styles just to change the primary color globally. Fail!

Of course, the reason most people load everything is because it's easier. You don't have to worry about Less, Sass, Stylus, or setting up a build script.

What if you could have the best of both worlds?

Introducing Shoelace.css

I created Shoelace.css to solve this very problem. It's a highly customizable, pure CSS starter kit that weighs in at only 31KB minified (7.9KB gzipped). You can load it locally or via CDN, yet still customize everything with variables. And it's completely free.

Shoelace uses a well-supported feature of CSS called Custom Properties. Many people like to call them "CSS variables." Either way, they're incredibly useful.

You define custom properties in your stylesheet like this:

:root {
  --body-color: #000;
  --body-bg-color: #fff;
  --link-color: blue;

And then use them later on like this:

body {
  color: var(--body-color);
  background-color: var(--body-bg-color);  

a {
  color: var(--link-color);  

The nice thing about custom properties is that they cascade, so you can override them as needed. To customize Shoelace, just override a few variables and you're done. No preprocessing required!

Check out this demo on CodePen to see Shoelace in action. You can change the variables and watch components update right in the browser.

No magic. Just CSS.

What's in the Box

I like to think of Shoelace as a CSS reset sprinkled with helpful components. It doesn't do quite as much as a full blown framework, but that's intentional. It ships with the essentials because that's usually all you really need. Of course, you can extend Shoelace with your own components as needed.

Here's what you get out of the box:

  • CSS Reset
  • Default Content Styles
  • Alerts
  • Badges
  • Buttons
  • Forms
  • Loaders
  • Tabs
  • Tables
  • Text Utilities
  • Float Utilities
  • Sizing Utilities
  • Spacing Utilities

One thing that Shoelace doesn't ship with is a grid system. This is also intentional, as support for the CSS Grid has improved significantly and you really don't need one anymore. If you haven't explored the CSS Grid yet, Rachel Andrew has created Grid By Example to bring you up to speed.

If you have an obligation to support older browsers, you're encouraged to include your favorite grid system on top of Shoelace.

The Future of CSS frameworks

I don't like to call Shoelace a framework. It's more of a "CSS starter kit" that lets you build things without the overhead preprocessors require. The fact that you can <link> to it with one line and immediately have access to a fully customizable CSS boilerplate is incredible.

I think Shoelace is the future of CSS frameworks. Preprocessors still have a place in the world of web design, and they will at least until color modifiers and custom media queries land, but CSS is catching up fast — and Shoelace is taking full advantage of it.

Shoelace was created by @claviska. You can learn more about this project by visiting

Cory LaViska

About Cory LaViska

Cory LaViska is the founder of A Beautiful Site, LLC, a small development studio in New Hampshire. He’s responsible for Shoelace and Surreal CMS, as well as a handful of open source projects on GitHub.

Recent Features

  • By
    Page Visibility API

    One event that's always been lacking within the document is a signal for when the user is looking at a given tab, or another tab. When does the user switch off our site to look at something else? When do they come back?

  • By
    5 HTML5 APIs You Didn&#8217;t Know Existed

    When you say or read "HTML5", you half expect exotic dancers and unicorns to walk into the room to the tune of "I'm Sexy and I Know It."  Can you blame us though?  We watched the fundamental APIs stagnate for so long that a basic feature...

Incredible Demos

  • By
    MooTools ASCII Art

    I didn't realize that I truly was a nerd until I could admit to myself that ASCII art was better than the pieces Picasso, Monet, or Van Gogh could create.  ASCII art is unmatched in its beauty, simplicity, and ... OK, well, I'm being ridiculous;  ASCII...

  • By
    Create a Sexy Persistent Header with Opacity Using MooTools or jQuery

    I've been working with the Magento eCommerce solution a lot lately and I've taken a liking to a technique they use with the top bar within their administrative control panel. When the user scrolls below a specified threshold, the top bar becomes attached to the...


  1. Just a heads up that Shoelace is on Twitter as of yesterday. Follow for updates and more info:

  2. Hi, why don’t you use partials of bootstrap? e.g. you can just import grid in order to use just grids of bootstrap.

  3. I’ve done that in other projects, but then you have to setup a preprocessor, strip everything out, and finally apply your customizations. With Shoelace, you just link it and start building. That and it’s much more lightweight (~31KB compared to ~192KB minified).

    I’ve been waiting for BS4 to move into beta for two years, but the reality is there are so many extra things in it now that I end up spending more time stripping/customizing things I don’t need.

    As far as grids, the argument for them is becoming less and less relevant with CSS Grid. You can include one if you need it, but unless I have a specific requirement to support older browsers, I prefer to move forward :)

  4. It wont support MS EDGE :s (v 38.14393.0.0)

  5. Edge supports CSS variables since version 15, with a couple known bugs ( and support is improving constantly. Shoelace will only get more relevant as support continues to improve :)

  6. This is great- love how lightweight it is.

    Any plans to use flex? Seems like there’s not a lot of concern for older browsers anyway.

Wrap your code in <pre class="{language}"></pre> tags, link to a GitHub gist, JSFiddle fiddle, or CodePen pen to embed!