SlideShare a Scribd company logo
Scalable front-end architecture
with Bootstrap 3 + Atomic CSS
Let’s do some intros
I’m dying to meet you, kindred spirits :)
Hayden Bleasel
Product Designer, Full-Stack
Developer, Entrepreneur.
Head of Product at Spaceship.
@haydenbleasel on the internet.
Nice to meet you.
Quick Question
How many of you know what Bootstrap is?
Quick Question
How many of you know what Atomic CSS is?
The Front-End
• Web development on the client’s side. Everything
the user sees, clicks, smiles at or gets aggravated
by. Kinda extremely important when making a site.
• Used to just refer to HTML, CSS and a little bit of JS
but since the Javascript Uprising™ it can also refer
to building the entirety of your website (database
infrastructure and everything) on the user’s
computer.
• But that’s for a whole other discussion…
What is Bootstrap and why do I care?
Kind of a big question and a bit of a history lesson.
So what is Bootstrap?
• Bootstrap was a hack-week project between two homies at Twitter
that spawned a community of 9 maintainers and 839 contributors.
• It was the idea that we could create a “skeleton framework” that
every website on the web used. They’re on 3.4% right now
(approximately 12,773,795 websites).
• It’s the most starred repo on Github.
• 15,801 commits, 49,318 forks, 107,745 stars.
• Pretty impressive for a slab of CSS and JS.
• Bootstrap 4 is in alpha now.
WTF is Bootstrap tho?
• It’s around 10,000 lines of CSS and JavaScript that you can
include in your website with two lines of code.
• You copy markup (HTML) from their documentation and it
renders some pretty boilerplate elements.
• It styles elements like forms, buttons and tables.
• It adds CSS components like navbars, badges, labels and
button groups.
• It adds JS components like tooltips, modals, dropdowns
and popovers.
What does Bootstrap contain?
• Default styling for HTML elements
• A whole heap of CSS & JS components
• A flexible 12-column grid system
• Bugs, occasionally
Installing is pretty easy…
# Install with BootstrapCDN:
https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css

https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js
# Install with Bower:
bower install bootstrap —save
# Install with NPM:
npm install bootstrap —save
# Install with NPM:
yarn add bootstrap
# Or just download the files from the website like a pleb
Markup is also pretty easy…
<button type=“button" class=“btn btn-default”>
This is a button
</button>
… sometimes
<nav class="navbar navbar-default">
<div class="container-fluid">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="#">Brand</a>
</div>
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<ul class="nav navbar-nav">
<li class="active"><a href="#">Link <span class="sr-only">(current)</span></a></li>
<li><a href="#">Link</a></li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Dropdown <span class="caret"></span></a>
<ul class="dropdown-menu">
<li><a href="#">Action</a></li>
<li><a href="#">Another action</a></li>
<li><a href="#">Something else here</a></li>
<li role="separator" class="divider"></li>
<li><a href="#">Separated link</a></li>
<li role="separator" class="divider"></li>
<li><a href="#">One more separated link</a></li>
</ul>
</li>
The point is, it’d be a lot
more work to build these
things from scratch.
Just because you’re using
Bootstrap, doesn’t mean it
has to look like Twitter.
The CSS overwrites are purely up to you. Bootstrap is
meant as a boilerplate, not a solution.
Why do we use Bootstrap?
• Startups use Bootstrap to build their entire MVP.
• Small companies build on Bootstrap to create an
intuitive user experience with backbone.
• Big companies use it because their dev team sucks
and they don’t understand how to build custom
interfaces at scale.
• We’re currently moving off it at Spaceship.
I thought you said it was good!
• It is good. It’s good for you, for startups, for MVPs.
• When you scale though, you need to focus on things
like performance, minification, product design etc.
• Only using 500 of the 10,000 lines of Bootstrap in
your production app isn’t efficient.
• Many growing startups like Spaceship have to move
off Bootstrap eventually. It’s like a kickstarter.
Are there any alternatives?
• There’s Foundation by Zurb. 25,000 stars, probably
the biggest Bootstrap rival.
• http://foundation.zurb.com/
• There’s also Bulma. It’s designed to rival Bootstrap
4, simpler but less thought-out. Based on flexbox
which is great.
• http://bulma.io/
That’s enough about Bootstrap
In lieu of a good segue to “how to write good CSS”. Don’t
worry, I’ll show the connection when we get near the end.
How should I write my CSS?
• This is a huge discussion that’s still going on the internet.
• The TL;DR is that we need a way to write stylesheets
that are incredibly modular like Bootstrap, where you
can take any component and smash it together with
another and it’ll look good.
• Easier said than done - you have to take every use case
into account AND THEN THERE’S IE and this is what
being a real front-end developer is all about — dealing
with other people’s shit code.
Atomic CSS
• The idea that we should write components that
“grow in size”. Atomic refers to a series of sizes:
atoms, molecules, organisms, etc.
• Aggregated atoms create molecules, aggregated
molecules create organisms, etc.
• This is much easier to explain with images TBH:
Atomic CSS: Atoms
Buttons and inputs. Can’t get much easier than this.
Button Button Button Button Button
Button
Button
Button
Button
Button
Button
Button
Button
Button
Button
Button
Button
Button
Button
Button
Button
Button
Button
Button
Johny Boo
Johny Boo
Johny Boo
Full name
Remember me
Atomic CSS: Molecules
We can combine these things to make a form.
Login
Email
Password
Control Panel
Remember me
Atomic CSS: Organisms
We can combine forms to
create a Settings Page.
Business Contacts
+38 (066) 875 67 97
Phone
ok
alex.robby
Skype
ok
seo@apple.com
Business email
To Moderate
2 fields selected Mark as OK Mark as Violation Mark all as OK
Experience
Select fields to update status
Senior Engineer
Position
ok
Tesla Motors
Company
ok
October
Working from
ok2011 December
Working to Current time
2012
The project folder
my_project_folder/
— styles/
— scripts/
— index.html
— favicon.ico
The styles folder
my_project_folder/styles/
— atoms
— molecules
— organisms
The styles/atoms folder
my_project_folder/styles/atoms
— button.css
— input.css
— table.css
— typography.css
The styles/molecules folder
my_project_folder/styles/molecules
— navbar.css
— badge.css
— label.css
— alert.css
The styles/organisms folder
my_project_folder/styles/organisms
— home.css
— about.css
— work.css
— contact.css
Bootstrap + Atomic CSS
• Everyone’s going to have their own opinion on how
to architect CSS. I find the Atomic structure works
for me from a speed and scalability perspective.
• Now let’s start overwriting Boostrap using the
“atomic-overwrite method”. Basically just set up
files that reflect Bootstrap’s different components
and build on it.
• Let’s see what it might look like…
Bootstrap Buttons
project/styles/atoms/button.css
/* Base */
.button { … }
/* Variations */
.button.default { … }

