Baseguide is a lightweight and robust CSS framework for prototyping and production code. It combines all essential components in a customizable and easy to use package.
Features
- Flexible and extendable breakpoint system
- Dynamic flexbox grid system with float fallback
- CSS-only custom form controls
- Consistent vertical rhythm and modular scale
- Responsive and scalable components
Getting started
Install with npm
npm install baseguide
Clone with git
git clone https://github.com/slavanga/baseguide
Download
Download the latest release
Setup
Default variables can be changed before importing Baseguide. Take a look at the _settings.scss file to get an overview of all variables.
$button-bg: #bada55;
@import 'baseguide';
The included gulpfile takes care of compiling, optimizing and minifying your assets. Running the following command will install all dependencies and start a local server using browsersync.
npm install && gulp
Grid
The grid framework is based on the Bootstrap grid system.
Breakpoints
Breakpoints can easily be configured using the $mq-breakpoints
map. Note that the breakpoints have to be sorted from small to large.
The default configuration looks like this:
$mq-breakpoints: (
xs: 480px,
sm: 768px,
md: 992px,
lg: 1200px
);
Baseguide generates all the necessary grid and responsive visibility classes based on these breakpoints.
Media Queries
Media Queries are handled by Sass MQ.
@include mq(md) {
}
The snippet above compiles to the following CSS:
@media (min-width: 62em) {
}
Check out the Sass MQ documentation for more details and advanced usage of media queries.
Legacy support
To support browsers without native media query support you could use respond.js.
A static solution without Javascript is possible by setting $mq-responsive
to false
. The code below generates an additional stylesheet where only styles in large (lg) media queries are included.
$mq-responsive: false;
$mq-static-breakpoint: lg;
@import 'main';
Include the generated CSS file after the rest of your styles to serve a fixed width layout to legacy browsers.
Gutters
The gutters are controlled by the $grid-gutter
variable. It can either be a global value across all breakpoints or a map with gutter values per breakpoint.
$grid-gutter: 60px;
$grid-gutter: (
xs: 20px,
md: 40px
);
Accessing gutter values is easy using the get-gutter
function. The smallest gutter gets returned by default.
.col {
margin-bottom: get-gutter();
@include mq(md) {
margin-bottom: get-gutter(md);
}
}
Semantic / hybrid grid
The grid mixins can be used to create custom containers, rows and columns.
@include container($gutter, $width);
@include row($gutter);
@include column-base($gutter);
@include column($size, $columns);
@include column-push($size, $columns);
@include column-pull($size, $columns);
@include column-offset($size, $columns);
@include column-block($columns);
Tip: You can turn off the default columns output by setting $grid-columns-output
to false
.
Simple two column layout
@include mq(sm) {
.col-content {
@include column(8);
}
.col-sidebar {
@include column(4);
}
}
<div class="container">
<div class="row">
<article class="col col-content">Main Content</article>
<aside class="col col-sidebar">Sidebar</aside>
</div>
</div>
Gallery layout using block grid
.col-gallery {
@include column-base;
@include column-block(3);
@include mq(md) {
@include column-block(6);
}
}
<div class="container">
<div class="row">
<div class="col-gallery">Gallery item</div>
<div class="col-gallery">Gallery item</div>
<div class="col-gallery">Gallery item</div>
<div class="col-gallery">Gallery item</div>
<div class="col-gallery">Gallery item</div>
<div class="col-gallery">Gallery item</div>
</div>
</div>
Flexbox
The flexbox grid can be activated by setting $grid-flexbox
to true
. This is no kill switch for older browsers as the floats are kept in place for a basic fallback. Browsers that support flexbox and flex-wrap (Support table) will get these benefits:
- CSS-only equal height columns
- Easy vertical and horizontal alignment of columns
- Ordering and reversing of columns using CSS
Forms
Standard form controls
All form controls listed in $input-selector
get styled by default. The variable can be changed to a custom selector like .form-control
. This will allow you to selectively style form controls based on that selector.
Remember to reset the height of textareas if you choose a custom selector:
textarea.form-control {
height: auto;
}
Custom form controls
The custom forms component was designed with progressive enhancement in mind.
While the controls are functional in all browsers the following ones get the fully enhanced experience:
- Android 2.3+
- Chrome
- Firefox 35+
- IE 10+
- Mobile Safari 4+
- Safari 5.1+
- Opera 15+
You can set the variable $use-custom-forms
to false
to disable custom form styles in all browsers.
Caveats
In iOS versions prior to 5.1.1 the code below is required to make custom radio buttons and checkboxes work.
if (document.addEventListener) {
document.addEventListener('click', function() {}, false);
}
Browser support
- Latest stable: Chrome, Firefox, Opera
- IE 8+
- Safari 6+
- Mobile Safari 6+
- Android Browser 2.3+
Inspired By…