Top Banner
https://www.flickr.com/photos/stn1978/8899794454/ Beyond CSS Architecture Hiroki Tani, HTML5 Conference, Room B
109
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Beyond CSS Architecture

https://www.flickr.com/photos/stn1978/8899794454/

Beyond CSS ArchitectureHiroki Tani, HTML5 Conference, Room B

Page 2: Beyond CSS Architecture

Hiroki Tani@hiloki, Frontend Developer

Page 3: Beyond CSS Architecture
Page 4: Beyond CSS Architecture

https://frontendweekly.tokyo/

@cssradar @t32k @hiloki

Page 5: Beyond CSS Architecture
Page 6: Beyond CSS Architecture

! Vertical align

Page 7: Beyond CSS Architecture
Page 8: Beyond CSS Architecture
Page 9: Beyond CSS Architecture

.selector { property: value;}

Page 10: Beyond CSS Architecture

.selector { property: value;}

Page 11: Beyond CSS Architecture

.author { …}

Hiroki Tani

Page 12: Beyond CSS Architecture

.author { ... }

.login-user { ... }

Hiroki Tani

Koji Ishimoto

Page 13: Beyond CSS Architecture

.author { ... }

.login-user { ... }

.comment-author { ... }

Page 14: Beyond CSS Architecture

.author,

.login-user,

.comment-author { /* 共通のスタイル */}

.author { ... }

.login-user { ... }

.comment-author { ... }

Page 15: Beyond CSS Architecture

.author,

.login-user,

.comment-author,

.entry-item,

.bookmark,

.more-uis… { ... }

Page 16: Beyond CSS Architecture

OOCSSby Nicole Sullivan

https://www.flickr.com/photos/premshree/3444104640/

Page 17: Beyond CSS Architecture

.media { ... }

.author { ... }

.login-user { ... }

Hiroki Tani

Koji Ishimoto

Page 18: Beyond CSS Architecture

.media { overflow: hidden; /* Clearfix */ margin:10px;}.media .bd { overflow:hidden;}.media .img { float:left; margin-right: 10px;}.media .img img { display:block;}.media .imgExt { float:right; margin-left: 10px;}

Page 19: Beyond CSS Architecture

<div class=“media author"> <a class="img"> <img /> </a> <div class="bd"> ... </div></div>

Page 20: Beyond CSS Architecture

<div class="media author"> ...</div><div class=“media login-user"> ...</div>

Page 21: Beyond CSS Architecture

BEMby Yandex

Page 22: Beyond CSS Architecture

https://bem.info/

Page 23: Beyond CSS Architecture

Hiroki Tani

Hiroki Tani

Block

Element

Modifier

Page 24: Beyond CSS Architecture

.media { overflow: hidden; margin:10px;}.media .bd { overflow:hidden;}.media .img { float:left; margin-right: 10px;}.media .img img { display:block;}.media .imgExt { float:right; margin-left: 10px;}

Page 25: Beyond CSS Architecture

.media { overflow: hidden; margin:10px;}.media__body { overflow:hidden;}.media__image { float:left; margin-right: 10px;}.media__image img { display:block;}.media__image_extra { float:right; margin-left: 10px;}

Page 26: Beyond CSS Architecture

<div class=“media author"> <a class="img"> <img /> </a> <div class="bd"> ... </div></div>

Page 27: Beyond CSS Architecture

<div class=“media author"> <a class="media__image"> <img /> </a> <div class="media__body"> ... </div></div>

Page 28: Beyond CSS Architecture

.media { /* 0,0,1,0 */ overflow: hidden; margin:10px;}.media__body { /* 0,0,1,0 */ overflow:hidden;}.media__image { /* 0,0,1,0 */ float:left; margin-right: 10px;}.media__image img { /* 0,0,1,1 */ display:block;}.media__image_extra { /* 0,0,1,0 */ float:right; margin-left: 10px;}

Page 29: Beyond CSS Architecture

<div class="media author"> <a class="media__image author__image"> <img /> </a> <div class="media__body"> ... </div></div>

Page 30: Beyond CSS Architecture
Page 31: Beyond CSS Architecture