.button.primary { … }

.button.error { … }
/* States */
.button:hover { … }

.button:focus { … }
Bootstrap Inputs
project/styles/atoms/input.css
/* Base */
input.form-control { … }
/* Modifiers */
input.form-control[required] { … }

input.form-control[name=“email”] { … }

input.form-control[type=“password”] { … }

input.form-control[disabled] { … }

input.form-control:valid { … }
You should use LESS or Sass
• Don’t want to get into it in this talk, but you should
absolutely consider LESS when writing CSS
• It’s a preprocessor. You write fancy CSS (LESS) and
it converts it to CSS when you compile it.
• It will significantly cut down your code and make
writing modules and overwrites ridiculously easy.
• Here’s a quick example:
LESS / Sass vs CSS
/* CSS */
.button { … }
.button.default { … }

.button.primary { … }

.button.error { … }
.button:hover { … }

.button:focus { … }
/* LESS / Sass */
.button {

…

&.default { … }

&.primary { … }

&.error { … }

&:hover { … }

&:focus { … }

}
One last thing: Linting CSS
• My absolute favourite part of this topic on code quality.
Linters are absolutely amazing and indispensable. They
check your code as you’re writing it. They literally enforce
your style on everyone else.
• Some languages, like Javascript, have lots of linters to
choose from: JSLint, ESLint, JSHint, etc. All of these can be
configured, but the default options and extensibility varies.
• Get them on most text editors - Atom, Brackets, Sublime…
• For CSS, we can use CSSLint.
Realtime syntax checking
Some things to check out
• http://www.getbootstrap.com/
• http://bulma.io/
• http://patternlab.io/
• http://expo.getbootstrap.com/
• https://land-book.com/
• https://dribbble.com/
• https://github.com/JohnONolan/Styled
spaceship.com.au/launch
Interested in Spaceship?
Skip the waitlist:
Ad

More Related Content

What's hot (20)

Untangling7
Untangling7Untangling7
Untangling7
Derek Jacoby
 
Responsive Web Design: Clever Tips and Techniques
Responsive Web Design: Clever Tips and TechniquesResponsive Web Design: Clever Tips and Techniques
Responsive Web Design: Clever Tips and Techniques
Vitaly Friedman
 
Untangling spring week2
Untangling spring week2Untangling spring week2
Untangling spring week2
Derek Jacoby
 
Advanced Web Development
Advanced Web DevelopmentAdvanced Web Development
Advanced Web Development
Robert J. Stein
 
Untangling spring week6
Untangling spring week6Untangling spring week6
Untangling spring week6
Derek Jacoby
 
Untangling6
Untangling6Untangling6
Untangling6
Derek Jacoby
 
Untangling the web week 2 - SEO
Untangling the web week 2 - SEOUntangling the web week 2 - SEO
Untangling the web week 2 - SEO
Derek Jacoby
 
Behat - Drupal South 2018
Behat  - Drupal South 2018Behat  - Drupal South 2018
Behat - Drupal South 2018
Berend de Boer
 
Ember Conf 2016: Building Mobile Apps with Ember
Ember Conf 2016: Building Mobile Apps with EmberEmber Conf 2016: Building Mobile Apps with Ember
Ember Conf 2016: Building Mobile Apps with Ember
Alex Blom
 
Dreamweaver CS6, jQuery, PhoneGap, mobile design
Dreamweaver CS6, jQuery, PhoneGap, mobile designDreamweaver CS6, jQuery, PhoneGap, mobile design
Dreamweaver CS6, jQuery, PhoneGap, mobile design
Dee Sadler
 
Cutting the Fat
Cutting the FatCutting the Fat
Cutting the Fat
Codemotion
 
Road to Rails
Road to RailsRoad to Rails
Road to Rails
paoloperrotta
 
JSLink for ITPros - SharePoint Saturday Jersey
JSLink for ITPros - SharePoint Saturday JerseyJSLink for ITPros - SharePoint Saturday Jersey
JSLink for ITPros - SharePoint Saturday Jersey
Paul Hunt
 
Introduction to html 5
Introduction to html 5Introduction to html 5
Introduction to html 5
Nir Elbaz
 
