.<module>[-<component>][-<state>] {}
這種體現模塊和組件的命名方式CSS 屬性聲明順序:css
.declaration-order { /* Positioning */ position: absolute; top: 0; right: 0; bottom: 0; left: 0; z-index: 100; /* Box-model */ display: block; float: right; width: 100px; height: 100px; /* Typography */ font: normal 13px "Helvetica Neue", sans-serif; line-height: 1.5; color: #333; text-align: center; /* Visual */ background-color: #f5f5f5; border: 1px solid #e5e5e5; border-radius: 3px; /* Misc */ opacity: 1; }
app-Component-class
。>
限定。all: initial
,Shadow DOM,<iframe>
。最少兩個字符,用-
分隔。html
.like-button
).search-form
).article-card
).rico-custom-header
)有的組件能夠用一個單詞就表示,這時能夠加後綴使它更清晰。前端
block-level element:git
.alert-box
.alert-card
.alert-block
Or for inlines:github
.link-button
.link-span
避免標籤選擇器。設計模式
儘可能使用>
子元素選擇器,而不是後代選擇器。瀏覽器
儘可能一個單詞,多個單詞不要用橫線和下劃線連接,例如:網絡
.profile-box { > h3 { /* ✗ avoid */ } .title { /* okay */ } > .author { /* ✓ better */ } > .firstname { /* ... */ } > .lastname { /* ... */ } > .avatar { /* ... */ } }
變體由橫線開頭。app
.like-button { &.-wide { /* ... */ } &.-short { /* ... */ } &.-disabled { /* ... */ } } .shopping-card { > .title { /* ... */ } > .title.-small { /* ... */ } }
橫線開頭的好處:ide
-
和_
開頭gcc -O2 -Wall -emit-last
)不要進入組件修改樣式,而是使用變體。
不要這樣:
.article-header { > .vote-box > .up { /* ✗ avoid this */ } }
要這樣:
<div class='article-header'> <div class='vote-box -highlight'> ... </div> ... </div>
.vote-box { &.-highlight > .up { /* ... */ } }
推薦使用繼承進行簡化。
不推薦:
<div class='search-form'> <input class='input' type='text'> <button class='search-button -red -large'></button> </div>
推薦:
<div class='search-form'> <input class='input' type='text'> <button class='submit'></button> </div>
.search-form { > .submit { @extend .search-button; @extend .search-button.-red; @extend .search-button.-large; } }
由於組件會用在各類上下文,所以要避免使用:
position
, top
, left
, right
, bottom
)float
, clear
)margin
)width
, height
) *上述 CSS 屬性應該設置在父元素,例如:
.article-list { & { @include clearfix; } > .article-card { width: 33.3%; float: left; } } .article-card { & { /* ... */ } > .image { /* ... */ } > .title { /* ... */ } > .category { /* ... */ } }
下劃線開頭,用來覆蓋某些屬性。不建議多用!
._unmargin { margin: 0 !important; } ._center { text-align: center !important; } ._pull-left { float: left !important; } ._pull-right { float: right !important; }
一個文件一個組件,能夠 @import 'components/*';
這樣引入所有組件的樣式。
最多使用一層嵌套,這樣可讀性好。
/* ✗ Avoid: 3 levels of nesting */ .image-frame { > .description { /* ... */ > .icon { /* ... */ } } } /* ✓ Better: 2 levels */ .image-frame { > .description { /* ... */ } > .description > .icon { /* ... */ } }
RSCSS | BEM | SMACSS |
---|---|---|
Component | Block | Module |
Element | Element | Sub-Component |
Layout | ? | Layout |
Variant | Modifier | Sub-Module & State |
ITCSS 表明_Inverted Triangle CSS_,它能夠幫助您組織項目 CSS 文件,從而能夠更好地處理(但並不老是易於處理)CSS 細節,例如全局命名空間,層疊和選擇器專注性。
ITCSS 的主要原則之一是將 CSS 代碼庫分爲幾個部分(稱爲_層_),這些部分採用倒三角形的形式:
倒三角形還顯示了選擇器表明的樣式在結果 CSS 中的排序方式:從通用樣式到顯式樣式,從低特定選擇器到高特定的選擇器(也不是很特定,由於不容許使用 ID),以及從普遍到局部。
ITCSS 與BEMIT 命名約定結合使用,使您能夠將更多精力放在解決前端挑戰上,而不用考慮名稱和樣式的位置。這是Xfive.co
的main.scss
@import "settings.colors"; @import "settings.global"; @import "tools.mixins"; @import "normalize-scss/normalize.scss"; @import "generic.reset"; @import "generic.box-sizing"; @import "generic.shared"; @import "elements.headings"; @import "elements.hr"; @import "elements.forms"; @import "elements.links"; @import "elements.lists"; @import "elements.page"; @import "elements.quotes"; @import "elements.tables"; @import "objects.animations"; @import "objects.drawer"; @import "objects.list-bare"; @import "objects.media"; @import "objects.layout"; @import "objects.overlays"; @import "components.404"; @import "components.about"; @import "components.archive"; @import "components.avatars"; @import "components.blog-post"; @import "components.buttons"; @import "components.callout"; @import "components.clients"; @import "components.comments"; @import "components.contact"; @import "components.cta"; @import "components.faq"; @import "components.features"; @import "components.footer"; @import "components.forms"; @import "components.header"; @import "components.headings"; @import "components.hero"; @import "components.jobs"; @import "components.legal-nav"; @import "components.main-cta"; @import "components.main-nav"; @import "components.newsletter"; @import "components.page-title"; @import "components.pagination"; @import "components.post-teaser"; @import "components.process"; @import "components.quote-banner"; @import "components.offices"; @import "components.sec-nav"; @import "components.services"; @import "components.share-buttons"; @import "components.social-media"; @import "components.team"; @import "components.testimonials"; @import "components.topbar"; @import "components.reasons"; @import "components.wordpress"; @import "components.work-list"; @import "components.work-detail"; @import "vendor.prism"; @import "trumps.clearfix"; @import "trumps.utilities"; @import "healthcheck";