Share
Embed
Help! My Stylesheets are a Mess!
This talk covers the architecture and process we use @ caring.com to manage our stylesheets and front-end design.
Chris Eppstein
May 02, 2012
Transcript
144 slides
-
Chris Eppstein Architect: Caring.com Creator: Compass Stylesheet Authoring Framework Core
Developer: Sass Stylesheet Language @chriseppstein Wednesday, May 2, 12 -
#cleanstyles Wednesday, May 2, 12 If you tweet about this
talk, please use the hashtag -
Assumptions ‣Good at CSS ‣Basic knowledge of Sass ‣Large Website/Application
‣Team-based Development Wednesday, May 2, 12 -
Do your stylesheets feel like this? Incomprehensible wall of tangled
styles is incomprehensible Wednesday, May 2, 12 -
You Have One Giant CSS File Wednesday, May 2, 12
organized by comments -
You Have Thousands of Selectors Wednesday, May 2, 12 with
no coherent strategy -
You Have Styles in the Way Wednesday, May 2, 12
styles from the cascade and document inheritance that are hurting instead of helping -
You Have Accidentally the Stylesheets Wednesday, May 2, 12 Ended
up here because you didn’t have a plan. Because what you need -
Or Else Your stylesheets will sap your soul of the
will to live Wednesday, May 2, 12 -
You need better tools. Wednesday, May 2, 12 Better tools
that provide insulation between what you write and what you serve. So that you are free to organize without constraints. -
Property Soup Le average sass stylesheet. Wednesday, May 2, 12
This is decent sass, could be a lot worse, would be a lot worse in css. but it can be so much better. -
Constructing an Object Wednesday, May 2, 12 From each category
you can usually only pick 1 class to apply to the same element. -
Constructing an Object Wednesday, May 2, 12 From each category
you can usually only pick 1 class to apply to the same element. -
Constructing an Object Wednesday, May 2, 12 From each category
you can usually only pick 1 class to apply to the same element. -
Constructing an Object Wednesday, May 2, 12 From each category
you can usually only pick 1 class to apply to the same element. -
Constructing an Object Wednesday, May 2, 12 From each category
you can usually only pick 1 class to apply to the same element. -
Constructing an Object Wednesday, May 2, 12 From each category
you can usually only pick 1 class to apply to the same element. -
Constructing an Object Wednesday, May 2, 12 From each category
you can usually only pick 1 class to apply to the same element. -
Constructing an Object Unstyled Background Container Typography Foreground Margin/Padding Wednesday,
May 2, 12 From each category you can usually only pick 1 class to apply to the same element. -
Constructing an Object .calming .shadow-box .reading-text .green-bg-type .vertically-padded Wednesday, May
2, 12 From each category you can usually only pick 1 class to apply to the same element. -
Property Soup Le average sass stylesheet. Wednesday, May 2, 12
How should we organize our style properties? <wait for it> Alphabetize them! <ayfkm> We can do better than this. We will organize our properties by style concern. -
Property Soup Le average sass stylesheet. Alphabetized Wednesday, May 2,
12 How should we organize our style properties? <wait for it> Alphabetize them! <ayfkm> We can do better than this. We will organize our properties by style concern. -
Property Soup Le average sass stylesheet. Alphabetized Wednesday, May 2,
12 How should we organize our style properties? <wait for it> Alphabetize them! <ayfkm> We can do better than this. We will organize our properties by style concern. -
Typography The non-color aspects of text. Wednesday, May 2, 12
Note how the typography and foreground are mixed up? -
Typography Typographic properties: font-xxx, line- height, bullets, text-xxx, margin Wednesday,
May 2, 12 Explain the placeholder selector -
Foreground border-color, color, shadow-color Wednesday, May 2, 12 you can’t
declare text shadow color explicitly, so we have to put all text shadows in the foreground, otherwise the shadow details would be in the typography. -
An Object Description In Sass, we describe objects using words
and high-level concepts, not style primitives. Wednesday, May 2, 12 Isn’t this simpler to understand if you’re reading the code? We read code more often than we write it. Be nice to your future self. -
An Object Description In Sass, we describe objects using words
and high-level concepts, not style primitives. Wednesday, May 2, 12 Isn’t this simpler to understand if you’re reading the code? We read code more often than we write it. Be nice to your future self. -
An Object Description Our object description is longer now. Not
Re-Usable Re-Usable Wednesday, May 2, 12 -
A Sad Reality If you use @extend like this, your
stylesheets will be huge. Wednesday, May 2, 12 So unless you need the flexibility that semantic markup brings for shared content, etc -
We Need Browser Support for @extend Wednesday, May 2, 12
Do this right now. I’ll wait. Now back to the show. -
Library: ‣No output. ‣Mostly presentational in nature. Foundation: ‣Core, Shared
Styles. ‣Maps Presentation to Domain. Application: ‣Features. ‣One-off Pages. ‣Experimental styles. ‣Server traffic patterns Wednesday, May 2, 12 -
Library: ‣No output. ‣Mostly presentational in nature. Foundation: ‣Core, Shared
Styles. ‣Maps Presentation to Domain. Application: ‣Features. ‣One-off Pages. ‣Experimental styles. ‣Server traffic patterns Wednesday, May 2, 12 -
Library: ‣No output. ‣Mostly presentational in nature. Foundation: ‣Core, Shared
Styles. ‣Maps Presentation to Domain. Application: ‣Features. ‣One-off Pages. ‣Experimental styles. ‣Server traffic patterns Wednesday, May 2, 12 -
Progression of a Design Wednesday, May 2, 12 This is
a generalization, not a rule. Sometimes you skip a step, some concepts never appear in the foundation. -
Progression of a Design Prototype Variations Multiple Uses Domain Concepts
Presentational Concepts Concept App Styles Foundation Classes Mixin Library Wednesday, May 2, 12 This is a generalization, not a rule. Sometimes you skip a step, some concepts never appear in the foundation. -
Style Concern: Structure • Floated Grid - Provides the structure
of a page. CSS3 will bring alternate layout methods. • Page layouts - Defines how primary elements adhere to the grid and respond. Blog Post Wednesday, May 2, 12 -
Style Concern: Structure • Layout - Non-grid based structural patterns.
Wednesday, May 2, 12 -
Style Concern: Structure • Layout - Non-grid based structural patterns.
Wednesday, May 2, 12 -
Style Concern: Structure • Layout - Non-grid based structural patterns.
Wednesday, May 2, 12 -
Style Concern: Structure • Layout - Non-grid based structural patterns.
Wednesday, May 2, 12 -
Style Concern: Structure • Layout - Non-grid based structural patterns.
Wednesday, May 2, 12 -
Style Concern: Typography • Defines how a collection of typographic
elements are styled. • Vertical Rhythm • There is no default typography. Wednesday, May 2, 12 opt-in typography is not the industry standard approach. The industry is mostly wrong about this. Typographic inheritance can be annoying. -
Style Concern: Typography • Defines how a collection of typographic
elements are styled. • Vertical Rhythm • There is no default typography. Opt-in To Typography Wednesday, May 2, 12 opt-in typography is not the industry standard approach. The industry is mostly wrong about this. Typographic inheritance can be annoying. -
Style Concern: Typography • Defines how a collection of typographic
elements are styled. • Vertical Rhythm • There is no default typography. Wednesday, May 2, 12 opt-in typography is not the industry standard approach. The industry is mostly wrong about this. Typographic inheritance can be annoying. -
Style Concern: Typography • Defines how a collection of typographic
elements are styled. • Vertical Rhythm • There is no default typography. Wednesday, May 2, 12 opt-in typography is not the industry standard approach. The industry is mostly wrong about this. Typographic inheritance can be annoying. -
Style Concern: Container • Define a space using boxes and
separators. • Accommodate whatever content you put in them. Wednesday, May 2, 12 -
Style Concern: Container • Define a space using boxes and
separators. • Accommodate whatever content you put in them. Wednesday, May 2, 12 -
Style Concern: Container • Define a space using boxes and
separators. • Accommodate whatever content you put in them. Wednesday, May 2, 12 -
Style Concern: Container • Define a space using boxes and
separators. • Accommodate whatever content you put in them. Wednesday, May 2, 12 -
Style Concern: Spacers • Add space using dimensions from the
vertical-rhythm and grid • Margins • Paddings • Un-paddings Wednesday, May 2, 12 -
Style Concern: Spacers • Add space using dimensions from the
vertical-rhythm and grid • Margins • Paddings • Un-paddings Wednesday, May 2, 12 -
Style Concern: Spacers • Add space using dimensions from the
vertical-rhythm and grid • Margins • Paddings • Un-paddings Wednesday, May 2, 12 -
Style Concern: Background • Gives an area background color, pattern,
or imagery. • Combine with any container. Wednesday, May 2, 12 -
Style Concern: Background • Gives an area background color, pattern,
or imagery. • Combine with any container. Wednesday, May 2, 12 -
Style Concern: Background • Gives an area background color, pattern,
or imagery. • Combine with any container. Wednesday, May 2, 12 -
Style Concern: Foreground • Gives color to type and borders
• Often linked to a background Wednesday, May 2, 12 It would be nice if the relationship was .foreground {@extend .background;} but it’s not (1 foreground has many backgrounds). This @extend approach introduces a fair bit of bloat, but it forces consistency. It’s a trade-off you can decide to make or not. -
Style Concern: Foreground • Gives color to type and borders
• Often linked to a background Wednesday, May 2, 12 It would be nice if the relationship was .foreground {@extend .background;} but it’s not (1 foreground has many backgrounds). This @extend approach introduces a fair bit of bloat, but it forces consistency. It’s a trade-off you can decide to make or not. -
Style Concern: Foreground • Gives color to type and borders
• Often linked to a background Wednesday, May 2, 12 It would be nice if the relationship was .foreground {@extend .background;} but it’s not (1 foreground has many backgrounds). This @extend approach introduces a fair bit of bloat, but it forces consistency. It’s a trade-off you can decide to make or not. -
Style Concern: Foreground • Gives color to type and borders
• Often linked to a background Wednesday, May 2, 12 It would be nice if the relationship was .foreground {@extend .background;} but it’s not (1 foreground has many backgrounds). This @extend approach introduces a fair bit of bloat, but it forces consistency. It’s a trade-off you can decide to make or not. -
Style Concern: Foreground • Gives color to type and borders
• Often linked to a background Wednesday, May 2, 12 It would be nice if the relationship was .foreground {@extend .background;} but it’s not (1 foreground has many backgrounds). This @extend approach introduces a fair bit of bloat, but it forces consistency. It’s a trade-off you can decide to make or not. -
Style Concern: Foreground • Gives color to type and borders
• Often linked to a background Wednesday, May 2, 12 It would be nice if the relationship was .foreground {@extend .background;} but it’s not (1 foreground has many backgrounds). This @extend approach introduces a fair bit of bloat, but it forces consistency. It’s a trade-off you can decide to make or not. -
Style Concern: Foreground • Gives color to type and borders
• Often linked to a background Wednesday, May 2, 12 It would be nice if the relationship was .foreground {@extend .background;} but it’s not (1 foreground has many backgrounds). This @extend approach introduces a fair bit of bloat, but it forces consistency. It’s a trade-off you can decide to make or not. -
Style Concern: Foreground • Gives color to type and borders
• Often linked to a background Wednesday, May 2, 12 It would be nice if the relationship was .foreground {@extend .background;} but it’s not (1 foreground has many backgrounds). This @extend approach introduces a fair bit of bloat, but it forces consistency. It’s a trade-off you can decide to make or not. -
Style Concern: Lists/Tables/Forms • These are unique beasts • Might
be part of a typography • Use them semantically • Class on the main element Wednesday, May 2, 12 -
Style Concern: Widgets • Styles for your interactive elements •
SMACSS - Jonathan Snook Wednesday, May 2, 12 -
Style Concern: Widgets • Styles for your interactive elements •
SMACSS - Jonathan Snook Wednesday, May 2, 12 -
Style Concern: Widgets • Styles for your interactive elements •
SMACSS - Jonathan Snook Wednesday, May 2, 12 -
Style Concern: Widgets • Styles for your interactive elements •
SMACSS - Jonathan Snook Wednesday, May 2, 12 -
Style Concern: Theming • Color Palette • Semantic Color Relationships
• Default Variables • Compile Stylesheet with a different configuration Wednesday, May 2, 12 -
Style Concern: Theming • Color Palette • Semantic Color Relationships
• Default Variables • Compile Stylesheet with a different configuration Wednesday, May 2, 12 -
Style Concern: Theming • Color Palette • Semantic Color Relationships
• Default Variables • Compile Stylesheet with a different configuration Wednesday, May 2, 12 -
Style Concern: Theming • Color Palette • Semantic Color Relationships
• Default Variables • Compile Stylesheet with a different configuration Wednesday, May 2, 12 -
Style Concern: Theming • Color Palette • Semantic Color Relationships
• Default Variables • Compile Stylesheet with a different configuration Wednesday, May 2, 12 -
Naming is a Collaboration Designers must pick or approve the
name. Unfortunately, designers are not often good at naming things. Wednesday, May 2, 12 Coders have to name everything they make, but designers don’t. Naming is a skill that must be developed. You have to learn to explain your intuition and instinct. -
Naming Docent Developers, your job is to help them develop
a shared design vocabulary. Wednesday, May 2, 12 If you are a developer and a designer, you now have an excuse for talking to yourself. -
The Name Game Find a name that describes the intent
of a design element, not the appearance. Wednesday, May 2, 12 -
The Name Game A too-specific name is better than a
too-generic name. Wednesday, May 2, 12 -
Losing the Name Game Wednesday, May 2, 12 Sometimes you
cannot find a good name, or you find some use of a design that doesn’t match the current name. -
Losing the Name Game Give up: Pick two names Wednesday,
May 2, 12 Sometimes you cannot find a good name, or you find some use of a design that doesn’t match the current name. -
Losing the Name Game Give up: Pick two names Consistency:
Change the design Wednesday, May 2, 12 Sometimes you cannot find a good name, or you find some use of a design that doesn’t match the current name. -
Losing the Name Game Give up: Pick two names Consistency:
Change the design Wait: Don’t name it Wednesday, May 2, 12 Sometimes you cannot find a good name, or you find some use of a design that doesn’t match the current name. -
The Designer Wins Wednesday, May 2, 12 Don’t force a
design change just because a name doesn’t match. Intuition is a tricky thing, if you trust your designer, trust their gut feeling. If you don’t trust your designer... :( -
Classes or IDs? Use IDs for unique page elements. Specificity
is good when styling something specific. Wednesday, May 2, 12 not always possible to find a document order. specificity is BETTER than !important. !important is a nuclear option. -
Specificity Wars Time to Refactor! Wednesday, May 2, 12 Fight
the specificity wars, by refactoring; not by rejecting specificity. Document order is not enough. Keep the same order of specificity at the same level of abstraction. -
Mixin Library The presentational concepts upon which the foundation classes
are built. Wednesday, May 2, 12 -
Structure of a Library Module 1.Dependency Imports 2.Variables, almost always
defaulted. 3.Functions 4.Mixins 5.Placeholder selectors 6.Style Selectors Wednesday, May 2, 12 Placeholders: only import once or use the mixin hack if your module has these Selectors: Usually don't mix with Functions/mixins/placeholders -
Breaking the Rules ‣Experiment with new designs ‣Accommodate non-conforming design.
‣Build what you need today ‣Meet your deadlines ‣Diligently factor out what is common Wednesday, May 2, 12 -
Documentation ‣It's better to show than to tell. ‣Make a
living styleguide for documentation and prototyping. ‣This is your design catalog. ‣Teach the design, don't just exemplify it. Wednesday, May 2, 12 -
Downsides ‣Learning curve ‣Harder to debug ‣Classitis ‣A lot of
work Wednesday, May 2, 12 1-2 days of training to become capable. 3-4 weeks to be competent. It will take > 1 month for an experienced team to build a comprehensive styleguide. -
Benefits Efficient communication Wednesday, May 2, 12 More efficient team
thru better communication thanks to new vocabulary. completely Describing a page design can be done in ~5 minutes. -
Benefits Low Coupling Wednesday, May 2, 12 a clean separation
in responsibilities, means changes breaks things less often in unexpected ways -
Benefits Built to last Wednesday, May 2, 12 These styles
will be used for > 2 years. These styles will be used by a team. For the love of god, don't do this for your blog or a marketing/promotional site. -
Thank you! Compass is Charityware. Please donate on our behalf
to the United Mitochondrial Disease Foundation http://umdf.org/compass Wednesday, May 2, 12