SlideShare une entreprise Scribd logo
1  sur  77
Télécharger pour lire hors ligne
漫談 CSS 架構⽅方法
- 以 OOCSS, SMACSS, BEM 為例
Kuro Hsu @ F2E.tw Party 8th
2014/05/26
Kuro Hsu
前端⼯工程師
業餘暴⺠民
– Chris Eppstein
“CSS is simple..., It’s simple to understand.
But CSS is not simple to use or maintain.”
http://chriseppstein.github.io/blog/2009/09/20/why-stylesheet-abstraction-matters/
!
.font-­‐18{	
  
	
  	
  font-­‐size:	
  18px;	
  
}	
  
!
!
.red-­‐text{	
  
	
  	
  color:	
  red;	
  
}	
  
<div	
  class="font-­‐18	
  red-­‐text">這是個錯誤訊息。</div>


<div	
  class="font-­‐18	
  red-­‐text	
  box">	
  
	
   這是個錯誤訊息。	
  
</div>

!
.font-­‐18{	
  
	
  	
  font-­‐size:	
  18px;	
  
}	
  
!
@media	
  only	
  screen	
  and	
  (max-­‐width:	
  320px){	
  
!
}


	
  .red-­‐text{	
  
	
  	
  	
  color:	
  orange;	
  
	
  }

!
.font-­‐18{	
  
	
  	
  font-­‐size:	
  18px;	
  
}	
  
!
@media	
  only	
  screen	
  and	
  (max-­‐width:	
  320px){	
  
	
  	
  .font-­‐18{	
  
	
  	
  	
  	
  font-­‐size:	
  14px;	
  
	
  	
  }	
  	
  
}


	
  .red-­‐text{	
  
	
  	
  	
  color:	
  orange;	
  
	
  }

!
.font-­‐18{	
  
	
  	
  font-­‐size:	
  18px;	
  
}	
  
!
@media	
  only	
  screen	
  and	
  (max-­‐width:	
  320px){	
  
	
  	
  .font-­‐18{	
  
	
  	
  	
  	
  font-­‐size:	
  14px;	
  
	
  	
  }	
  	
  
}
#news	
  h2{	
  
	
  	
  border-­‐bottom:	
  1px	
  solid	
  #000;	
  
	
  	
  padding:	
  1em;	
  
	
  	
  font-­‐size:	
  18px;	
  
	
  	
  font-­‐weight:	
  700;	
  
}
#news	
  h2{	
  
	
  	
  border-­‐bottom:	
  1px	
  solid	
  #000;	
  
	
  	
  padding:	
  1em;	
  
	
  	
  font-­‐size:	
  18px;	
  
	
  	
  font-­‐weight:	
  700;	
  
}
#faq	
  .title{	
  
	
  	
  border-­‐bottom:	
  1px	
  solid	
  #000;	
  
	
  	
  padding:	
  1em;	
  
	
  	
  font-­‐size:	
  18px;	
  
	
  	
  font-­‐weight:	
  700;	
  
}
#news	
  h2{	
  
	
  	
  border-­‐bottom:	
  1px	
  solid	
  #000;	
  
	
  	
  padding:	
  1em;	
  
	
  	
  font-­‐size:	
  18px;	
  
	
  	
  font-­‐weight:	
  700;	
  
}
#faq	
  .title{	
  
	
  	
  border-­‐bottom:	
  1px	
  solid	
  #000;	
  
	
  	
  padding:	
  1em;	
  
	
  	
  font-­‐size:	
  18px;	
  
	
  	
  font-­‐weight:	
  700;	
  
}
#service	
  .feature	
  .title{	
  
	
  	
  border-­‐bottom:	
  1px	
  solid	
  #000;	
  
	
  	
  padding:	
  0.5em;	
  
	
  	
  font-­‐size:	
  16px;	
  
}
.column_2	
  #inbox	
  .list	
  {	
  ...	
  }	
  
.column_3	
  #inbox	
  .list	
  {	
  ...	
  }	
  
.column_3	
  #inbox	
  .list	
  .name	
  {	
  ...	
  }	
  
.column_3	
  #inbox	
  .list	
  .name	
  p	
  {	
  ...	
  }	
  
.column_3	
  #inbox	
  .list	
  .name.reply	
  {	
  ...	
  }	
  