Snappy Means Happy: Performance in Ember Apps
Snappy Means Happy: Performance in Ember AppsSnappy Means Happy: Performance in Ember Apps
Snappy Means Happy: Performance in Ember Apps
Matthew Beale
 
Unobtrusive JavaScript
Unobtrusive JavaScriptUnobtrusive JavaScript
Unobtrusive JavaScript
daveverwer
 
Phonegap Day 2016: Ember/JS & Hybrid Apps Tips
Phonegap Day 2016: Ember/JS & Hybrid Apps TipsPhonegap Day 2016: Ember/JS & Hybrid Apps Tips
Phonegap Day 2016: Ember/JS & Hybrid Apps Tips
Alex Blom
 
Ember At Scale
Ember At ScaleEmber At Scale
Ember At Scale
Chad Hietala
 
Bootstrap and XPages (DanNotes 2013)
Bootstrap and XPages (DanNotes 2013)Bootstrap and XPages (DanNotes 2013)
Bootstrap and XPages (DanNotes 2013)
Mark Leusink
 
Html5 Fit: Get Rid of Love Handles
Html5 Fit:  Get Rid of Love HandlesHtml5 Fit:  Get Rid of Love Handles
Html5 Fit: Get Rid of Love Handles
Chris Love
 
Responsive Web Design: Clever Tips and Techniques
Responsive Web Design: Clever Tips and TechniquesResponsive Web Design: Clever Tips and Techniques
Responsive Web Design: Clever Tips and Techniques
Vitaly Friedman
 
Untangling spring week2
Untangling spring week2Untangling spring week2
Untangling spring week2
Derek Jacoby
 
Advanced Web Development
Advanced Web DevelopmentAdvanced Web Development
Advanced Web Development
Robert J. Stein
 
Untangling spring week6
Untangling spring week6Untangling spring week6
Untangling spring week6
Derek Jacoby
 
Untangling the web week 2 - SEO
Untangling the web week 2 - SEOUntangling the web week 2 - SEO
Untangling the web week 2 - SEO
Derek Jacoby
 
Behat - Drupal South 2018
Behat  - Drupal South 2018Behat  - Drupal South 2018
Behat - Drupal South 2018
Berend de Boer
 
Ember Conf 2016: Building Mobile Apps with Ember
Ember Conf 2016: Building Mobile Apps with EmberEmber Conf 2016: Building Mobile Apps with Ember
Ember Conf 2016: Building Mobile Apps with Ember
Alex Blom
 
Dreamweaver CS6, jQuery, PhoneGap, mobile design
Dreamweaver CS6, jQuery, PhoneGap, mobile designDreamweaver CS6, jQuery, PhoneGap, mobile design
Dreamweaver CS6, jQuery, PhoneGap, mobile design
Dee Sadler
 
Cutting the Fat
Cutting the FatCutting the Fat
Cutting the Fat
Codemotion
 
JSLink for ITPros - SharePoint Saturday Jersey
JSLink for ITPros - SharePoint Saturday JerseyJSLink for ITPros - SharePoint Saturday Jersey
JSLink for ITPros - SharePoint Saturday Jersey
Paul Hunt
 
Introduction to html 5
Introduction to html 5Introduction to html 5
Introduction to html 5
Nir Elbaz
 
Snappy Means Happy: Performance in Ember Apps
Snappy Means Happy: Performance in Ember AppsSnappy Means Happy: Performance in Ember Apps
Snappy Means Happy: Performance in Ember Apps
Matthew Beale
 
Unobtrusive JavaScript
Unobtrusive JavaScriptUnobtrusive JavaScript
Unobtrusive JavaScript
daveverwer
 
Phonegap Day 2016: Ember/JS & Hybrid Apps Tips
Phonegap Day 2016: Ember/JS & Hybrid Apps TipsPhonegap Day 2016: Ember/JS & Hybrid Apps Tips
Phonegap Day 2016: Ember/JS & Hybrid Apps Tips
Alex Blom
 
Bootstrap and XPages (DanNotes 2013)
Bootstrap and XPages (DanNotes 2013)Bootstrap and XPages (DanNotes 2013)
Bootstrap and XPages (DanNotes 2013)
Mark Leusink
 
Html5 Fit: Get Rid of Love Handles
Html5 Fit:  Get Rid of Love HandlesHtml5 Fit:  Get Rid of Love Handles
Html5 Fit: Get Rid of Love Handles
Chris Love
 

Similar to Scalable front-end architecture with Bootstrap 3 + Atomic CSS (20)

Intro To Twitter Bootstrap
Intro To Twitter BootstrapIntro To Twitter Bootstrap
Intro To Twitter Bootstrap
Ahmed Haque
 
Code & Design Your First Website (Downtown Los Angeles)
Code & Design Your First Website (Downtown Los Angeles)Code & Design Your First Website (Downtown Los Angeles)
Code & Design Your First Website (Downtown Los Angeles)
Thinkful
 
Know the reason behind choosing bootstrap as css framework
Know the reason behind choosing bootstrap as css frameworkKnow the reason behind choosing bootstrap as css framework
Know the reason behind choosing bootstrap as css framework
Omkarsoft Bangalore
 
Bootstrap for Beginners
Bootstrap for BeginnersBootstrap for Beginners
Bootstrap for Beginners
D'arce Hess
 
Introduction to Bootstrap: Design for Developers
Introduction to Bootstrap: Design for DevelopersIntroduction to Bootstrap: Design for Developers
Introduction to Bootstrap: Design for Developers
Melvin John
 
