Maintainable
Extendable
Performant
Review popular methodologies
Practice recognizing patterns
github.com/stubbornella/oocss/wiki
Object Oriented CSS
.btn {
font-family: sans-serif;
font-weight: 700;
font-size: 1em;
text-transform: uppercase;
padding: .5em;
width: 100%;
margin-bottom: 1em;
background-color: grey;
border: 1px solid black;
border-radius: .5em;
}
.headingAlpha {
font-family: sans-serif;
font-weight: 700;
font-size: 1em;
text-transform: uppercase;
}
.btn {
padding: .5em;
}
.btnDefault {
background-color: grey;
border: 1px solid black;
border-radius: .5em;
}
.modalBtn {
width: 100%;
margin-bottom: 1em;
}
#header h3 { font-size: 2em; }
#aside h3 { font-size: 1em; }
.headerAlpha { font-size: 2em; }
.headerBeta { font-size: 1em; }
Only classes, no IDs
No !important
Scalable Modular Architecture for CSS
Base
Layout
Module
State
Theme
Default, single element selectors that will look the same regardless of location.
html { color: black }
input[type=radio] { border: none; }
a { color: blue; }
a:hover { color: red; }
Reusable pieces of a design that are formless and expand to fill the container they're in.
.nav { }
.popup { }
Style changes based on the state of the page or app.
.popup.is-hidden { }
.avatar.is-logged-in { }
Like OOCSS, the "skin" is kept seperate, including typography rules.
Block
Element
Modifier
.block-name--element-name__modifier-name
It doesn't matter what your separators are, it matters that your separators are consistent.
A reusable piece of the design
(e.g. a popup, form, or gallery)
Synonymous with "module" or "component"
A part of a block.
(e.g. an in put in a form, a list item in a list)
SMACSS: .module-part
BEM: .block--element
Example:
<ul class="list">
<li class="list--list-item"></li>
</ul>
A property that changes appearance or behavior
OOCSS: .btnAlert
SMACSS: .btn-alert
BEM: .btn__alert
<button class="button button__alert">Delete</button>
Sass, Less, and Stylus all support the concatenation of "partials".
.sass: @import buttons
.scss: @import "buttons";
.less: @import (less) "buttons";
.styl: @import buttons
stylesheets/
|
|-- modules/ # Common modules
| |-- _all.scss # Include to get all modules
| |-- _utility.scss # Module name
| |-- _colors.scss # Etc...
| ...
|
|-- partials/ # Partials
| |-- _base.sass # imports for all mixins + global project variables
| |-- _buttons.scss # buttons
| |-- _figures.scss # figures
| |-- _grids.scss # grids
| |-- _typography.scss # typography
| |-- _reset.scss # reset
| ...
|
|-- vendor/ # CSS or Sass from other projects
| |-- _colorpicker.scss
| |-- _jquery.ui.core.scss
| ...
|
`-- main.scss # primary Sass file
Make up your own partial structure.