.column_3	
  #inbox	
  .list	
  .name.reply	
  a	
  {	
  ...	
  }	
  
!
#top	
  .column_3	
  #inbox	
  .list.left	
  {	
  ...	
  }
!important
http://chriseppstein.github.io/blog/2009/09/20/why-stylesheet-abstraction-matters/
糟了,是世界奇觀
Ctrl + a
!
del
– Nicole Sullivan
“We have been doing it all wrong…, 

Our (CSS) best practices are killing us! ”
http://www.stubbornella.org/content/2011/04/28/our-best-practices-are-killing-us/
– hlb
“Code for system, Not for pages.”
https://speakerdeck.com/hlb/maintainable-css-with-sass-and-compass
良好的 CSS 架構
• 預測 - Predictable
• 複⽤用 - Reusable
• 維護 - Maintainable
• 延展 - Scalable
http://philipwalton.com/articles/css-architecture/
模組化	 
MODULAR CSS
Object
Oriented
CSS
OOCSS
OOCSS
Nicole Sullivan
http://www.slideshare.net/stubbornella/object-oriented-css
兩大原則
• Separate Structure and Skin
·•結構與外觀分離	 
• Separate Container and Content
·•容器與內容分離
Media object
<div	
  class="media">	
  
	
  	
  <div	
  class="media-­‐img">	
  
	
  	
  	
  	
  <img	
  src="http://placehold.it/80x80"	
  alt="">	
  
	
  	
  </div>	
  
	
  	
  <div	
  class="media-­‐body">	
  
	
  	
  	
  	
  <p>...</p>	
  
	
  	
  </div>	
  
</div>
<div	
  class="media	
  media-­‐shadow">	
  
	
  	
  <div	
  class="media-­‐img">	
  
	
  	
  	
  	
  <img	
  src="http://placehold.it/80x80"	
  alt="">	
  
	
  	
  </div>	
  
	
  	
  <div	
  class="media-­‐body">	
  
	
  	
  	
  	
  <p>...</p>	
  
	
  	
  </div>	
  
</div>
<div	
  class="media	
  media-­‐no-­‐border”>	
  
	
  	
  <div	
  class="media-­‐img">	
  
	
  	
  	
  	
  <img	
  src="http://placehold.it/80x80"	
  alt="">	
  
	
  	
  </div>	
  
	
  	
  <div	
  class="media-­‐body">	
  
	
  	
  	
  	
  <p>...</p>	
  
	
  	
  </div>	
  
</div>
Scalable &
Modular
Architecture for
CSS
SMACSS
SMACSS
Jonathan Snook
http://smacss.com/
SMACSS
• Categorization
·•將結構分類	 
• Naming rules
·•命名規則	 
• Decoupling CSS from HTML
·•CSS	 與	 HTML	 分離
SMACSS Categories
• Base
• Layout
• Module
• State
• Theme
SMACSS - Base
• CSS Reset
• CSS Normalize
• There should be no need to use 

!important in a Base style.
SMACSS - Layout
https://speakerdeck.com/snookca/your
SMACSS - Layout
https://speakerdeck.com/snookca/your
SMACSS - Module
https://speakerdeck.com/snookca/your
SMACSS - Module
http://smacss.com/book/type-module
• ⾴頁⾯面上可單獨存在並且可重複使⽤用的元件
• 定義 Module 時應避免使⽤用 id 或標記名稱
做選擇器
• ⼦子模組以原模組名稱加 dash (-) 作為名稱

如: .mod-­‐header , .mod-­‐body
SMACSS - State
SMACSS - State
http://smacss.com/book/type-module
• 與 Layout, Module 搭配
• 表⽰示 Layout 或 Module 的狀態變化
• 由 class 定義
• 命名規則是 .is-* 開頭
<div	
  class="media	
  is-­‐box-­‐shadow”>	
  
	
  	
  <div	
  class="media-­‐img">	
  
	
  	
  	
  	
  <img	
  src="http://placehold.it/80x80"	
  alt="">	
  
	
  	
  </div>	
  
	
  	
  <div	
  class="media-­‐body">	
  
	
  	
  	
  	
  <p>...</p>	
  
	
  	
  </div>	
  