Teams, styles and scalable applications
Teams, styles and scalable applicationsTeams, styles and scalable applications
Teams, styles and scalable applications
Vittorio Vittori
 
Mobile Monday Presentation: Responsive Web Design
Mobile Monday Presentation: Responsive Web DesignMobile Monday Presentation: Responsive Web Design
Mobile Monday Presentation: Responsive Web Design
Cantina
 
Introduction to BOOTSTRAP
Introduction to BOOTSTRAPIntroduction to BOOTSTRAP
Introduction to BOOTSTRAP
Jeanie Arnoco
 
Rapid and Responsive - UX to Prototype with Bootstrap
Rapid and Responsive - UX to Prototype with BootstrapRapid and Responsive - UX to Prototype with Bootstrap
Rapid and Responsive - UX to Prototype with Bootstrap
Josh Jeffryes
 
Twitter bootstrap training_session_ppt
Twitter bootstrap training_session_pptTwitter bootstrap training_session_ppt
Twitter bootstrap training_session_ppt
Radheshyam Kori
 
The Ultimate Guide to Bootstrap for Beginners.pdf
The Ultimate Guide to Bootstrap for Beginners.pdfThe Ultimate Guide to Bootstrap for Beginners.pdf
The Ultimate Guide to Bootstrap for Beginners.pdf
webcooks Digital Academy
 
Html css crash course may 11th, atlanta
Html css crash course may 11th, atlantaHtml css crash course may 11th, atlanta
Html css crash course may 11th, atlanta
Thinkful
 
Reboot-Typography.pptx reboot typography to help you in research
Reboot-Typography.pptx reboot typography to help you in researchReboot-Typography.pptx reboot typography to help you in research
Reboot-Typography.pptx reboot typography to help you in research
AadiChauhan2
 
Responsive Web Design (April 18th, Los Angeles)
Responsive Web Design (April 18th, Los Angeles)Responsive Web Design (April 18th, Los Angeles)
Responsive Web Design (April 18th, Los Angeles)
Thinkful
 
Code &amp; design your first website (3:16)
Code &amp; design your first website (3:16)Code &amp; design your first website (3:16)
Code &amp; design your first website (3:16)
Thinkful
 
Exploring Our Front-End Workflows
Exploring Our Front-End WorkflowsExploring Our Front-End Workflows
Exploring Our Front-End Workflows
nolly00
 
AD105 - OneUI.. really? Is that because you don't know about Twitter Bootstrap?
AD105 - OneUI.. really? Is that because you don't know about Twitter Bootstrap?AD105 - OneUI.. really? Is that because you don't know about Twitter Bootstrap?
AD105 - OneUI.. really? Is that because you don't know about Twitter Bootstrap?
Andrew Barickman
 
Intermediate Web Design.doc
Intermediate Web Design.docIntermediate Web Design.doc
Intermediate Web Design.doc
butest
 
Intermediate Web Design.doc
Intermediate Web Design.docIntermediate Web Design.doc
Intermediate Web Design.doc
butest
 
Architecting with Style
Architecting with StyleArchitecting with Style
Architecting with Style
Timothy Knight
 
Intro To Twitter Bootstrap
Intro To Twitter BootstrapIntro To Twitter Bootstrap
Intro To Twitter Bootstrap
Ahmed Haque
 
Code & Design Your First Website (Downtown Los Angeles)
Code & Design Your First Website (Downtown Los Angeles)Code & Design Your First Website (Downtown Los Angeles)
Code & Design Your First Website (Downtown Los Angeles)
Thinkful
 
Know the reason behind choosing bootstrap as css framework
Know the reason behind choosing bootstrap as css frameworkKnow the reason behind choosing bootstrap as css framework
Know the reason behind choosing bootstrap as css framework
Omkarsoft Bangalore
 
Bootstrap for Beginners
Bootstrap for BeginnersBootstrap for Beginners
Bootstrap for Beginners
D'arce Hess
 
Introduction to Bootstrap: Design for Developers
Introduction to Bootstrap: Design for DevelopersIntroduction to Bootstrap: Design for Developers
Introduction to Bootstrap: Design for Developers
Melvin John
 
Teams, styles and scalable applications
Teams, styles and scalable applicationsTeams, styles and scalable applications
Teams, styles and scalable applications
Vittorio Vittori
 
Mobile Monday Presentation: Responsive Web Design
Mobile Monday Presentation: Responsive Web DesignMobile Monday Presentation: Responsive Web Design
Mobile Monday Presentation: Responsive Web Design
Cantina
 
Introduction to BOOTSTRAP
Introduction to BOOTSTRAPIntroduction to BOOTSTRAP
Introduction to BOOTSTRAP
Jeanie Arnoco
 
Rapid and Responsive - UX to Prototype with Bootstrap
Rapid and Responsive - UX to Prototype with BootstrapRapid and Responsive - UX to Prototype with Bootstrap
Rapid and Responsive - UX to Prototype with Bootstrap
Josh Jeffryes
 
Twitter bootstrap training_session_ppt
Twitter bootstrap training_session_pptTwitter bootstrap training_session_ppt
Twitter bootstrap training_session_ppt
Radheshyam Kori
 
The Ultimate Guide to Bootstrap for Beginners.pdf
The Ultimate Guide to Bootstrap for Beginners.pdfThe Ultimate Guide to Bootstrap for Beginners.pdf
The Ultimate Guide to Bootstrap for Beginners.pdf
webcooks Digital Academy
 
Html css crash course may 11th, atlanta
Html css crash course may 11th, atlantaHtml css crash course may 11th, atlanta
Html css crash course may 11th, atlanta
Thinkful
 