“”

Not all semantics need to be content-derived. Class names cannot be “unsemantic”.

Whatever names are being used: they have meaning, they have purpose.

Nicolas Gallagherhttp://nicolasgallagher.com/about-html-semantics-front-end-architecture/

Page 32: Beyond CSS Architecture

CSS Preprocessor

Page 33: Beyond CSS Architecture

<div class="author Media"> <div class="author__image Media__image Avatar"> <img src="author.jpg"> </div> <div class="author__body Media__body"> ... </div></div>

Page 34: Beyond CSS Architecture

%Media { /* Media styles... */}%Media__image { /* Media image styles... */}%Media__body { /* Media body styles... */}

%Avatar { /* Avatar styles... */}

Page 35: Beyond CSS Architecture

.author { @extend %Media; /* .author styles... */}.author-image { @extend %Media__image; @extend %Avatar; /* .author-image styles... */}.author-body { @extend %Media__body; /* .author-body styles... */}

Page 36: Beyond CSS Architecture

<div class="author Media"> <div class="author-image Media__image Avatar"> <img src="author.jpg"> </div> <div class="author-body Media__body"> ... </div></div>

Page 37: Beyond CSS Architecture

.login-user { @extend %Media; /* .login-user styles... */}.login-user-image { @extend %Media__image; @extend %Avatar; /* .login-user-image styles... */}.login-user-body { @extend %Media__body; /* .login-user-body styles... */}

Page 38: Beyond CSS Architecture

<div class="login-user"> <div class="login-user-image"> <img src="user.jpg"> </div> <p class="login-user-name"> ... </p></div>

Page 39: Beyond CSS Architecture

.author, .login-user { /* Media styles... */ }

.author-image, .login-user-image { /* Media image styles... */ }

.author-body, .login-user-body { /* Media body styles... */ }

.author-image, .login-user-image { /* Avatar styles... */ }

.author { /* .author styles... */ }

.author-image { /* .author-image styles... */ }

.author-body { /* .author-body styles... */ }

.login-user { /* .login-user styles... */ }

.login-user-image { /* .login-user-image styles... */ }

.login-user-body { /* .login-user-body styles... */ }

Page 40: Beyond CSS Architecture

%Media

.author .login-user

Page 41: Beyond CSS Architecture

%Media

.author .login-user { @extend .author;}

Page 42: Beyond CSS Architecture

%Media

.author

.login-user.comment-author

.entry-item

.bookmark

.more-uis

Page 43: Beyond CSS Architecture

%Media

.author

.login-user.comment-author

.entry-item

.bookmark

.more-uis

Page 44: Beyond CSS Architecture

%Media

.author

.login-user.comment-author

.entry-item

.bookmark

.more-uis

Page 45: Beyond CSS Architecture