</div>
module class state
sub module
sub module
SMACSS - Theme
• 定義網站主視覺。
• 類似 Layout,但影響的是網站整體視覺
的變化。
• class 名稱通常以 .theme-* 做開頭
• Use class over ID.
• Use child selector. ( .menu > li > a )
• Apply a class when the HTML won’t
be predictable.
DECOUPLING CSS FROM HTML
CSS 與 HTML 分離
<div	
  class="media">	
  
	
  	
  	
  <img	
  src="http://placehold.it/80x80"	
  alt="">	
  
	
  	
  	
  <div>...</div>	
  
</div>	
  
!
<div	
  class="media">	
  
	
  	
  	
  <img	
  src="http://placehold.it/80x80"	
  alt="">	
  
	
  	
  	
  <p>...</p>	
  
</div>
!
.media	
  p,	
  .media	
  div,	
  .media	
  ……	
  {	
  ...	
  }	
  
!
!
.media	
  p,	
  .media	
  div,	
  .media	
  ul	
  {	
  ...	
  }	
  
!
.media-­‐body	
  {	
  ...	
  }	
  
<div	
  class="media	
  is-­‐box-­‐shadow”>	
  
	
  	
  <div	
  class="media-­‐img">	
  
	
  	
  	
  	
  <img	
  src="http://placehold.it/80x80"	
  alt="">	
  
	
  	
  </div>	
  
	
  	
  <div	
  class="media-­‐body">	
  
	
  	
  	
  	
  <p>...</p>	
  
	
  	
  </div>	
  
</div>
module class state
sub module
sub module
Block
Element
Modifier
BEM
http://bem.info/
BEM - Block
• 在⾴頁⾯面上獨⽴立存在並可重複使⽤用的元件
• 如同 SMACSS 的 Module, Layout
• 每個 Block 都是獨⽴立存在的
BEM - CSS 命名原則 (Block)
.button	
  
.text-­‐field	
  
.heading	
  
.menu
.b-­‐button	
  
.b-­‐text-­‐field	
  
.b-­‐heading	
  
.b-­‐menu
( prefix ⾮非必要)
BEM - Element
• 為 Block 的⼀一部份 (⼦子組件)
• 無法獨⽴立於 Block 之外
• 有些 Block 可能沒有 Element
BEM - CSS 命名原則 (Element)
.button__icon	
  
.text-­‐field__label	
  
.heading__title	
  
.menu__item
以 Block 名稱加上兩個底線 _ _ 作為 prefix
BEM - Modifier
• ⽤用來定義 Block 或 Element 

的狀態或屬性
• 類似 SMACSS 的 State
• 同⼀一個 Block 或 Element 可以允許多組
modifier 同時存在
BEM - CSS 命名原則 (Modifier)
.button_active	
  
.text-­‐field_editable	
  
.heading_align_top	
  
.menu__item_promo
以 Block 或 Element名稱加上⼀一個底線 _作為 prefix
<div	
  class="media	
  media_shadow">	
  
	
  	
  <div	
  class="media__img">	
  
	
  	
  	
  	
  <img	
  src="http://placehold.it/80x80"	
  alt="">	
  
	
  	
  </div>	
  
	
  	
  <div	
  class="media__body">	
  
	
  	
  	
  	
  <p>...</p>	
  
	
  	
  </div>	
  
</div>
Block Modifier
Element
Element
MindBEMding
• 改良版 BEM,由 Nicolas Gallagher 提出
http://csswizardry.com/2013/01/mindbemding-getting-your-head-round-bem-syntax/
.block	
  {	
  ...	
  }	
  
.block-­‐-­‐modifier	
  {	
  ...	
  }	
  
.block__element	
  	
  {	
  ...	
  }	
  
.block__element-­‐-­‐modifier	
  {	
  ...	
  }
良好的 CSS 架構
• 預測 - Predictable
• 複⽤用 - Reusable
• 維護 - Maintainable
• 延展 - Scalable
http://philipwalton.com/articles/css-architecture/
取其精華,去其糟粕
THANKS
Kuro Hsu
kurotanshi [at] gmail.com
http://kuro.tw
http://facebook.com/kurotanshi

Contenu connexe

Tendances

世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計増田 亨
 
3週連続DDDその1 ドメイン駆動設計の基本を理解する
3週連続DDDその1  ドメイン駆動設計の基本を理解する3週連続DDDその1  ドメイン駆動設計の基本を理解する
3週連続DDDその1 ドメイン駆動設計の基本を理解する増田 亨
 