Reboot-Typography.pptx reboot typography to help you in research
Reboot-Typography.pptx reboot typography to help you in researchReboot-Typography.pptx reboot typography to help you in research
Reboot-Typography.pptx reboot typography to help you in research
AadiChauhan2
 
Responsive Web Design (April 18th, Los Angeles)
Responsive Web Design (April 18th, Los Angeles)Responsive Web Design (April 18th, Los Angeles)
Responsive Web Design (April 18th, Los Angeles)
Thinkful
 
Code &amp; design your first website (3:16)
Code &amp; design your first website (3:16)Code &amp; design your first website (3:16)
Code &amp; design your first website (3:16)
Thinkful
 
Exploring Our Front-End Workflows
Exploring Our Front-End WorkflowsExploring Our Front-End Workflows
Exploring Our Front-End Workflows
nolly00
 
AD105 - OneUI.. really? Is that because you don't know about Twitter Bootstrap?
AD105 - OneUI.. really? Is that because you don't know about Twitter Bootstrap?AD105 - OneUI.. really? Is that because you don't know about Twitter Bootstrap?
AD105 - OneUI.. really? Is that because you don't know about Twitter Bootstrap?
Andrew Barickman
 
Intermediate Web Design.doc
Intermediate Web Design.docIntermediate Web Design.doc
Intermediate Web Design.doc
butest
 
Intermediate Web Design.doc
Intermediate Web Design.docIntermediate Web Design.doc
Intermediate Web Design.doc
butest
 
Architecting with Style
Architecting with StyleArchitecting with Style
Architecting with Style
Timothy Knight
 
Ad

Recently uploaded (20)

Structural Response of Reinforced Self-Compacting Concrete Deep Beam Using Fi...
Structural Response of Reinforced Self-Compacting Concrete Deep Beam Using Fi...Structural Response of Reinforced Self-Compacting Concrete Deep Beam Using Fi...
Structural Response of Reinforced Self-Compacting Concrete Deep Beam Using Fi...
Journal of Soft Computing in Civil Engineering
 
Machine learning project on employee attrition detection using (2).pptx
Machine learning project on employee attrition detection using (2).pptxMachine learning project on employee attrition detection using (2).pptx
Machine learning project on employee attrition detection using (2).pptx
rajeswari89780
 
Oil-gas_Unconventional oil and gass_reseviours.pdf
Oil-gas_Unconventional oil and gass_reseviours.pdfOil-gas_Unconventional oil and gass_reseviours.pdf
Oil-gas_Unconventional oil and gass_reseviours.pdf
M7md3li2
 
theory-slides-for react for beginners.pptx
theory-slides-for react for beginners.pptxtheory-slides-for react for beginners.pptx
theory-slides-for react for beginners.pptx
sanchezvanessa7896
 
IntroSlides-April-BuildWithAI-VertexAI.pdf
IntroSlides-April-BuildWithAI-VertexAI.pdfIntroSlides-April-BuildWithAI-VertexAI.pdf
IntroSlides-April-BuildWithAI-VertexAI.pdf
Luiz Carneiro
 
lecture5.pptxJHKGJFHDGTFGYIUOIUIPIOIPUOHIYGUYFGIH
lecture5.pptxJHKGJFHDGTFGYIUOIUIPIOIPUOHIYGUYFGIHlecture5.pptxJHKGJFHDGTFGYIUOIUIPIOIPUOHIYGUYFGIH
lecture5.pptxJHKGJFHDGTFGYIUOIUIPIOIPUOHIYGUYFGIH
Abodahab
 
ADVXAI IN MALWARE ANALYSIS FRAMEWORK: BALANCING EXPLAINABILITY WITH SECURITY
ADVXAI IN MALWARE ANALYSIS FRAMEWORK: BALANCING EXPLAINABILITY WITH SECURITYADVXAI IN MALWARE ANALYSIS FRAMEWORK: BALANCING EXPLAINABILITY WITH SECURITY
ADVXAI IN MALWARE ANALYSIS FRAMEWORK: BALANCING EXPLAINABILITY WITH SECURITY
ijscai
 
Main cotrol jdbjbdcnxbjbjzjjjcjicbjxbcjcxbjcxb
Main cotrol jdbjbdcnxbjbjzjjjcjicbjxbcjcxbjcxbMain cotrol jdbjbdcnxbjbjzjjjcjicbjxbcjcxbjcxb
Main cotrol jdbjbdcnxbjbjzjjjcjicbjxbcjcxbjcxb
SunilSingh610661
 
"Feed Water Heaters in Thermal Power Plants: Types, Working, and Efficiency G...
"Feed Water Heaters in Thermal Power Plants: Types, Working, and Efficiency G..."Feed Water Heaters in Thermal Power Plants: Types, Working, and Efficiency G...
"Feed Water Heaters in Thermal Power Plants: Types, Working, and Efficiency G...
Infopitaara
 
DT REPORT by Tech titan GROUP to introduce the subject design Thinking
DT REPORT by Tech titan GROUP to introduce the subject design ThinkingDT REPORT by Tech titan GROUP to introduce the subject design Thinking
DT REPORT by Tech titan GROUP to introduce the subject design Thinking
DhruvChotaliya2
 
How to use nRF24L01 module with Arduino
How to use nRF24L01 module with ArduinoHow to use nRF24L01 module with Arduino
How to use nRF24L01 module with Arduino
CircuitDigest
 
