แแแแแแ: Airbnb/CSS
แงแแแแแแ แแแแแแ แฃแแ แแแแแแแ CSS-แแกแ แแ Sass-แแก แฌแแ แแกแแแแแก
แกแแแแฅแขแแ แแก (แแ แกแแแแฅแขแแ แแ แฏแแฃแคแแก) แแ แแแกแ แแแแแฎแแแแ แแแแกแแแแแแก แแ แแแแแแแแแก โแฌแแกแแก แแแแแแ แแชแแโ แแฌแแแแแ. แแแแแแแแ:
.listing {
font-size: 18px;
line-height: 1.2;
}
แฌแแกแแก แแแแแแ แแชแแแจแ โแกแแแแฅแขแแ แโ แแ แแก แแก แแแฌแแแ, แ แแแแแแช แแแแกแแแฆแแ แแแก, DOM-แจแ แจแแแแแแแ แแแแแแแขแแแแแแ แ แแแแแแแก แกแขแแแแแแแ แฃแแแ แแแฎแแแก แแแแกแแแฆแแ แฃแแ แแแแกแแแแแแ. แกแแแแฅแขแแ แ แจแแแซแแแแ แจแแแกแแแแแแแแแแก HTML-แแแแแแแขแแแก, แแกแแแ แแแแแแแขแแก แแแแกแก, ID-แก แแ แแแก (แแแแแแแขแแก) แแแแแกแแแแ แแขแ แแแฃแขแก. แกแแแแฅแขแแ แแ แแแแแงแแแแแแก แแแแแแแแแแ:
.my-element-class {
/* ... */
}
[aria-hidden] {
/* ... */
}
แแแแแแแก, แแแแกแแแแแ แฌแแกแแก แแแแแแ แแชแแแก แแก แแแฌแแแแ, แ แแแแแแช แจแแ แฉแแฃแ แแแแแแแขแแแก แกแขแแแก แแแแญแแแก. แแแแกแแแแแ แฉแแฌแแ แ แฎแแแแ แจแแแแแแ แกแแฎแแ: แแแกแแฆแแแ: แแแแจแแแแแแแ
. แฌแแกแแก แแแแแแ แแชแแ แจแแแซแแแแ แจแแแชแแแแแก แแแแกแแแแก แแ แ แแ แแแข แแแแแแ แแชแแแก. แแแแกแแแแแ แแแแแแ แแชแแแแ แจแแแแแแแแแ แแ แแแแแแงแฃแ แแแ:
/* แ แแแแ แกแแแแฅแขแแ แ */ {
background: #f1f1f1;
color: #333;
}
- แแแแแชแแแแกแแแแแก แแแแแแงแแแแ แ แแแแ แขแแแฃแแแชแแ (2 แจแฃแแแแแ).
- แแแแกแแก แกแแฎแแแแแจแ, แ.แฌ. โแแฃแแแแแ แแแขแแชแแแกโ1 แแแชแแแแ แฃแแฏแแแแกแแ แแแแแแงแแแแ แขแแ แแแแ.
- แฅแแแขแแ แแแแ แแ แ.แฌ. โแแแกแแแแแก แแแขแแชแแโ2 แแแกแแจแแแแแ, แแฃแแ แแงแแแแแ BEM-แก (แแฎแแแแ OOCSS แแ BEM).
- แแ แแแแแแงแแแแ ID-แกแแแแฅแขแแ แแแ.
- แ แแแแกแแช แฌแแกแแก แแแแแแ แแชแแแจแ แแ แแแแ แกแแแแฅแขแแ แก แแงแแแแแ, แงแแแแแ แกแแแแฅแขแแ แ แแแแแแแแกแแ แแฎแแ แฎแแแแ.
- แฌแแกแแก แแแแแแ แแชแแแแจแ แแแแฎแกแแแแ
{
แคแ แฉแฎแแแแก แฌแแ แแแแแแแแกแแ แจแฃแแแแแ. - แแแแกแแแแแจแ
:
แแ แฌแแ แขแแแแก แจแแแแแ แแแแแแแแกแแ แจแฃแแแแแ (แแ แฌแแ แขแแแแแแ โ แแ แ). - แฌแแกแแก แแแแแแ แแชแแแแ แแแแฎแฃแ แแแ
}
แคแ แฉแฎแแแแแ แแแแแแแแกแแ แแฎแแ แฎแแแแ. - แฌแแกแแก แแแแแแ แแชแแแแ แแ แแแแแแแแกแแแแ แแแแแงแแแแ แชแแ แแแแ แฎแแแแแแ.
แชแฃแแแ
.avatar{
border-radius:50%;
border:2px solid white; }
.no, .nope, .not_good {
// ...
}
#lol-no {
// ...
}
แแแ แแแ
.avatar {
border-radius: 50%;
border: 2px solid white;
}
.one,
.selector,
.per-line {
// ...
}
- แแ แแแแแกแขแ แแฅแแแแแแ แแแแแแขแแ แแแแก แแแชแแแแ แฃแแฏแแแแกแแ, แฌแแ แแ แแ แแกแขแ แแฅแแแแแแ แแแแแแขแแ แแแ (
//
Sass-แจแ). - แฃแแฏแแแแกแแ, แแแแแแขแแ แแแ แแแแแแแแกแแ แชแแแแ แฎแแแแ. แแแแ แแแแ แแแแแแขแแ แแแแก แฌแแ แแก แแแแแก แกแขแ แแฅแแแแก แแแแแจแ.
- แฌแแ แแ แแแขแแแฃแ แ แแแแแแขแแ แแแ แแแแแกแแแแแก, แ แแแแแแช แกแแแฃแแแ แแแแก แแแกแแแแแแ แแ แแฆแฌแแ แก:
- แแแแจแ แแแแแงแแแแแฃแแแ z-index;
- แแแแ แจแแแชแแแก แแแแกแแแแแแแแกแแแแแก แแ แแแแแ แแขแฃแแ แแ แแฃแแแ แแกแแแแแก แแแแแฃแแแแแ โแฎแ แแแแแกโ.
แฉแแแ แแแ แฉแแแ OOCSS-แแกแ แแ BEM-แแก แแแ แแแแฃแ แแแแแแแแชแแแก แจแแแแแแ แแแแแแแแแแแ แแแแแแแแแแ แ:
- แแก แแแแแฎแแแ แแแแ, แจแแฅแแแแ แแแแคแแ, แแแแชแ แ แฃแ แแแแ แแแแแแ CSS-แกแ แแ HTML-แก แจแแ แแก;
- แแก แแแแแฎแแแ แแแแ, แจแแฅแแแแ แแ แแแแแฏแแ แแแ, แแแแแแแแขแฃแ แ แแแแแแแแแขแแแ;
- แแก แแแแแฎแแแ แแแแ, แจแแแแชแแ แแ แฉแแแแแแแแก แ แแแแแแแแ (nesting) แแ แแแกแฌแแแ แแแแแ แแขแแแแก แแแแ;
- แแก แแแแแฎแแแ แแแแ, แจแแฅแแแแ แกแขแแแแก แแแกแจแขแแแแ แแแแแ แคแฃแ แชแแแแ (stylesheets).
OOCSS, แแแแแ โแแแแแฅแขแแ แแ แแแแขแแ แแแฃแแ CSSโ, แแ แแก CSS-แแก แฌแแ แแก แแแแแแแ, แ แแแแแแช แแแแแซแแแแ, แแคแแฅแ แแ แแฅแแแแก แกแขแแแแก แคแฃแ แชแแแแแ (stylesheets), แ แแแแ แช โแแแแแฅแขแแโ แแ แแแแแแแแแแ: แแ แแแแแฏแแ แแ, แแแแแก แแแแแแแ แแแแ แคแ แแแแแแขแแแแ, แ แแแแแแแช แจแแกแแซแแแแแแแ แฎแแแแฎแแ แแฅแแแก แแแแแงแแแแแฃแแ แแแแแฃแแแแแแแแ, แแแแกแแแขแแก แแแกแจแขแแแแ.
- Nicole Sullivan-แแก OOCSS wiki
- Smashing Magazine-แแก Introduction to OOCSS
BEM, แแแแแ โแแแแแ-แแแแแแแขแ-แแแแแคแแแแขแแ แโ, แแ แแก แกแแฎแแแแแแแก แแแแแแแแแแแ แแแ แแแแกแแแแกแแแแแก HTML-แกแ แแ CSS-แจแ. แแแ แแแแแแแแ แแแแแ แจแแแแฃแจแแแ Yandex-แแ, แแแแ แแแชแฃแแแแแ แแแแแกแ แแ แแแกแจแขแแแฃแ แแแแก แแแแแแแแกแฌแแแแแแ. แแก แจแแแซแแแแ แแแแแแแแแแ OOCSS-แแก แ แแแแแแแแแกแแแแแก, แ แแแแ แช แแแแแแแแแแ แกแแคแฃแซแแแแแแ แแแแ แแแ.
- CSS Trick-แแก BEM 101
- Harry Roberts-แแก introduction to BEM
แฉแแแ แแแ แฉแแแ BEM-แแก แแแ แแแแขแก โแแแกแแแแฃแ แ แแแขแแชแแแกโ (PascalCased) โแแแแแแแแโ, แ แแแแแแช แแแขแแแ แ แแแ แแแ แแฃแจแแแแก แแแจแแ, แ แแชแ แแแแแแแแ แแแฃแแแ แแแแแแแแแขแแแแแ (แแแ. React). แฅแแแขแแ แแแแ แแ แขแแ แแแแ แแแแแแแช แแแแแแงแแแแแ แแแแแคแแแแขแแ แแแแกแ แแ แจแแแแแแแแ แแแแแแแขแแแแกแแแแแก.
แแแแแแแแ
// ListingCard.jsx
function ListingCard() {
return (
<article class="ListingCard ListingCard--featured">
<h1 class="ListingCard__title">Adorable 2BR in the sunny Mission</h1>
<div class="ListingCard__content">
<p>Vestibulum id ligula porta felis euismod semper.</p>
</div>
</article>
);
}
/* ListingCard.css */
.ListingCard { }
.ListingCard--featured { }
.ListingCard__title { }
.ListingCard__content { }
.ListingCard
แแ แแก โแแแแแโ แแ แฌแแ แแแแแแแแก แฃแแแฆแแแกแ แแแแแก (higher-level) แแแแแแแแแขแก..ListingCard__title
แแ แแก โแแแแแแแขแโ แแ แฌแแ แแแแแแแแก.ListingCard
-แแก แจแแแแแแแแแแก, แ แแช แแแแแแก แแ แ แแแแแแแแแแ แฉแแแแงแแแแแแแแก แฃแฌแงแแแก แฎแแแก..ListingCard--featured
แแ แแก โแแแแแคแแแแขแแ แโ แแ แแกแแฎแแแก แแแแแแก แแแแแแแ แแแแแก แแ แแแ แแแชแแแก.
แแแฃแฎแแแแแแ แแแแกแ, แ แแ CSS-แจแ แแแแแแแขแแแแก แจแแ แฉแแแ (แกแแแแฅแชแแ) แจแแกแแซแแแแแแแ ID-แแก แแแแแงแแแแแแ, แแแแแแแ, แแก แฃแแแ แฉแแแแแแแแก แชแฃแ แแ แแฅแขแแแแ. ID-แกแแแแฅแขแแ แแแก แแฅแแแแก แฌแแกแแ แแแแแแ แแชแแแแจแ แจแแแแแฅแแ แกแแแชแแคแแแฃแ แแแแก แแแแแแขแแ แแแฆแแแ แแแแ. แแแแกแแแ, แจแแฃแซแแแแแแแ แแแแ แฎแแแแฎแแ แแแแแงแแแแแ.
แแ แแแแแกแแแ แแแแแแจแแ แแแแ แแแขแแ แแแขแแแฃแ แ แแแคแแ แแแชแแแก แแแกแแฆแแแแ แแฎแแแแ แจแแแแแแ แกแขแแขแแ: CSS Wizardry's article.
แแแแ แแแแ แแ แแกแ แแ แแแแแ แแแแกแแแ แแแแแแจแแ แแแแก CSS-แแแ แแ JavaScript-แแแ. แแ แแ แแก แจแแ แฌแงแแ แฎแจแแ แแ แแฌแแแแก, แ แแแแ แช แแแแแแฃแ, แแ แแแก แแแแแ แแแแก แ แแคแแฅแขแแ แแ แแแแกแแก, แ แแแแแ แแแแแแแแแ แก แฃแฌแแแก แแแแแแฃแแ แแแแกแแก แแแแจแแแแแแแแก แแแ แแแแแ, แแแแ แ แชแแแแแแแแก แจแแแขแแแก, แฎแแแ แฃแแ แแก แจแแแแฎแแแแแจแ, แแแแแแแแแ แ, แคแฃแแฅแชแแแแแ แแแแก แแแจแแแก แจแแจแแ, แงแแงแแแแแแก แชแแแแแแแแแแก แจแแขแแแแก.
แฉแแแ แแแ แฉแแแ, แจแแฅแแแแ แชแแแแแฃแแ แแแแกแแแ JavaScript-แแกแแแแก .js-
แแแแกแแ แแแ:
<button class="btn btn-primary js-request-to-book">Request to Book</button>
none
-แแก แแแชแแแแ แแแแแแงแแแแ 0
, แ แแแ แแแฃแแแแแ, แ แแ แกแขแแแก แแ แแแแฉแแแ แแแแขแฃแ แ (border).
แชแฃแแแ
.foo {
border: none;
}
แแแ แแแ
.foo {
border: 0;
}
- แแแแแแงแแแแ
.scss
แกแแแขแแฅแกแ. แแ แแกแแแแก แแแแแแงแแแแ.sass
แกแแแขแแฅแกแ. - แแแแแแแแ แ แแแฃแแแ แฃแแ CSS-แ แแ
@include
แแแแแแ แแชแแแแ แแแแแแฃแ แแ (แแฎ. แฅแแแแแ).
-
แแแแกแแแแแ แแแแแแ แแชแแแแ
แฉแแแแแแแแแ แงแแแแแ แกแขแแแแแ แขแฃแแ แแแแกแแแแแ แแแแแแ แแชแแ, แงแแแแแคแแ แ, แ แแช แแ แแ แแก
@include
แแ แฉแแแแแฃแแ แกแแแแฅแขแแ แ..btn-green { background: green; font-weight: bold; // ... }
-
@include
แแแแแแ แแชแแแแ@include
-แแแแก แแแแแจแ แแแแแแแกแแแ แแแแ แขแแแแแก แแแแแแแ แกแแแแฅแขแแ แแก แฌแแแแแฎแแแก..btn-green { background: green; font-weight: bold; @include transition(background 0.5s ease); // ... }
-
แฉแแแแแฃแแ (nested) แกแแแแฅแขแแ แแแ
แฉแแแแแฃแแ แกแแแแฅแขแแ แแแ (แแแแ แแแแแงแแแแแแก แกแแญแแ แแแแแก แจแแแแฎแแแแแจแ) แแแแกแแแแ แแแแแจแ, แแแ แจแแแแแ แแ แแ แแคแแ แ แฃแแแ แแแแแแแกแแแก. แแแแแแขแแ แชแแ แแแแ แกแขแ แแฅแแแ แฌแแกแแก แแแแแแ แแชแแแแกแ แแ แฉแแแแแฃแ แกแแแแฅแขแแ แแแก แจแแ แแก, แแกแแแ แแแแแฏแแแแ แฉแแแแแฃแ แกแแแแฅแขแแ แแแก แจแแ แแก. แฉแแแแแฃแแ แกแแแแฅแขแแ แแแแกแแแแแก แแแแแแงแแแแ แแแแแ แแแกแขแ แฃแฅแชแแแแ, แ แแแแแแแช แแแแแ แแ แแก แแแชแแแฃแแ.
.btn { background: green; font-weight: bold; @include transition(background 0.5s ease); .icon { margin-right: 10px; } }
แฃแแฏแแแแกแแ, แชแแแแแแก แกแแฎแแแแแ แฉแแฌแแ แแ แขแแ แแแแแก แแแแแงแแแแแแ (แแแ. $my-variable
), แแแแ โแแฃแแแแแ แแแขแแชแแแกโ (camelCased) แแ แฅแแแขแแ แแก (snake_cased) แแแแแงแแแแแแ แฉแแฌแแ แแก แแแชแแแแ. แแแกแแจแแแแแ แฅแแแขแแ แแก แแแแกแแ แแแ แแแแแงแแแแแ (แแแ. $_my-variable
) แแกแแแ แชแแแแแแแแก แฉแแกแแฌแแ แแ, แ แแแแแแ แแแแแงแแแแแแช แแแแแแแแกแฌแแแแแฃแแแ แแฎแแแแ แแแแแ แคแแแแแก แแแกแจแขแแแแ.
แแแฅแกแแแแแแก แแแแแงแแแแแ แฃแแแ แแแฎแแแก แแแแแกแแแแแก แกแแชแฎแแแแก แแ แแแกแขแ แแฅแขแฃแแ แกแแ แแฃแแแก แจแแกแแแแขแแแแแ (แแแแฎแแแแแแ แแแแแแแแแ แแ, แ แแแแ แช แคแฃแแฅแชแแแแแกแแแแแก แกแแฎแแแแแแก แกแฌแแ แแ แจแแ แฉแแแแกแแก). แแแฅแกแแแแแ, แ แแแแแแแช แแ แแฆแแแก แแ แแฃแแแแขแแแก, แจแแแซแแแแ แแแแแแแแก แแแแกแแแแก, แแแแ แแ แแแแแแแแแกแฌแแแแ, แ แแ แแฃ แแฅแแแแก แคแแแแก แแ แจแแแฃแแจแแแ (แแแ. gzip), แแแแ แจแแแซแแแแ แฎแแแ แจแแฃแฌแงแแก แแแแแก แแแฃแแแแแแกแฌแแแแแแ แแแแแแ แแแแก (แแฃแแแแแแชแแแก).
@extend
-แแก แแแแแงแแแแแแก แฃแแแ แแแแ แแแแ, แ แแแแแ แแแก แแฎแแกแแแแแแก แแ แแแแขแฃแแชแแฃแ แ แแ แแแขแแแชแแฃแ แแ แกแแจแแจแ แฅแชแแแ, แแแแกแแแฃแแ แแแแ แแแจแแ, แ แแชแ แฉแแแแแฃแ แกแแแแฅแขแแ แแแแแ แแแแแแงแแแแแ. แแแแ แแแแแก แจแแแแแกแแแแแแ (placeholder) แกแแแแฅแขแแ แแแแแช แแ แจแแแซแแแแ แแแแแแฌแแแแก แแ แแแแแแแแ, แแฃแแ แกแแแแฅแขแแ แแ แแแแแแแแแแ แแแ แแแแแแแแแแแ แจแแแชแแแแแ (แแแ. แแฃ แแกแแแ แแแแแแแกแแแฃแแแ แชแแแแแฃแ แคแแแแแแจแ แแ แคแแแแแ แฉแแขแแแ แแแแก แแแแแแแแแแ แแแ แจแแแชแแแแแ). แจแแแฃแแจแแแ (Gzipping) แฃแแแ แแแแแแฆแแฃแ แแก แแ แฃแแแ แแขแแกแแแแแ แฃแแแขแแกแแแ, แ แแแแแแกแแช แแแแฆแแแแแ @extend
-แแก แแแแแงแแแแแแก แจแแแแฎแแแแแจแ, แฎแแแ แแแแแกแแแแแก แกแแชแฎแแแแก แจแแแแขแแแแกแแแแแก แแแฅแกแแแแแ แแจแแแแแแ แ แกแแจแฃแแแแแแ.
แกแแแแฅแขแแ แแ แฉแแแแแแก แกแแฆแ แแ แแ แฃแแแ แแฆแแแแขแแแแแแก แกแแแก!
.page-container {
.content {
.profile {
// แจแแฉแแ แแแ!
}
}
}
แ แแแแกแแช แกแแแแฅแขแแ แแแ แแ แกแแแ แซแแก แฎแแแแ, แกแแแแ แแฃแแแ, แแฅแแแ แแแแ แแแฌแแ แแแ CSS-แ:
- แแขแแแชแแ แแ แแก แแแแแแจแแ แแแฃแแ HTML-แแแ (แแงแแคแ); โแแโ
- แแแขแแกแแแขแแ แแแแแ แแขแฃแแแ; โแแโ
- แแ แแ แแก แฎแแแแฎแแ แแแแแงแแแแแแแ.
แแแแแ แแ แแฎแแ: แแ แแกแแแแก แแแแฎแแแแแ ID-แกแแแแฅแขแแ แแแแก แฉแแแแแ (nesting)!
แแฃ แแแฌแแแ ID-แกแแแแฅแขแแ แแก แแแแแงแแแแแ (แ แแกแแช, แแแ แแ แแฅแแแแ, แแฃ แแแแก แแแ แแแแแ), แแแแ แฉแแแแแ แแ แแกแแแแก แฃแแแ แแแฎแแแก. แแฃ แแแแก แแฃแชแแแแแแแแแก แฌแแแแจแ แแแแแแแแ, แฃแแฏแแแแกแแ, แแแแแ แแ แแฎแแ แแแแแฎแแแแ แแฅแแแแก แแแ แแแ แแแแก (HTML-แก) แแ แแแแ แแแแแ, แ แแ แแแแแแฌแแแ แแกแแแ แซแแแแ แ แแแแแ แแขแฃแแแแแก แกแแญแแ แแแแ. แแฃ แแฅแแแแ HTML-แ แแ CSS-แ แกแฌแแ แแ แแฅแแแแ แกแขแ แฃแฅแขแฃแ แแ แแแฃแแ, แแแแก แแแแแแแแแก แกแแญแแ แแแแ แแ แแกแแแแก แแแฅแแแแแ.
(The MIT License)
Copyright (c) 2015 Airbnb
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Footnotes
-
แ แแแแแแแแ แกแแขแงแแแก แแแแแแแฃแแแ แแแฌแแ แ แแแแแแ แแ, แ แแ แงแแแแแ แกแแขแงแแ, แแแ แแ แแแ แแแแแกแ, แแแแ แแกแแแ แแฌแงแแแแแแก, แแแ.: exampleOfCamelCasing; (แแแแ. Camel case) โฉ
-
แ แแแแแแแแ แกแแขแงแแแก แแแแแแแฃแแแ แแแฌแแ แ แแแแแแ แแ, แ แแ แงแแแแแ แกแแขแงแแ, แแแ แแแแแก แฉแแแแแแ, แแแแ แแกแแแ แแฌแงแแแแแแก, แแแ.: ExampleOfPascalCasing; (แแแแ. Pascal case) โฉ