.mod_listType1 section,.mod_listType3 section,.mod_listType4 section,.mod_listType5 section,.mod_listType7 section,.mod_listType8 section{margin-bottom:1em}.mod_listType1 h1,.mod_listType3 h1,.mod_listType4 h1,.mod_listType5 h1,.mod_listType7 h1,.mod_listType8 h1{margin:0 0 .5em .5em;font-size:15px;-webkit-text-shadow:0 1px 0 rgba(255,255,255,.75);text-shadow:0 1px 0 rgba(255,255,255,.75)}.mod_listType1 ul,.mod_listType3 ul,.mod_listType4 ul,.mod_listType5 ul,.mod_listType7 ul,.mod_listType8 ul{background-color:#fff;border:1px solid #c3c3c3;overflow:hidden;border-radius:12px}.mod_listType1 ul li,.mod_listType3 ul li,.mod_listType4 ul li,.mod_listType5 ul li,.mod_listType7 ul li,.mod_listType8 ul li{border-top:#C3C3C2 1px solid;margin-top:-1px;margin-bottom:1px;font-size:16px}.mod_listType1 ul li:first-child a.disable,.mod_listType1 ul li:last-child a.disable,.mod_listType3 ul li:first-child a.disable,.mod_listType3 ul li:last-child a.disable,.mod_listType4 ul li:first-child a.disable,.mod_listType4 ul li:last-child a.disable,.mod_listType5 ul li:first-child a.disable,.mod_listType5 ul li:last-child a.disable,.mod_listType7 ul li:first-child a.disable,.mod_listType7 ul li:last-child a.disable,.mod_listType8 ul li:first-child a.disable,.mod_listType8 ul li:last-child a.disable{border-radius:12px}.mod_listType1 ul li a,.mod_listType3 ul li a,.mod_listType4 ul li a,.mod_listType5 ul li a,.mod_listType7 ul li a,.mod_listType8 ul li a{display:block;width:100%;padding:.75em .7em;box-sizing:border-box;-webkit-text-shadow:1px 1px 2px rgba(0,0,0,.25);text-shadow:1px 1px 2px rgba(0,0,0,.25);position:relative}.mod_listType1 ul li a::after,.mod_listType11 ul li a::after,.mod_listType12 ul li a::after,.mod_listType13 ul li a::after,.mod_listType14 ul li a::after,.mod_listType3 ul li a::after,.mod_listType4 ul li a::after,.mod_listType5 ul li a::after,.mod_listType7 ul li a::after,.mod_listType8 ul li a::after,.mod_listType9 ul li a::after{display:block;width:9px;height:14px;position:absolute;top:50%;right:1em;margin-top:-10px;content:"]";font-size:12px;color:brown;-webkit-text-shadow:none;text-shadow:none}

Page 46: Beyond CSS Architecture

.mod_listType1 section,.mod_listType3 section,.mod_listType4 section,.mod_listType5 section,.mod_listType7 section,.mod_listType8 section{margin-bottom:1em}.mod_listType1 h1,.mod_listType3 h1,.mod_listType4 h1,.mod_listType5 h1,.mod_listType7 h1,.mod_listType8 h1{margin:0 0 .5em .5em;font-size:15px;-webkit-text-shadow:0 1px 0 rgba(255,255,255,.75);text-shadow:0 1px 0 rgba(255,255,255,.75)}.mod_listType1 ul,.mod_listType3 ul,.mod_listType4 ul,.mod_listType5 ul,.mod_listType7 ul,.mod_listType8 ul{background-color:#fff;border:1px solid #c3c3c3;overflow:hidden;border-radius:12px}.mod_listType1 ul li,.mod_listType3 ul li,.mod_listType4 ul li,.mod_listType5 ul li,.mod_listType7 ul li,.mod_listType8 ul li{border-top:#C3C3C2 1px solid;margin-top:-1px;margin-bottom:1px;font-size:16px}.mod_listType1 ul li:first-child a.disable,.mod_listType1 ul li:last-child a.disable,.mod_listType3 ul li:first-child a.disable,.mod_listType3 ul li:last-child a.disable,.mod_listType4 ul li:first-child a.disable,.mod_listType4 ul li:last-child a.disable,.mod_listType5 ul li:first-child a.disable,.mod_listType5 ul li:last-child a.disable,.mod_listType7 ul li:first-child a.disable,.mod_listType7 ul li:last-child a.disable,.mod_listType8 ul li:first-child a.disable,.mod_listType8 ul li:last-child a.disable{border-radius:12px}.mod_listType1 ul li a,.mod_listType3 ul li a,.mod_listType4 ul li a,.mod_listType5 ul li a,.mod_listType7 ul li a,.mod_listType8 ul li a{display:block;width:100%;padding:.75em .7em;box-sizing:border-box;-webkit-text-shadow:1px 1px 2px rgba(0,0,0,.25);text-shadow:1px 1px 2px rgba(0,0,0,.25);position:relative}.mod_listType1 ul li a::after,.mod_listType11 ul li a::after,.mod_listType12 ul li a::after,.mod_listType13 ul li a::after,.mod_listType14 ul li a::after,.mod_listType3 ul li a::after,.mod_listType4 ul li a::after,.mod_listType5 ul li a::after,.mod_listType7 ul li a::after,.mod_listType8 ul li a::after,.mod_listType9 ul li a::after{display:block;width:9px;height:14px;position:absolute;top:50%;right:1em;margin-top:-10px;content:"]";font-size:12px;color:brown;-webkit-text-shadow:none;text-shadow:none}

440kbgziped

Page 47: Beyond CSS Architecture

https://amcss.github.io/

Page 48: Beyond CSS Architecture

<!-- class --><a class="btn btn-primary btn-lg"> Large primary button</a>

<!-- attribute --><a am-Button="primary large"> Large primary button</a>

Page 49: Beyond CSS Architecture

[am-Button] { ...}[am-Button~="primary"] { ...}[am-Button~="large"] { ...}

Page 50: Beyond CSS Architecture

See also:

CSS: Using every declaration just once

YACP

https://developers.google.com/speed/articles/optimizing-css

http://morishitter.hatenablog.com/entry/2014/12/02/000135

http://hail2u.net/blog/webdesign/oocss-drawbacks-and-gifts-of-every-declaration-just-once.html

Page 51: Beyond CSS Architecture
Page 52: Beyond CSS Architecture

“”

We’re not designing pages, we’re designing systems of components.

Stephen Hay

Page 53: Beyond CSS Architecture

http://smacss.com/

Page 54: Beyond CSS Architecture

https://github.com/hiloki/flocss

Page 55: Beyond CSS Architecture

ITCSSby Harry Roberts a.k.a. CSS Wizardly

https://www.flickr.com/photos/stn1978/8899794454/

Page 56: Beyond CSS Architecture

http://itcss.io/

Page 57: Beyond CSS Architecture

https://speakerdeck.com/dafed/managing-css-projects-with-itcss

Page 58: Beyond CSS Architecture

Setting

Tools

Generic

Base

Objects

Components

Trumps

Page 59: Beyond CSS Architecture

!"" _base.links.scss!"" _base.page.scss!"" _base.quotes.scss!"" _base.type.scss!"" _components.ads.scss!"" ...!"" _components.promo.scss!"" _components.pull-quote.scss!"" _components.site-nav.scss!"" _components.sprites.scss!"" _objects.wrappers.scss!"" _settings.colors.scss!"" _settings.global.scss!"" _tools.aliases.scss!"" _tools.mixins.scss!"" _trumps.show-hide.scss!"" _trumps.widths-responsive.scss#"" csswizardry.scss

Page 60: Beyond CSS Architecture

/** * #SETTINGS */@import "bower_components/inuit-defaults/settings.defaults";@import "settings.global";@import "settings.colors";@import "bower_components/inuit-responsive-settings/settings.responsive";

/** * #TOOLS */@import "bower_components/inuit-functions/tools.functions";@import "bower_components/inuit-mixins/tools.mixins";@import "tools.mixins";@import "bower_components/inuit-responsive-tools/tools.responsive";@import "tools.aliases";

/** * #GENERIC */@import "bower_components/inuit-normalize/generic.normalize";@import "bower_components/inuit-reset/generic.reset";@import "bower_components/inuit-box-sizing/generic.box-sizing";@import "bower_components/inuit-shared/generic.shared";

Page 61: Beyond CSS Architecture
Page 62: Beyond CSS Architecture
Page 63: Beyond CSS Architecture

http://bradfrost.com/

See also:

Atomic Design

FUN CSS

http://bradfrost.com/blog/post/atomic-web-design/

http://benfrain.com/fun-css-naming-convention-explained/

Page 64: Beyond CSS Architecture
Page 65: Beyond CSS Architecture

Styleguide

Page 66: Beyond CSS Architecture

http://ux.mailchimp.com/patterns/

Page 67: Beyond CSS Architecture

http://styleguides.io/examples.html

Page 68: Beyond CSS Architecture
Page 69: Beyond CSS Architecture

StyleguideStatic

Page 70: Beyond CSS Architecture

StyleguideLiving

Generator

Page 71: Beyond CSS Architecture

http://trulia.github.io/hologram/

Page 72: Beyond CSS Architecture

/*doc---title: Buttonsname: buttoncategory: Base CSS---

Button styles can be applied to any element. Typically you'll want touse either a `<button>` or an `<a>` element:

```html_example<button class="btn btnDefault">Click</button><a class="btn btnPrimary" href="http://trulia.com">Trulia!</a>```*/

Page 73: Beyond CSS Architecture

/*doc---title: Buttonsname: buttoncategory: Base CSS---

Button styles can be applied to any element. Typically you'll want touse either a `<button>` or an `<a>` element:

```html_example<button class="btn btnDefault">Click</button><a class="btn btnPrimary" href="http://trulia.com">Trulia!</a>```*/

Page 74: Beyond CSS Architecture

http://bradfrost.com/

See also:

Pattern Lab

Frontnote

http://patternlab.io/

http://frontainer.com/frontnote/

Page 75: Beyond CSS Architecture

Specificity Graph

Page 76: Beyond CSS Architecture

http://csswizardry.com/2014/10/the-specificity-graph/

Page 77: Beyond CSS Architecture

Spec

ifici

ty

Location in Stylesheet

Page 78: Beyond CSS Architecture

Spec

ifici

ty

Location in Stylesheet

ul { margin: 0;}

Page 79: Beyond CSS Architecture

Spec

ifici

ty

Location in Stylesheet

.item { border: 1px solid #999;}

Page 80: Beyond CSS Architecture

Spec

ifici

ty

Location in Stylesheet

.item.selected { background: #eee;}

Page 81: Beyond CSS Architecture

Spec

ifici

ty

Location in Stylesheet

.heading { font-size: 24px;}

Page 82: Beyond CSS Architecture

Spec

ifici

ty

Location in Stylesheet

#feature { background: #FC0;}

Page 83: Beyond CSS Architecture

Spec

ifici

ty

Location in Stylesheet

#feature .heading { color: #000;}

Page 84: Beyond CSS Architecture

http://jonassebastianohlsson.com/specificity-graph/

Page 85: Beyond CSS Architecture
Page 86: Beyond CSS Architecture
Page 87: Beyond CSS Architecture
Page 88: Beyond CSS Architecture
Page 89: Beyond CSS Architecture

See also:

Specificity graph

CSS specificity graphs

http://snook.ca/archives/html_and_css/specificity-graphs

https://decadecity.net/blog/2014/11/26/css-specificity-graphs

Page 90: Beyond CSS Architecture

Statistical tool

Page 91: Beyond CSS Architecture

http://www.stylestats.org/

Page 92: Beyond CSS Architecture

http://cssstats.com

Page 93: Beyond CSS Architecture

See also:

CSS Dig

Parker

http://cssdig.com/

https://github.com/katiefenn/parker

Page 94: Beyond CSS Architecture
Page 95: Beyond CSS Architecture

https://developers.google.com/web/fundamentals/performance/critical-rendering-path

Page 96: Beyond CSS Architecture

http://goo.gl/ycf4WU

Page 97: Beyond CSS Architecture
Page 98: Beyond CSS Architecture

https://developers.google.com/speed/pagespeed/insights/

Page 99: Beyond CSS Architecture
Page 100: Beyond CSS Architecture

http://www.smashingmagazine.com/

Page 101: Beyond CSS Architecture
Page 102: Beyond CSS Architecture
Page 103: Beyond CSS Architecture

http://jonassebastianohlsson.com/criticalpathcssgenerator/

Page 104: Beyond CSS Architecture

Before

After

http://goo.gl/9DbbVs

Page 105: Beyond CSS Architecture

http://bradfrost.com/

See also:

Pentohouse

Critical

Critical CSS

https://github.com/pocketjoso/penthouse

https://github.com/addyosmani/critical

https://github.com/filamentgroup/criticalcss

Page 106: Beyond CSS Architecture
Page 107: Beyond CSS Architecture

http://webcomponents.org/

Page 108: Beyond CSS Architecture

“ ”Every line of CSS you write is a suggestion.

Jeremy Keith

https://adactio.com/journal/7653

Page 109: Beyond CSS Architecture

https://www.flickr.com/photos/pgoyette/5911926699/

Thankstwitter.com/hiloki

github.com/hiloki