AI-assisted Software Testing (3-hours tutorial)
AI-assisted Software Testing (3-hours tutorial)AI-assisted Software Testing (3-hours tutorial)
AI-assisted Software Testing (3-hours tutorial)
Vəhid Gəruslu
 
Mathematical foundation machine learning.pdf
Mathematical foundation machine learning.pdfMathematical foundation machine learning.pdf
Mathematical foundation machine learning.pdf
TalhaShahid49
 
Introduction to FLUID MECHANICS & KINEMATICS
Introduction to FLUID MECHANICS &  KINEMATICSIntroduction to FLUID MECHANICS &  KINEMATICS
Introduction to FLUID MECHANICS & KINEMATICS
narayanaswamygdas
 
211421893-M-Tech-CIVIL-Structural-Engineering-pdf.pdf
211421893-M-Tech-CIVIL-Structural-Engineering-pdf.pdf211421893-M-Tech-CIVIL-Structural-Engineering-pdf.pdf
211421893-M-Tech-CIVIL-Structural-Engineering-pdf.pdf
inmishra17121973
 
fluke dealers in bangalore..............
fluke dealers in bangalore..............fluke dealers in bangalore..............
fluke dealers in bangalore..............
Haresh Vaswani
 
Smart_Storage_Systems_Production_Engineering.pptx
Smart_Storage_Systems_Production_Engineering.pptxSmart_Storage_Systems_Production_Engineering.pptx
Smart_Storage_Systems_Production_Engineering.pptx
rushikeshnavghare94
 
some basics electrical and electronics knowledge
some basics electrical and electronics knowledgesome basics electrical and electronics knowledge
some basics electrical and electronics knowledge
nguyentrungdo88
 
"Boiler Feed Pump (BFP): Working, Applications, Advantages, and Limitations E...
"Boiler Feed Pump (BFP): Working, Applications, Advantages, and Limitations E..."Boiler Feed Pump (BFP): Working, Applications, Advantages, and Limitations E...
"Boiler Feed Pump (BFP): Working, Applications, Advantages, and Limitations E...
Infopitaara
 
Introduction to Zoomlion Earthmoving.pptx
Introduction to Zoomlion Earthmoving.pptxIntroduction to Zoomlion Earthmoving.pptx
Introduction to Zoomlion Earthmoving.pptx
AS1920
 
Machine learning project on employee attrition detection using (2).pptx
Machine learning project on employee attrition detection using (2).pptxMachine learning project on employee attrition detection using (2).pptx
Machine learning project on employee attrition detection using (2).pptx
rajeswari89780
 
Oil-gas_Unconventional oil and gass_reseviours.pdf
Oil-gas_Unconventional oil and gass_reseviours.pdfOil-gas_Unconventional oil and gass_reseviours.pdf
Oil-gas_Unconventional oil and gass_reseviours.pdf
M7md3li2
 
theory-slides-for react for beginners.pptx
theory-slides-for react for beginners.pptxtheory-slides-for react for beginners.pptx
theory-slides-for react for beginners.pptx
sanchezvanessa7896
 
IntroSlides-April-BuildWithAI-VertexAI.pdf
IntroSlides-April-BuildWithAI-VertexAI.pdfIntroSlides-April-BuildWithAI-VertexAI.pdf
IntroSlides-April-BuildWithAI-VertexAI.pdf
Luiz Carneiro
 
lecture5.pptxJHKGJFHDGTFGYIUOIUIPIOIPUOHIYGUYFGIH
lecture5.pptxJHKGJFHDGTFGYIUOIUIPIOIPUOHIYGUYFGIHlecture5.pptxJHKGJFHDGTFGYIUOIUIPIOIPUOHIYGUYFGIH
lecture5.pptxJHKGJFHDGTFGYIUOIUIPIOIPUOHIYGUYFGIH
Abodahab
 
ADVXAI IN MALWARE ANALYSIS FRAMEWORK: BALANCING EXPLAINABILITY WITH SECURITY
ADVXAI IN MALWARE ANALYSIS FRAMEWORK: BALANCING EXPLAINABILITY WITH SECURITYADVXAI IN MALWARE ANALYSIS FRAMEWORK: BALANCING EXPLAINABILITY WITH SECURITY
ADVXAI IN MALWARE ANALYSIS FRAMEWORK: BALANCING EXPLAINABILITY WITH SECURITY
ijscai
 
Main cotrol jdbjbdcnxbjbjzjjjcjicbjxbcjcxbjcxb
Main cotrol jdbjbdcnxbjbjzjjjcjicbjxbcjcxbjcxbMain cotrol jdbjbdcnxbjbjzjjjcjicbjxbcjcxbjcxb
Main cotrol jdbjbdcnxbjbjzjjjcjicbjxbcjcxbjcxb
SunilSingh610661
 
"Feed Water Heaters in Thermal Power Plants: Types, Working, and Efficiency G...
"Feed Water Heaters in Thermal Power Plants: Types, Working, and Efficiency G..."Feed Water Heaters in Thermal Power Plants: Types, Working, and Efficiency G...
"Feed Water Heaters in Thermal Power Plants: Types, Working, and Efficiency G...
Infopitaara
 
DT REPORT by Tech titan GROUP to introduce the subject design Thinking
DT REPORT by Tech titan GROUP to introduce the subject design ThinkingDT REPORT by Tech titan GROUP to introduce the subject design Thinking
DT REPORT by Tech titan GROUP to introduce the subject design Thinking
DhruvChotaliya2
 
How to use nRF24L01 module with Arduino
How to use nRF24L01 module with ArduinoHow to use nRF24L01 module with Arduino
How to use nRF24L01 module with Arduino
CircuitDigest
 
