GETTING NOWHERE WITH
CSS BEST PRACTICES
@heydonworks
BEST PRACTICE
- ultimate procedure
- unbeatable action
- exceptional method
Anything can not be best practice
BEST PRACTICE = QUALITY
CSS BEST PRACTICE TOPICS
-
readability
- efficiency
- maintainability
Readability
(a) AGREED formatting
h1 {
font-family: headings, serif;
color: black; font-size: 2.5em; }
Readability
(a) AGREED formatting
h1 {
font-family: headings, serif;
color: black; font-size: 2.5em; }
meanwhile, in dev tools...
h1 { line 06 main.css
color: #000000;
font-family: headings, serif;
font-size: 2.5em;
}
OR
ONE DAY
YOU WILL
DIE
THIS COULD BREAK A BUILD:
BUT THIS MOST LIKELY WON'T:
<div class="button">click me, baby</div>
MORE THINGS THAT COULD BREAK A BUILD
- Using ID selectors
- Concatenating classes
- Using a unit on a zero value
- Using !important
-
Qualifying headings (using descendant selectors)
h1 {
font-family: Asshole Script, cursive;
}
TESTS PASSED ✔
BEST?
Readability
(B) NAMING CONVENTIONS
ie. "SEMANTICS"
What Makes For A Semantic Class Name?
109 COMMENTS
“I never considered whether class 'left' or 'right' was semantic or not, but I suppose it is not. I feel like my world is falling down around me”
HTML IS THE INTERFACE
CSS IS JUST THE BRANDING
“SEMANTIC” CLASSES ARE FOR DEVELOPERS
SEMANTIC HTML IS FOR USERS
THE ENDLESS DEBATE...
- .nav ?
-
.menu ?
- .main-nav ?
- .menu-primary ?
-
.nav-primary ?
.nav--primary ?
YOU'RE LOOKING FOR...
✔<nav>
✔role="navigation"
AAAAND YOU STYLE THEM WITH...
✔nav
✔[role="navigation"]
THE !IMPORTANT PART
PRESENT: [role="navigation"] in the CSS
NOT PRESENT: role="navigation" in the HTML
- home
- about
- shop
- contact
States
“A state is something that augments and overrides all other styles. For example, an accordion section may be in a collapsed or expanded state.”
SMACSS
ACTIVE TABS IN SMACSS
.tab {
background-color: purple;
color: white;
}
.is-tab-active {
background-color: white;
color: black;
}
ACTIVE TABS IN SMACSS
.tab {
background-color: purple;
color: white;
}
.is-tab-active {
background-color: white;
color: black;
}
Classes only define appearance of state
ASSISTive TECH USERS
GENUINELY SEMANTIC;
PERTAINS TO SPEC/DICTIONARY
[role="tab"] {
background-color: purple;
color: white;
}
[role="tab"][aria-selected] {
background-color: white;
color: black;
}
.tabs-blue {}
.tabs-black {}
.tabs-orange {}
On the same page???
W3C Best Practice
“Tie CSS display property to WAI-ARIA hidden state”
WAI-ARIA Authoring Practices
ACTUALLY BEST PRACTICE
[aria-hidden="true"] { display: none; }
Complete list of states
- aria-busy
- aria-grabbed
-
aria-invalid
- aria-checked
- aria-disabled
- aria-expanded
- aria-hidden
- aria-invalid
- aria-pressed
- aria-selected
...WITH EASY TO REMEMBER SELECTORS
- [aria-busy]
- [aria-grabbed]
-
[aria-invalid]
- [aria-checked]
- [aria-disabled]
- [aria-expanded]
- [aria-hidden]
- [aria-invalid]
- [aria-pressed]
- [aria-selected]
STATE VERSUS TYPE
“But my application has 20 different button types.
How do I differentiate all of those
without classes??”
WITH TEXT
Supported since IE1
EFFICIENCY
FAST SELECTORS
ARE BEST PRACTICE
<a class="topcoat-button">Button</a>
“RAZOR FOCUSED ON PERFORMANCE”
CONCURRENT ANIMATIONS?
YOU ARE FINE
EVERYTHING IS FINE
MAINTAINABILITY
(modularity)
OUR BIGGEST PREOCCUPATION = MANAGING COMPLEXITY
- pre-processors
- OOCSS
- BEM etc.
- In-house code QA etc.
GOOD JOB, SON!
WHICH IS BETTER?
“WEB DESIGNER”
↓
“FRONT-END
DEVELOPER”
A Front-end Developer asks
HOW SHOULD I DO THIS?
A Designer asks
HOW
SHOULD I DO THIS?
424 LINKS
ALL PART OF BEST PRACTICES
YET DOING NOTHING WOULD
HAVE BEEN BETTER
Not part of best practices