今必要なCSSアーキテクチャ
今必要なCSSアーキテクチャ今必要なCSSアーキテクチャ
今必要なCSSアーキテクチャMayu Kimura
 
ドメイン駆動設計入門
ドメイン駆動設計入門ドメイン駆動設計入門
ドメイン駆動設計入門Takuya Kitamura
 
プログラマが欲しい仕様書とは
プログラマが欲しい仕様書とはプログラマが欲しい仕様書とは
プログラマが欲しい仕様書とはKatsutoshi Makino
 
Optcarrot: A Pure-Ruby NES Emulator
Optcarrot: A Pure-Ruby NES EmulatorOptcarrot: A Pure-Ruby NES Emulator
Optcarrot: A Pure-Ruby NES Emulatormametter
 
DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】
DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】
DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】DeNA
 
Unity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニー
Unity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニーUnity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニー
Unity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニーYoshifumi Kawai
 
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発慎一 古賀
 
関数型・オブジェクト指向 宗教戦争に疲れたなたに送るGo言語入門
関数型・オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門関数型・オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門
関数型・オブジェクト指向 宗教戦争に疲れたなたに送るGo言語入門Tadahiro Ishisaka
 
ちいさなオブジェクトでドメインモデルを組み立てる
ちいさなオブジェクトでドメインモデルを組み立てるちいさなオブジェクトでドメインモデルを組み立てる
ちいさなオブジェクトでドメインモデルを組み立てる増田 亨
 
ドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動で開発する ラフスケッチから実装までドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動で開発する ラフスケッチから実装まで増田 亨
 
正しいものを正しく作る塾-設計コース
正しいものを正しく作る塾-設計コース正しいものを正しく作る塾-設計コース
正しいものを正しく作る塾-設計コース増田 亨
 
ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方増田 亨
 
ゲーム開発とMVC
ゲーム開発とMVCゲーム開発とMVC
ゲーム開発とMVCTakashi Komada
 
Effective Modern C++ 勉強会 Item 22
Effective Modern C++ 勉強会 Item 22Effective Modern C++ 勉強会 Item 22
Effective Modern C++ 勉強会 Item 22Keisuke Fukuda
 
リッチなドメインモデル 名前探し
リッチなドメインモデル 名前探しリッチなドメインモデル 名前探し
リッチなドメインモデル 名前探し増田 亨
 
Dalvik仮想マシンのアーキテクチャ 改訂版
Dalvik仮想マシンのアーキテクチャ 改訂版Dalvik仮想マシンのアーキテクチャ 改訂版
Dalvik仮想マシンのアーキテクチャ 改訂版Takuya Matsunaga
 
ドメイン駆動設計に15年取り組んでわかったこと
ドメイン駆動設計に15年取り組んでわかったことドメイン駆動設計に15年取り組んでわかったこと
ドメイン駆動設計に15年取り組んでわかったこと増田 亨
 
サービス開発における フロントエンド・ドメイン駆動設計の実践
サービス開発における フロントエンド・ドメイン駆動設計の実践サービス開発における フロントエンド・ドメイン駆動設計の実践
サービス開発における フロントエンド・ドメイン駆動設計の実践TakefumiYoshii
 

Tendances (20)

世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計
 
3週連続DDDその1 ドメイン駆動設計の基本を理解する
3週連続DDDその1  ドメイン駆動設計の基本を理解する3週連続DDDその1  ドメイン駆動設計の基本を理解する
3週連続DDDその1 ドメイン駆動設計の基本を理解する
 
今必要なCSSアーキテクチャ
今必要なCSSアーキテクチャ今必要なCSSアーキテクチャ
今必要なCSSアーキテクチャ
 
ドメイン駆動設計入門
ドメイン駆動設計入門ドメイン駆動設計入門
ドメイン駆動設計入門
 
プログラマが欲しい仕様書とは
プログラマが欲しい仕様書とはプログラマが欲しい仕様書とは
プログラマが欲しい仕様書とは
 
Optcarrot: A Pure-Ruby NES Emulator
Optcarrot: A Pure-Ruby NES EmulatorOptcarrot: A Pure-Ruby NES Emulator
Optcarrot: A Pure-Ruby NES Emulator
 
DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】
DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】
DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】
 