AI-assisted Software Testing (3-hours tutorial)
AI-assisted Software Testing (3-hours tutorial)AI-assisted Software Testing (3-hours tutorial)
AI-assisted Software Testing (3-hours tutorial)
Vəhid Gəruslu
 
Mathematical foundation machine learning.pdf
Mathematical foundation machine learning.pdfMathematical foundation machine learning.pdf
Mathematical foundation machine learning.pdf
TalhaShahid49
 
Introduction to FLUID MECHANICS & KINEMATICS
Introduction to FLUID MECHANICS &  KINEMATICSIntroduction to FLUID MECHANICS &  KINEMATICS
Introduction to FLUID MECHANICS & KINEMATICS
narayanaswamygdas
 
211421893-M-Tech-CIVIL-Structural-Engineering-pdf.pdf
211421893-M-Tech-CIVIL-Structural-Engineering-pdf.pdf211421893-M-Tech-CIVIL-Structural-Engineering-pdf.pdf
211421893-M-Tech-CIVIL-Structural-Engineering-pdf.pdf
inmishra17121973
 
fluke dealers in bangalore..............
fluke dealers in bangalore..............fluke dealers in bangalore..............
fluke dealers in bangalore..............
Haresh Vaswani
 
Smart_Storage_Systems_Production_Engineering.pptx
Smart_Storage_Systems_Production_Engineering.pptxSmart_Storage_Systems_Production_Engineering.pptx
Smart_Storage_Systems_Production_Engineering.pptx
rushikeshnavghare94
 
some basics electrical and electronics knowledge
some basics electrical and electronics knowledgesome basics electrical and electronics knowledge
some basics electrical and electronics knowledge
nguyentrungdo88
 
"Boiler Feed Pump (BFP): Working, Applications, Advantages, and Limitations E...
"Boiler Feed Pump (BFP): Working, Applications, Advantages, and Limitations E..."Boiler Feed Pump (BFP): Working, Applications, Advantages, and Limitations E...
"Boiler Feed Pump (BFP): Working, Applications, Advantages, and Limitations E...
Infopitaara
 
Introduction to Zoomlion Earthmoving.pptx
Introduction to Zoomlion Earthmoving.pptxIntroduction to Zoomlion Earthmoving.pptx
Introduction to Zoomlion Earthmoving.pptx
AS1920
 
Ad

