DEV Community

Cover image for CSS Grid or CSS framework - are they really exclusive?
neoan
neoan

Posted on • Originally published at blua.blue

CSS Grid or CSS framework - are they really exclusive?

If you search for a CSS Grid-based framework, you are out of luck...

Instead, you will find articles centering around the question of when to use one over the other. But why? In order to understand that, let's look a little into history: In a few days twitter bootstrap will celebrate its 7th birthday. From the very first version on, the CSS framework quickly became the most influential candidate when choosing to design web-layouts. At that time the word responsive was coined and everybody wanted to get in on it. However, browsers weren't really up to par with the growing mobile usage. How did bootstrap do it? In version 1: not at all. In version 2: With float! This meant "hacking" custom margins into first and last children and clearing using the pseudo-class after on the level of the parent. And breakpoints: how about one single breakpoint?

It was solid and browser compatible at the time, but it seems to have set a particular markup in stone: the "row" is a necessary container, the elements themselves decide their size/behavior:

<p>Bootstrap 2.0</p>
<div class="row">
   <div class="span6">col 1</div>
   <div class="span6">col 2</div>
</div>
Enter fullscreen mode Exit fullscreen mode

With version 3 declarative breakpoints entered, making it possible to define behavior for various screen sizes:

<p>Bootstrap 3.3</p>
<div class="row">
   <div class="col-xs-12 col-md-8">col 1</div>
   <div class="col-xs-6 col-md-4">col 2</div>
</div>
Enter fullscreen mode Exit fullscreen mode

This form of markup never changed. The CSS world has moved to flexbox and more breakpoints dictate more capabilities, but all frameworks you will find will likely use similar markup, creating HTML like this:

<div class="row">
   <div class="col-xs-12 col-md-6 col-lg-4">col 1</div>
   <div class="col-xs-12 col-md-6 col-lg-4">col 2</div>
   <div class="col-xs-12 col-md-12 col-lg-4">col 3</div>
</div>
Enter fullscreen mode Exit fullscreen mode

And we all think that's normal and are used to fighting with our HTML on multiple class-declarations when making changes to our column-behavior.

Enter CSS grid

With modern capabilities, one would think meanwhile a couple of revolutions would have occurred. But no, we still write grids like that. CSS grid works way easier than that. So easy, that people seem to either supplement frameworks with native CSS grid or avoid CSS frameworks all together. However, aren't there way too many things in modern CSS frameworks you wouldn't want to live without? Why aren't there any frameworks built around this concept?

Revelation 1: Tailwindcss

Tailwind

If you haven't heard of tailwind, you are behind. The concept has such an impact on the way we design the web, many of the utility class concepts are now part of popular other frameworks. And if you understand how to use tailwind, it is already 80 % of what we want to talk about today: a framework-builder rather than a framework. Why? Because utilizing plugins and preprocessors the right way let you build whatever you need. So combining tailwind with CSS-grid and using your own compositions (in tailwind referred to as base styles) should do the trick? Kinda. The problem is more from a practical perspective: Plugins, Webpack, postCSS, and additional markup is a lot of work for starting a project while using it "out-of-the-box" a rather tedious task due to the amount of classes you write. It's still the coolest thing out there, but unfortunately not approachable for the casual user or beginner.

Revelation 2: Gaudiamus-css

Gaudiamus-css

The concept of Gaudiamus is to expose relevant variables to enable a relatively simple way to modify and even create utility classes. While not as powerful as tailwind, it has two features that stick out:

Grid

We talked about this a couple of paragraphs above: the way we define grid-systems is painful. Integrating CSS-Grid into a framework enables you to convert the "bootstrap-way" of writing this:

<div class="row">
   <div class="col-xs-12 col-md-6 col-lg-4">col 1</div>
   <div class="col-xs-12 col-md-6 col-lg-4">col 2</div>
   <div class="col-xs-12 col-md-6 col-lg-4">col 3</div>
   <div class="col-xs-12 col-md-6 col-lg-4">col 4</div>
</div>
Enter fullscreen mode Exit fullscreen mode

Into this:

<div class="grid-12 md:grid-6-6 lg:grid-4-4-4">
   <div>col 1</div>
   <div>col 2</div>
   <div>col 3</div>
   <div>col 4</div>
</div>
Enter fullscreen mode Exit fullscreen mode

Class constructor

Secondly, it is very simple to create your own CSS with the use of provided sass-maps. You want a particular color to be named "danger" and generate utilities for it? No problem, setting to variables will generate classes like

  • text-danger (color)
  • bg-danger (background color)
  • b-danger (border)
  • hover:raise-1-danger (on hover, provide "danger"-colored dropshadow with a depth of one spacing-unit)
  • ...

In the last step, we can create compositions based on regular SASS:

.btn {
   @extend .b-1, .b-rounded, .p-x-2, .p-y-1;
}
.btn-danger{
   @extend .btn, .text-white, .bg-danger;
}
// you can also use the generate-classes mixin to generate 
// all variations of all colors & states, but let's keep it simple here
Enter fullscreen mode Exit fullscreen mode

The result is easy to use and requires only basic knowledge of SASS (here scss to be precise). Check it out!

Top comments (4)

Collapse
 
andrewbaisden profile image
Andrew Baisden

Good read. When I create projects these days I either use pure CSS (Grid and Flex box). Or I use Tailwind or Bootstrap.

Collapse
 
sroehrl profile image
neoan

Yes, I guess that's true for most of us. In this post, I centered around the question of why combinations of CSS Grid and CSS frameworks are basically non-existent. Do you have any ideas why?

Collapse
 
andrewbaisden profile image
Andrew Baisden

You mean a CSS framework that uses CSS Grid? Probably because it's so easy to create a responsive website using pure CSS with CSS Grid there is no need to make a framework for it. You can do it in a few lines of code it would be redundant to build a huge library with classes to replicate such easy logic.

Thread Thread
 
sroehrl profile image
neoan

Well, sure. But there is so much more to design than a responsive grid, isn't there? So you would at least expect a CSS framework shipping without flexbox convolution in order to embrace CSS Grid. I mean, not using flexbox doesn't mean I have no use for designed forms, for example. And don't get me wrong: most people answer like you do. I am just wondering why that is.