Unity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニー
Unity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニーUnity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニー
Unity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニー
 
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
 
関数型・オブジェクト指向 宗教戦争に疲れたなたに送るGo言語入門
関数型・オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門関数型・オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門
関数型・オブジェクト指向 宗教戦争に疲れたなたに送るGo言語入門
 
ちいさなオブジェクトでドメインモデルを組み立てる
ちいさなオブジェクトでドメインモデルを組み立てるちいさなオブジェクトでドメインモデルを組み立てる
ちいさなオブジェクトでドメインモデルを組み立てる
 
ドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動で開発する ラフスケッチから実装までドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動で開発する ラフスケッチから実装まで
 
正しいものを正しく作る塾-設計コース
正しいものを正しく作る塾-設計コース正しいものを正しく作る塾-設計コース
正しいものを正しく作る塾-設計コース
 
ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方
 
ゲーム開発とMVC
ゲーム開発とMVCゲーム開発とMVC
ゲーム開発とMVC
 
Effective Modern C++ 勉強会 Item 22
Effective Modern C++ 勉強会 Item 22Effective Modern C++ 勉強会 Item 22
Effective Modern C++ 勉強会 Item 22
 
リッチなドメインモデル 名前探し
リッチなドメインモデル 名前探しリッチなドメインモデル 名前探し
リッチなドメインモデル 名前探し
 
Dalvik仮想マシンのアーキテクチャ 改訂版
Dalvik仮想マシンのアーキテクチャ 改訂版Dalvik仮想マシンのアーキテクチャ 改訂版
Dalvik仮想マシンのアーキテクチャ 改訂版
 
ドメイン駆動設計に15年取り組んでわかったこと
ドメイン駆動設計に15年取り組んでわかったことドメイン駆動設計に15年取り組んでわかったこと
ドメイン駆動設計に15年取り組んでわかったこと
 
サービス開発における フロントエンド・ドメイン駆動設計の実践
サービス開発における フロントエンド・ドメイン駆動設計の実践サービス開発における フロントエンド・ドメイン駆動設計の実践
サービス開発における フロントエンド・ドメイン駆動設計の実践
 

Similaire à 漫談 CSS 架構方法 - 以 OOCSS, SMACSS, BEM 為例

Qq.com前端架构实践与思考
Qq.com前端架构实践与思考Qq.com前端架构实践与思考
Qq.com前端架构实践与思考greengnn
 
高效率的、可维护的Css
高效率的、可维护的Css高效率的、可维护的Css
高效率的、可维护的Csssimaopig
 
[译]Efficient, maintainable CSS
[译]Efficient, maintainable CSS[译]Efficient, maintainable CSS
[译]Efficient, maintainable CSSjeannewoo
 
CSS 培训
CSS 培训CSS 培训
CSS 培训S S
 
Sencha SDK Tools简介:IE6上也可以用CSS3?
Sencha SDK Tools简介:IE6上也可以用CSS3?Sencha SDK Tools简介:IE6上也可以用CSS3?
Sencha SDK Tools简介:IE6上也可以用CSS3?Frank Cheung
 
淘宝移动端Web开发最佳实践
淘宝移动端Web开发最佳实践淘宝移动端Web开发最佳实践
淘宝移动端Web开发最佳实践Du Yamin
 
淘宝移动端Web开发最佳实践
淘宝移动端Web开发最佳实践淘宝移动端Web开发最佳实践
淘宝移动端Web开发最佳实践jay li
 
程式人雜誌 -- 2014 年9月號
程式人雜誌 -- 2014 年9月號程式人雜誌 -- 2014 年9月號
程式人雜誌 -- 2014 年9月號鍾誠 陳鍾誠
 
2016年逢甲大學資訊系:ASP.NET MVC 4 教育訓練3
2016年逢甲大學資訊系:ASP.NET MVC 4 教育訓練32016年逢甲大學資訊系:ASP.NET MVC 4 教育訓練3
2016年逢甲大學資訊系:ASP.NET MVC 4 教育訓練3Duran Hsieh
 
浅析浏览器解析和渲染
浅析浏览器解析和渲染浅析浏览器解析和渲染
浅析浏览器解析和渲染Ailsa126
 
模块加载策略 - 2012 SDCC, 北京
模块加载策略 - 2012 SDCC, 北京模块加载策略 - 2012 SDCC, 北京
模块加载策略 - 2012 SDCC, 北京Joseph Chiang
 