Scalable front-end architecture with Bootstrap 3 + Atomic CSS

  • 1. Scalable front-end architecture with Bootstrap 3 + Atomic CSS
  • 2. Let’s do some intros I’m dying to meet you, kindred spirits :)
  • 3. Hayden Bleasel Product Designer, Full-Stack Developer, Entrepreneur. Head of Product at Spaceship. @haydenbleasel on the internet. Nice to meet you.
  • 4. Quick Question How many of you know what Bootstrap is?
  • 5. Quick Question How many of you know what Atomic CSS is?
  • 6. The Front-End • Web development on the client’s side. Everything the user sees, clicks, smiles at or gets aggravated by. Kinda extremely important when making a site. • Used to just refer to HTML, CSS and a little bit of JS but since the Javascript Uprising™ it can also refer to building the entirety of your website (database infrastructure and everything) on the user’s computer. • But that’s for a whole other discussion…
  • 7. What is Bootstrap and why do I care? Kind of a big question and a bit of a history lesson.
  • 8. So what is Bootstrap? • Bootstrap was a hack-week project between two homies at Twitter that spawned a community of 9 maintainers and 839 contributors. • It was the idea that we could create a “skeleton framework” that every website on the web used. They’re on 3.4% right now (approximately 12,773,795 websites). • It’s the most starred repo on Github. • 15,801 commits, 49,318 forks, 107,745 stars. • Pretty impressive for a slab of CSS and JS. • Bootstrap 4 is in alpha now.
  • 9. WTF is Bootstrap tho? • It’s around 10,000 lines of CSS and JavaScript that you can include in your website with two lines of code. • You copy markup (HTML) from their documentation and it renders some pretty boilerplate elements. • It styles elements like forms, buttons and tables. • It adds CSS components like navbars, badges, labels and button groups. • It adds JS components like tooltips, modals, dropdowns and popovers.
  • 10. What does Bootstrap contain? • Default styling for HTML elements • A whole heap of CSS & JS components • A flexible 12-column grid system • Bugs, occasionally
  • 11. Installing is pretty easy… # Install with BootstrapCDN: https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css
 https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js # Install with Bower: bower install bootstrap —save # Install with NPM: npm install bootstrap —save # Install with NPM: yarn add bootstrap # Or just download the files from the website like a pleb
  • 12. Markup is also pretty easy… <button type=“button" class=“btn btn-default”> This is a button </button>
  • 13. … sometimes <nav class="navbar navbar-default"> <div class="container-fluid"> <div class="navbar-header"> <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false"> <span class="sr-only">Toggle navigation</span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> <a class="navbar-brand" href="#">Brand</a> </div> <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"> <ul class="nav navbar-nav"> <li class="active"><a href="#">Link <span class="sr-only">(current)</span></a></li> <li><a href="#">Link</a></li> <li class="dropdown"> <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Dropdown <span class="caret"></span></a> <ul class="dropdown-menu"> <li><a href="#">Action</a></li> <li><a href="#">Another action</a></li> <li><a href="#">Something else here</a></li> <li role="separator" class="divider"></li> <li><a href="#">Separated link</a></li> <li role="separator" class="divider"></li> <li><a href="#">One more separated link</a></li> </ul> </li>
  • 14. The point is, it’d be a lot more work to build these things from scratch.
  • 15. Just because you’re using Bootstrap, doesn’t mean it has to look like Twitter. The CSS overwrites are purely up to you. Bootstrap is meant as a boilerplate, not a solution.
  • 16. Why do we use Bootstrap? • Startups use Bootstrap to build their entire MVP. • Small companies build on Bootstrap to create an intuitive user experience with backbone. • Big companies use it because their dev team sucks and they don’t understand how to build custom interfaces at scale. • We’re currently moving off it at Spaceship.
  • 17. I thought you said it was good! • It is good. It’s good for you, for startups, for MVPs. • When you scale though, you need to focus on things like performance, minification, product design etc. • Only using 500 of the 10,000 lines of Bootstrap in your production app isn’t efficient. • Many growing startups like Spaceship have to move off Bootstrap eventually. It’s like a kickstarter.
  • 18. Are there any alternatives? • There’s Foundation by Zurb. 25,000 stars, probably the biggest Bootstrap rival. • http://foundation.zurb.com/ • There’s also Bulma. It’s designed to rival Bootstrap 4, simpler but less thought-out. Based on flexbox which is great. • http://bulma.io/
  • 19. That’s enough about Bootstrap In lieu of a good segue to “how to write good CSS”. Don’t worry, I’ll show the connection when we get near the end.
  • 20. How should I write my CSS? • This is a huge discussion that’s still going on the internet. • The TL;DR is that we need a way to write stylesheets that are incredibly modular like Bootstrap, where you can take any component and smash it together with another and it’ll look good. • Easier said than done - you have to take every use case into account AND THEN THERE’S IE and this is what being a real front-end developer is all about — dealing with other people’s shit code.
  • 21. Atomic CSS • The idea that we should write components that “grow in size”. Atomic refers to a series of sizes: atoms, molecules, organisms, etc. • Aggregated atoms create molecules, aggregated molecules create organisms, etc. • This is much easier to explain with images TBH:
  • 22. Atomic CSS: Atoms Buttons and inputs. Can’t get much easier than this. Button Button Button Button Button Button Button Button Button Button Button Button Button Button Button Button Button Button Button Button Button Button Button Button Johny Boo Johny Boo Johny Boo Full name Remember me
  • 23. Atomic CSS: Molecules We can combine these things to make a form. Login Email Password Control Panel Remember me
  • 24. Atomic CSS: Organisms We can combine forms to create a Settings Page. Business Contacts +38 (066) 875 67 97 Phone ok alex.robby Skype ok [email protected] Business email To Moderate 2 fields selected Mark as OK Mark as Violation Mark all as OK Experience Select fields to update status Senior Engineer Position ok Tesla Motors Company ok October Working from ok2011 December Working to Current time 2012
  • 25. The project folder my_project_folder/ — styles/ — scripts/ — index.html — favicon.ico
  • 26. The styles folder my_project_folder/styles/ — atoms — molecules — organisms
  • 27. The styles/atoms folder my_project_folder/styles/atoms — button.css — input.css — table.css — typography.css
  • 28. The styles/molecules folder my_project_folder/styles/molecules — navbar.css — badge.css — label.css — alert.css
  • 29. The styles/organisms folder my_project_folder/styles/organisms — home.css — about.css — work.css — contact.css
  • 30. Bootstrap + Atomic CSS • Everyone’s going to have their own opinion on how to architect CSS. I find the Atomic structure works for me from a speed and scalability perspective. • Now let’s start overwriting Boostrap using the “atomic-overwrite method”. Basically just set up files that reflect Bootstrap’s different components and build on it. • Let’s see what it might look like…
  • 32. project/styles/atoms/button.css /* Base */ .button { … } /* Variations */ .button.default { … }
 .button.primary { … }
 .button.error { … } /* States */ .button:hover { … }
 .button:focus { … }
  • 34. project/styles/atoms/input.css /* Base */ input.form-control { … } /* Modifiers */ input.form-control[required] { … }
 input.form-control[name=“email”] { … }
 input.form-control[type=“password”] { … }
 input.form-control[disabled] { … }
 input.form-control:valid { … }
  • 35. You should use LESS or Sass • Don’t want to get into it in this talk, but you should absolutely consider LESS when writing CSS • It’s a preprocessor. You write fancy CSS (LESS) and it converts it to CSS when you compile it. • It will significantly cut down your code and make writing modules and overwrites ridiculously easy. • Here’s a quick example:
  • 36. LESS / Sass vs CSS /* CSS */ .button { … } .button.default { … }
 .button.primary { … }
 .button.error { … } .button:hover { … }
 .button:focus { … } /* LESS / Sass */ .button {
 …
 &.default { … }
 &.primary { … }
 &.error { … }
 &:hover { … }
 &:focus { … }
 }
  • 37. One last thing: Linting CSS • My absolute favourite part of this topic on code quality. Linters are absolutely amazing and indispensable. They check your code as you’re writing it. They literally enforce your style on everyone else. • Some languages, like Javascript, have lots of linters to choose from: JSLint, ESLint, JSHint, etc. All of these can be configured, but the default options and extensibility varies. • Get them on most text editors - Atom, Brackets, Sublime… • For CSS, we can use CSSLint.
  • 39. Some things to check out • http://www.getbootstrap.com/ • http://bulma.io/ • http://patternlab.io/ • http://expo.getbootstrap.com/ • https://land-book.com/ • https://dribbble.com/ • https://github.com/JohnONolan/Styled