HOWTOWRITECLEAN&SCALABLECODE CSSARCHITECTURE .mat.czajka@gmail.com /czajkovsky MateuszCzajka-seniordev@netguru.co
IT’SCSSWITHSUPERPOWERS USEPREPROCESSORS 0.
ANDBECONSISTENTABOUTIT DEFINEASTYLEGUIDE 1.
DEFINEASTYLEGUIDESCSSLINT .pill-box { &__icon{ display: block; border: 1px solid $primary-color; } } .pill-box { &__icon{ display: block; border: 1px solid $primary-color; } } 2 of 5 errors: SpaceBeforeBrace: Opening curly `{` should be preceded by one space, Line 38, Column 8
DEFINEASTYLEGUIDEHOUND + =SCSSLINT
THATYOUNEEDTOSUPPORT DETERMINEBROWSERS 2.
DETERMINEBROWSERSAUTOPREFIXER // in code a { display: flex; } // output a { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display: flex }
INTOSMALLPIECES DIVIDEYOURCODE 3.
ASMANYASITMAKESSENSE USEVARIABLES 4.
USEVARIABLESBASICS // colors $primary-color: #4391d7; // font-sizes $fs-1: 12px; $fs-2: 14px; // font-families $ff-open-sans:$ff-open-sans: 'Open Sans', sans-serif; // font-weights $fw-bold: 700;
USEVARIABLESZINDEXES // view/component .settings-modal { // ... z-index: $z-index-settings-modal; } .avatar-popover { // ... z-index: $z-index-avatar-popover; }
USEVARIABLESZINDEXES // _z-index-variables.scss $z-index-1: 1000; $z-index-2: 2000; // ... $z-index-9: 9000; // ... $z-index-settings-modal:$z-index-settings-modal: $z-index-5; $z-index-avatar-popover: $z-index-6;
ITREALLYHELPSTOKEEPYOURCODEDRY USEMIXINS&EXTENDS 5.
USEMIXINS&EXTENDSMIXINS // Sass .box { @include absolute(top 5px left 10px); @include sizing(100% 50px); } // CSS .box.box { position: absolute; top: 5px; left: 10px; width: 100%; height: 50px; }
USEMIXINS&EXTENDSEXTENDS // Sass %error { background: $error-color; } .error { @extend %error; border-width: 1px; &--important { @extend %error; border-width: 3px; } } // CSS .error, .error--important { background: #f00; } .error { border-width: 1px; } .error--important { border-width: 3px; }
THINKABOUTRETINAUSERS USEVECTORS 6.
BUTUSEITTHESMARTWAY USEAFRAMEWORK 7.
USEAFRAMEWORKSTRUCTURE framework ├── _components.scss ├── _overrides.scss ├── _variables.scss └── overrides └── _framework-overrides-go-here.scss
USEAFRAMEWORKCOMPONENTS // framework/_components.scss // Core CSS @import "bootstrap/scaffolding"; @import "bootstrap/type"; // @import "bootstrap/code"; @import "bootstrap/grid"; // @import "bootstrap/tables";// @import "bootstrap/tables"; @import "bootstrap/forms"; // @import "bootstrap/buttons"; // ...
USEFRAMEWORKVARIABLES // variables from package/GEM $gray-base: #eee !default; $gray-darker: darken($gray-base, 10%) !default; // etc... // framework/_variables.scss (overrides) // $gray-base: #eee !default; $gray-darker:$gray-darker: darken($gray-base, 20%); // etc...
USEAFRAMEWORKOVERRIDES // framework/_overrides.scss // Core CSS // @import "overrides/scaffolding"; // @import "overrides/type"; // @import "overrides/code"; @import "overrides/grid"; // @import "overrides/tables";// @import "overrides/tables"; @import "overrides/forms"; // @import "overrides/buttons"; // ...
STRUCTUREANDORDER THERESULT
THERESULTSTRUCTURE ├── application.scss ├── components │ └── _your-custom-components-go-here.scss ├── views │ └── _your-view-based-styles-go-here.scss ├── framework │ ├──│ ├── _components.scss │ ├── _overrides.scss │ ├── _variables.scss │ └── overrides │ └── _framework-overrides-go-here.scss ├── settings │ ├── _z-index-variables.scss │ ├──│ ├── _breakpoint-variables.scss │ └── _custom-variables.scss └── utilities ├── _functions.scss ├── _mixins.scss ├── _shared.scss └── _typography.scss
THERESULTSTRUCTURE @import 'settings/z-index-variables'; @import 'settings/variables'; @import 'framework/variables'; @import 'framework/components'; @import 'settings/breakpoint-variables'; @import 'utilities/functions'; @import@import 'utilities/mixins'; @import 'utilities/shared'; @import 'utilities/typography'; @import 'framework/overrides'; @import 'components/first-component'; // more components @import 'views/home'; // more views// more views
Q&A THANKYOU .mat.czajka@gmail.com /czajkovsky MateuszCzajka-seniordev@netguru.co

CSS architecture: How To Write Clean & Scalable Code