编辑器设计Kissy editor
编辑器设计Kissy editor编辑器设计Kissy editor
编辑器设计Kissy editortaobao.com
 
Responsive Web UI Design
Responsive Web UI DesignResponsive Web UI Design
Responsive Web UI Designjay li
 
Html&css培训 舒克
Html&css培训 舒克Html&css培训 舒克
Html&css培训 舒克jay li
 
使用kslite支持第三方内容开发
使用kslite支持第三方内容开发使用kslite支持第三方内容开发
使用kslite支持第三方内容开发leneli
 
Dive into Responsive Web Design
Dive into Responsive Web DesignDive into Responsive Web Design
Dive into Responsive Web Designcncuckoo
 
不一樣的Web server... coServ
不一樣的Web server... coServ不一樣的Web server... coServ
不一樣的Web server... coServBen Lue
 
Html5和css3入门
Html5和css3入门Html5和css3入门
Html5和css3入门Xiujun Ma
 

Similaire à 漫談 CSS 架構方法 - 以 OOCSS, SMACSS, BEM 為例 (20)

Qq.com前端架构实践与思考
Qq.com前端架构实践与思考Qq.com前端架构实践与思考
Qq.com前端架构实践与思考
 
高效率的、可维护的Css
高效率的、可维护的Css高效率的、可维护的Css
高效率的、可维护的Css
 
[译]Efficient, maintainable CSS
[译]Efficient, maintainable CSS[译]Efficient, maintainable CSS
[译]Efficient, maintainable CSS
 
CSS 培训
CSS 培训CSS 培训
CSS 培训
 
Sencha SDK Tools简介:IE6上也可以用CSS3?
Sencha SDK Tools简介:IE6上也可以用CSS3?Sencha SDK Tools简介:IE6上也可以用CSS3?
Sencha SDK Tools简介:IE6上也可以用CSS3?
 
淘宝移动端Web开发最佳实践
淘宝移动端Web开发最佳实践淘宝移动端Web开发最佳实践
淘宝移动端Web开发最佳实践
 
淘宝移动端Web开发最佳实践
淘宝移动端Web开发最佳实践淘宝移动端Web开发最佳实践
淘宝移动端Web开发最佳实践
 
程式人雜誌 -- 2014 年9月號
程式人雜誌 -- 2014 年9月號程式人雜誌 -- 2014 年9月號
程式人雜誌 -- 2014 年9月號
 
2016年逢甲大學資訊系:ASP.NET MVC 4 教育訓練3
2016年逢甲大學資訊系:ASP.NET MVC 4 教育訓練32016年逢甲大學資訊系:ASP.NET MVC 4 教育訓練3
2016年逢甲大學資訊系:ASP.NET MVC 4 教育訓練3
 
浅析浏览器解析和渲染
浅析浏览器解析和渲染浅析浏览器解析和渲染
浅析浏览器解析和渲染
 
模块加载策略 - 2012 SDCC, 北京
模块加载策略 - 2012 SDCC, 北京模块加载策略 - 2012 SDCC, 北京
模块加载策略 - 2012 SDCC, 北京
 
编辑器设计Kissy editor
编辑器设计Kissy editor编辑器设计Kissy editor
编辑器设计Kissy editor
 
Responsive Web UI Design
Responsive Web UI DesignResponsive Web UI Design
Responsive Web UI Design
 
Html&css培训 舒克
Html&css培训 舒克Html&css培训 舒克
Html&css培训 舒克
 
使用kslite支持第三方内容开发
使用kslite支持第三方内容开发使用kslite支持第三方内容开发
使用kslite支持第三方内容开发
 
Dive into Responsive Web Design
Dive into Responsive Web DesignDive into Responsive Web Design
Dive into Responsive Web Design
 
不一樣的Web server... coServ
不一樣的Web server... coServ不一樣的Web server... coServ
不一樣的Web server... coServ
 
Html5和css3入门
Html5和css3入门Html5和css3入门
Html5和css3入门
 
CSS 菜鳥救星
CSS 菜鳥救星CSS 菜鳥救星
CSS 菜鳥救星
 
fis
fisfis
fis
 

漫談 CSS 架構方法 - 以 OOCSS, SMACSS, BEM 為例