Less.js: рдЪрдпрдирдХрд░реНрддрд╛ рдХреЛ рдПрдХ рдЪрд░ рдореЗрдВ рд╕рд╣реЗрдЬрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 20 рдЕрдкреНрд░реИрд▓ 2017  ┬╖  50рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: less/less.js

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдпрд╣ рд╕рдорд╛рдзрд╛рди рд╣реИ:

// LESS
.selector {
    <strong i="6">@r</strong>: ~'.selector';

    &--mode {
        @{r}__block {
            prop: value;
         }
    }
}

// CSS
.selector--mode .selector__block {
  prop: value;
}

рд▓реЗрдЦрди: рдореИрдВ рдПрдХ рд╕реБрд╡рд┐рдзрд╛ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ <strong i="9">@r</strong>: &; рдХреЗ рдмрдЬрд╛рдп <strong i="11">@r</strong>: ~".selector"; рдХрд┐рд╕реА рднреА рдЪрд░ рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдЪрдпрдирдХрд░реНрддрд╛ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдЙрд╕реЗ рд╕рд╣реЗрдЬреЗрдВред

рдЙрджрд╛рд╣рд░рдг:

// LESS
.selector {
  <strong i="15">@r</strong>: &; // .selector
}

.selector {
  &__inner {
    <strong i="16">@r</strong>: &; // .selector__inner
  }
}

.selector {
  &--modification &__inner {
    <strong i="17">@r</strong>: &; // .selector--modification .selector__inner
  }
}
feature request medium priority needs decision research needed

рд╕рднреА 50 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдЙрддреНрд╕реБрдХрддрд╛ рд╕реЗ рдореБрдЭреЗ рдкреВрд░рд╛ рдпрдХреАрди рдерд╛ рдХрд┐ рдРрд╕рд╛ рдЕрдиреБрд░реЛрдз рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд╣реИред рдЬрд╛рд╣рд┐рд░ рддреМрд░ рдкрд░ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИред
(рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдкрд╣рд▓реЗ рдХрдИ рдЯрд┐рдХрдЯреЛрдВ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ рдерд╛: #1174, https://github.com/less/less.js/issues/1075#issuecomment-16891103 рдЖрджрд┐)
рддреЛ рдРрд╕рд╛ рд╣реЛрдиреЗ рджреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИред


рдмреАрдЯреАрдбрдмреНрд▓реНрдпреВред, рдмрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ (рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд impl./syntax рд╕рдВрдШрд░реНрд╖реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓реЛрдВ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП):
рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ? рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдХрдИ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдпрд╣ рдЖрд▓рд╕реА-рдореВрд▓реНрдпрд╛рдВрдХрди рдХреЗ рдХрд╛рд░рдг рдЖрдкрдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХреЗ рдЕрдиреБрд░реВрдк рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдЬреИрд╕реЗ:

a {
    <strong i="11">@r</strong>: &;
    b {
        something: @r;
    }
}

рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рд╣реЛрдЧрд╛:

a b {
    something: a b; // not a!
}

рдХреНрдпреЛрдВрдХрд┐ @r рдореВрд▓реНрдп рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ a b рдЕрдВрджрд░ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдпрд╛рдиреА рдЬрд╣рд╛рдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдЙрд╕ рдмрд┐рдВрджреБ рдкрд░ рдирд╣реАрдВ рдЬрд┐рд╕реЗ рдЖрдк рдЗрд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ)ред
(рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдХреБрдЫ рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓реЛрдВ рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЕрдиреНрдп рднрд╛рд╖рд╛ рдирд┐рд░реНрдорд╛рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ - рди рдХреЗрд╡рд▓ рдПрдХ рдЪрд░ред рдФрд░ рдХрдИ рдЕрдиреНрдп рд╕рдВрдмрдВрдзрд┐рдд рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓реЛрдВ рдХреЛ рдкрд╣рд▓реЗ # 1075 рдХреЗ рд╡рд┐рд╖рдп рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рдерд╛)ред

рдХрдИ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдпрд╣ рдЖрд▓рд╕реА-рдореВрд▓реНрдпрд╛рдВрдХрди рдХреЗ рдХрд╛рд░рдг рдЖрдкрдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХреЗ рдЕрдиреБрд░реВрдк рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛
рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдХреБрдЫ рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓реЛрдВ рдХреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреБрдЫ рдЕрдиреНрдп рднрд╛рд╖рд╛ рдирд┐рд░реНрдорд╛рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ - рди рдХреЗрд╡рд▓ рдПрдХ рдЪрд░

рдЪрдпрдирдХрд░реНрддрд╛ рд╕рдВрджрд░реНрдн рдХреЛ рдЙрд╕ рдмрд┐рдВрджреБ рдкрд░ рдХреИрдкреНрдЪрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдЙрд╕ рд╡рд┐рд╢реЗрд╖ рднрд╛рд╖рд╛ рдирд┐рд░реНрдорд╛рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдЬрд┐рд╕ рдмрд┐рдВрджреБ рдкрд░ рдЗрд╕реЗ рдЙрд╕ рдЪрд░ рдХреЗ рдореВрд▓реНрдпрд╛рдВрдХрди рджреНрд╡рд╛рд░рд╛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЗрд╕реЗ рдЕрд╕рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдореВрд▓реНрдпрд╛рдВрдХрди рдХреЛ рдХреЗрд╡рд▓ рдЙрд╕ рд╕рдВрджрд░реНрдн рдХрд╛ рдЙрддреНрд╕рд░реНрдЬрди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд╛ рд╕реНрдерд▓ рдкрд░ рдХреИрдж рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдЪрд░ рдХреЛ рдмрдВрдж рдХрд░рдХреЗ рджреЗрдЦрдиреЗ рд╕реЗ рдмрд╣реБрдд рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рд╛рдБ; рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рднрд╛рд╖рд╛ рдирд┐рд░реНрдорд╛рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рди рдХрд┐ рдПрдХ рд╕рдорд╛рд░реЛрд╣ рдХреАред

@rjgotten

рд╣рд╛рдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдкрд╣рд▓реЗ рдХреБрдЫ selector рдЫрджреНрдо-рдХрд╛рд░реНрдп рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ (рдЫрджреНрдо рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рдирд┐рдпрдорд┐рдд рдлрд╝рдВрдХреНрд╢рди рдкрд╛рд░реНрд╕рд┐рдВрдЧ рд╡реИрд╕реЗ рднреА рд╕рднреА рдЪрдпрдирдХрд░реНрддрд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрдпреЛрдЬрдХреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓ рдирд╣реАрдВ рд╕рдХрддрд╛ рд╣реИ) рдФрд░ рдлрд┐рд░ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЫрджреНрдо рд╣реИ (рдпрд╛рдиреА рдПрдХ рд╕рдорд░реНрдкрд┐рдд рдкреНрд░рдХрд╛рд░ рдЬреИрд╕реЗ Url ) рдЗрд╕реЗ рдЗрд╕рдХреЗ рдкрд░рд┐рднрд╛рд╖рд╛ рд╕рдВрджрд░реНрдн рдХреЛ рднреАрддрд░ рдЦреАрдВрдЪрдиреЗ рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реЛрдЧреА (рдпрджрд┐ рдореБрдЭреЗ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдпрд╛рдж рд╣реИ рдХрд┐ рдбреАрдЖрд░ рдмрд┐рд▓реНрдХреБрд▓ рдРрд╕рд╛ рд╣реА рдХрд░рддреЗ рд╣реИрдВ)ред
рддреЛ <strong i="10">@foo</strong>: selector(&); рдЬреИрд╕рд╛ рдХреБрдЫ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдЪрд╛рд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдлрд┐рд░ рдПрдХ рдЫреЛрдЯреА рд╕реА рд╕рдорд╕реНрдпрд╛ рдЦрдбрд╝реА рд╣реЛ рдЬрд╛рддреА рд╣реИ:

a {
    <strong i="13">@var</strong>: selector(x, #y & .z);

    b {
        @{var} { // ? is it regular & or "saved-context-&" ?
            // ...
        }
    }
}

рддреЛ рд╕рдВрднрд╡рддрдГ рдЗрд╕реЗ & рдСрдкрд░реЗрдЯрд░/рдХреАрд╡рд░реНрдб рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЕрдиреНрдп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред (рдпрд╛ рд╢рд╛рдпрдж рд╕рд┐рд░реНрдл рдПрдХ рд╕рдорд░реНрдкрд┐рдд рдЫрджреНрдо-рдХрд╛рд░реНрдп, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП current-selector() ... рд╣рдореНрдо, рдЕрдм рдЬреЛ рдореБрдЭреЗ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп PseudoFunction рдкреНрд░рдХрд╛рд░ рдХреЛ рдХреЛрдб рдХрд░рдиреЗ рдХреЗ рд╡рд┐рдЪрд╛рд░ рдореЗрдВ рд▓рд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдЫреЛрдЯреЗ рдЧреБрдбреА рдХреЗ рдПрдкреАрдЖрдИ рдХреЛ рдкреНрд░рджреВрд╖рд┐рдд рди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ, рдУрд╣! :)ред

рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рднрд╛рд╖рд╛ рдореЗрдВ рдирдИ рдЪреАрдЬреЗрдВ рдЬреЛрдбрд╝рдиреЗ рдореЗрдВ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЭрд┐рдЭрдХ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдЪрдпрдирдХрд░реНрддрд╛ рд╡рд┐рдирд┐рд░реНрджреЗрд╢рдХ рдЖрд╕рд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдореБрдЭреЗ | , рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ CSS @namespace рдЪрдпрдирдХрд░реНрддрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдРрд╕рд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ | рдХреЛ рдПрдХ рдЪрдпрдирдХрд░реНрддрд╛ рдХреЛ _start_ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдореЗрдВ рд╡рд┐рд░реЛрдз рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдореИрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдореБрдЭреЗ рдЧрдгрд┐рдд рдХреЗ "рдкреВрд░реНрдг рдореВрд▓реНрдп" рдХреА рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реИ рдЬреЛ рдЕрд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЙрдкрдпреБрдХреНрдд рд▓рдЧрддрд╛ рд╣реИ, рдФрд░ 'рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЖрд╕рд╛рди рд╣реИред рдмрд╛рддрдЪреАрдд рдХреЛ рдкреНрд░реЗрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╕ рдПрдХ рд╡рд┐рдЪрд╛рд░ред

a {
  <strong i="10">@var</strong>: |x, #y & .z|; // starting w/ `|` means selector, in current context, ended w/ another `|`
  b {
    @{var} {
      //...
    }
  }
}

(рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдпрд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ _any_ var рдХреЛ рддреБрд░рдВрдд рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрд╛ рдЬреЛ рднреА рд╣реЛ? рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ _way_ рдУрд╡рд░-рд╕реНрдХреЛрдкрд┐рдВрдЧ рд╣реИред)

рдХреНрдпрд╛ рдпрд╣ рдирд┐рдпрдорд┐рдд & рдпрд╛ saved-context-& ?

рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рд╕рд╛рдЗрдЯ рдкрд░ рдЪрдпрдирдХрд░реНрддрд╛ рд╕рдВрджрд░реНрдн рдХреЛ рдХреИрдкреНрдЪрд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП selector() рдЫрджреНрдо-рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ & рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди _that_ рд╕рдВрджрд░реНрдн рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЕрдВрддрд┐рдо рдкрд░рд┐рдгрд╛рдо рдЗрд╕ рдирдП рдкреНрд░рдХрд╛рд░ рдХреЛ рд╕реМрдВрдкрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП Selector рдЯреНрд░реА рдиреЛрдб рдХрд╛ред

рдЬрдм _any_ рдЪрд░ рд╡рд╛рд▓реЗ Selector рдкреНрд░рдХрд╛рд░ рдХреЗ рдЯреНрд░реА рдиреЛрдб рдХреЛ рдПрдХ рдЪрдпрдирдХрд░реНрддрд╛ рдореЗрдВ рдкреНрд░рдХреНрд╖реЗрдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ @{var} рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкрд░рд┐рдгрд╛рдореА рдЪрдпрдирдХрд░реНрддрд╛ рдХреЛ рдЙрд╕реА рддрд░рд╣ рдмрдирд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрдм рдЪрдпрдирдХрд░реНрддрд╛ рдореЗрдВ & рдЗрдВрдЯрд░рдкреЛрд▓реЗрдЯрд░ рдореМрдЬреВрдж рд╣реЛрддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд ; рдПрдХ рдиреЗрд╕реНрдЯрд┐рдВрдЧ рд╕реНрддрд░ рд╕реЗ рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╢рд╛рдорд┐рд▓ рди рд╣реЛрдВ рдФрд░ рдЙрдкрд╕рд░реНрдЧ рди рдХрд░реЗрдВред

рдЗрд╕рдХреЗ рдкреАрдЫреЗ рддрд░реНрдХ рдпрд╣ рд╣реИ рдХрд┐ рджреЛрдиреЛрдВ рдХреИрдкреНрдЪрд░ рдХрд┐рдП рдЧрдП рдЪрдпрдирдХрд░реНрддрд╛ рд╣реИрдВ: selector() рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдХреИрдкреНрдЪрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрдмрдХрд┐ & рд╣рдореЗрд╢рд╛ рдореМрдЬреВрдж рдФрд░ рдХреИрдкреНрдЪрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ 'рдкреИрд░реЗрдВрдЯ' рдЪрдпрдирдХрд░реНрддрд╛ рд╣реИред

рдлрд┐рд░, рдпрджрд┐ рдХрд┐рд╕реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ _current_ рдЪрдпрдирдХрд░реНрддрд╛ рд╕рдВрджрд░реНрдн рдХреЗ рд╕рд╛рде рдХреИрдкреНрдЪрд░ рдХрд┐рдП рдЧрдП Selector рдиреЛрдб рдХреЗ рдЗрдВрдЯрд░рдкреЛрд▓реЗрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рд╡реЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЬреИрд╕реЗ & @{var} { ... }

рд╕рдорд╛рдкрди рдХрд╛ рд╡рдХреНрдд

a {
    <strong i="24">@var</strong>: selector(x, #y & .z);

    b {
        @{var} { ... }
    }
}

рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП

x, #y a .z { ... }

рдЬрдмрдХрд┐

a {
    <strong i="31">@var</strong>: selector(x, #y & .z);

    b {
        & @{var} { ... }
    }
}

рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП

a b x,
a b #y a .z { ... }

рд╣рдореНрдо, @{var} рдмрдирд╛рдо & @{var} рдХрд╛рдлреА рдХреГрддреНрд░рд┐рдо рд▓рдЧрддрд╛ рд╣реИ, рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпреЗ рдЪреАрдЬреЗрдВ рдХрдо рдореЗрдВ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИрдВред ... { & div ... рдФрд░ ... { div ... рд╣рдореЗрд╢рд╛ рд╕рдорд╛рди рдХрдерди рдереЗред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣рд╛рдВ рддрдХ рдХрд┐ рдЗрд╕ рдЧрд┐рдирддреА рдирд╣реАрдВ, рдХреНрдпрд╛ рдореИрдВ рдЕрдЧрд░ рдореИрдВ рдЬрд░реВрд░рдд рдХрд░реВрдБ a b x, #y a b .z рдХреЗ рд╕рд╛рде x, #y * .z рдХрд╣реАрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд?

рдореИрдВ рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди-рдЬреИрд╕реА рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдкреНрд░рд╢рдВрд╕рдХ рдирд╣реАрдВ рд╣реВрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реЗ рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рдиреЗ, рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдпрд╛ рдкрд░рд┐рд╡рд╣рди (рдЪрд░ рдФрд░ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЕрд╕рд╛рдЗрди) рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реВрдВред

рдмрд╕ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдХрд┐рддрдирд╛ #1075 (рдЕрднрд┐рднрд╛рд╡рдХ рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХреЛ рд▓рдХреНрд╖рд┐рдд рдХрд░рдирд╛) рдкрд░ рднрд┐рдиреНрдирддрд╛ рд╣реИ рдпрд╛ https://github.com/less/less-meta/issues/16#issuecomment -292679320 (рдЕрд╕рд╛рдЗрдирд┐рдВрдЧ) рдХреЗ рд╕рд╛рде рд╕рдВрднрд╛рд╡рд┐рдд рд╡рд┐рд░реЛрдз рдореЗрдВ рд╣реИ рдПрдХ рдЪрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдЪрдпрдирдХрд░реНрддрд╛)? рдпрд╛ рдпрд╣ рдПрд▓рд┐рдпрд╛рд╕рд┐рдВрдЧ рдорд┐рдХреНрд╕рд┐рди рд╕реЗ рдЕрд▓рдЧ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рдЪрдпрдирдХрд░реНрддрд╛ рд╕реВрдЪреА рд╣реИ рдФрд░ рдПрдХ рднреА рдореВрд▓реНрдпрд╛рдВрдХрди рдЪрдпрдирдХрд░реНрддрд╛ (рдпрд╛ рдорд┐рдХреНрд╕рд┐рди) рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдЪрдпрдирдХрд░реНрддрд╛ рд╕реВрдЪреА рд╣реИ рдФрд░ рдореВрд▓реНрдпрд╛рдВрдХрди рдирд┐рдпрдо рдирд╣реАрдВ рд╣реИ? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдЕрд▓рдЧ рд╣реИ; рдореИрдВ рд╕рд┐рд░реНрдл рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдпреЗ рд╕рднреА рдПрдХ рд╣реА рджрд┐рд╢рд╛ рдореЗрдВ рдЖрдЧреЗ рдмрдврд╝ рд░рд╣реЗ рд╣реИрдВред

@ рдореИрдереНрдпреВ-рдбреАрди
рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЪрдпрдирдХрд░реНрддрд╛ рд╕реВрдЪреА рдХреЛ рдХреИрдкреНрдЪрд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ, рди рдХрд┐ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд┐рдП рдЧрдП рдирд┐рдпрдореЛрдВ рдХреЛ рдХреИрдкреНрдЪрд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдФрд░ рдЖрдЧреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЙрдХреНрдд рд╕реВрдЪреА рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред

рдХреЛрдИ рднреА extract(list,index) рдЬреИрд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЪрдпрдирдХрд░реНрддрд╛ рд╕реВрдЪреА рд╕реЗ рдЪрдпрдирдХрд░реНрддрд╛ рдШрдЯрдХреЛрдВ рдХреЛ рдирд┐рдХрд╛рд▓рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрджреНрдпрддрди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдЖрд╕рд╛рдиреА рдХреЗ рд▓рд┐рдП рдЗрд╕реА рддрд░рд╣ рдХреЗ рд╕рдВрд╡рд░реНрджреНрдзрди, рдЬреИрд╕реЗ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЖрд╕рд╛рдиреА рд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рддрд░реАрдХреЛрдВ рд╕реЗ рдЙрдирдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдмреАрдИрдПрдо рдЬреИрд╕реА рдХреБрдЫ рдирд╛рдордХрд░рдг рдпреЛрдЬрдирд╛рдУрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдШрдЯрдХреЛрдВ рдХреЗ рд▓рд┐рдПред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдорд┐рд╢реНрд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛

.my-bem-component(<strong i="10">@a</strong>, @b) {
  // Component will only ever be constructed on the first selector in
  // a list, for simplicity.
  <strong i="11">@selectors</strong> : selector(&);
  <strong i="12">@selector</strong>  : extract(<strong i="13">@selectors</strong>, 1);

  // Generate a clean block name, cleared of modifiers.
  // Grabs e.g. "bar" from ".foo > .bar--baz"
  @block-name : replace(<strong i="14">@selector</strong>, "\.([^\.\s]+)--\S+$", "$1" );

  // Generate the modifier name and generate different CSS for
  // BEM classes that have one.
  // Grabs e.g. "baz" in ".foo > .bar--baz"
  @mod-name : replace(<strong i="15">@selector</strong>, "\.+--(\S+)$", "$1" );

  .generate-block();
  // When @mod-name matches <strong i="16">@selector</strong>, no replacement has
  // occured and we are infact in the situation where we have no
  // BEM modifier and generate the 'base' component.
  .generate-block() when (@mod-name = "@{selector}") {
    @{selector} {
      prop-a : @a;
    }
    @{selector}__element {
      prop-b : @b;
    }
  }

  .generate-block() when (default()) {
    @{selector} {
      prop-a : @a;
    }
    @{selector} > .@{block}__element {
      prop-b : @b;
    }
  }
}

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдо

.block {
  .my-bem-component(foo, bar);
}
.block--caps {
  .my-bem-component(FOO, BAR);
}

рд╕реАрдПрд╕рдПрд╕ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ

.block {
  prop-a : foo;
}
.block__element {
 prop-b : bar;
}
.block--caps {
  prop-a : FOO;
}
.block--caps > .block__element {
  prop-b : BAR;
}

Sass рдХреЗ рдкрд╛рд╕, afaik, рдпрд╣ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдерд╛ рдФрд░ рдЗрд╕ рддрдХрдиреАрдХ рдХреЗ рдХрдИ рдЙрджрд╛рд╣рд░рдг рдмрд╣реБрдд рд╣реА рдЪрддреБрд░ рдЙрдкрдпреЛрдЧ рдореЗрдВ рд▓рд╛рдП рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред рдХреЛрдб рдХрд╛рд░рдЦрд╛рдиреЛрдВ рдореЗрдВ рдЬреИрд╕реЗ рдореЗрд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдпрд╛ рдЕрдиреНрдп рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдПред

рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд:

рдХрдо/рдХрдо-рдореЗрдЯрд╛#16 (рдЯрд┐рдкреНрдкрдгреА) рдХреЗ рд╕рд╛рде рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдВрдШрд░реНрд╖ (рдПрдХ рдЪрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдЪрдпрдирдХрд░реНрддрд╛ рдЕрд╕рд╛рдЗрди рдХрд░рдирд╛)

рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдорд╛рдирддрд╛ рд╣реВрдВ:
"рдЯреНрд░рд┐рд╡рд┐рдЕрд▓" рдЪрдпрдирдХрд░реНрддрд╛ рдорд╛рди (рдЬреИрд╕реЗ .mixin , .ns.mixin , #foo .bar , baz рдЖрджрд┐, рд╕реМрднрд╛рдЧреНрдп рд╕реЗ рдЗрд╕рдореЗрдВ рдХреБрдЫ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИ рдЬрд┐рд╕реЗ рдорд┐рдХреНрд╕рд┐рди/рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ/рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ) рд╕реАрдзреЗ рдПрдХ рдЪрд░ (рдпрд╛ рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд) рдХреЛ рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╛рдиреА рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣реИ:

<strong i="15">@var</strong>: .ns.mixin; // OK, its just Anonymous value (representing an arbitrary identifier) 
function(.mixin); // error: TODO 

^рдЗрд╕рдХрд╛ (рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ) рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рд╕реЗ рдХреЛрдИ рд▓реЗрдирд╛- рджреЗрдирд╛ @var(...) рд╕рд╛рде рдХреЙрд▓/eval рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рдпрд╛ @var[...] рдмрдпрд╛рди
(рдЖрдо рддреМрд░ рдкрд░ рддрд╛рд░реНрдХрд┐рдХ рдкрд░рдВрдкрд░рд╛ рдпрд╣ рднреВрд▓ рдЬрд╛рддреА рд╣реИ рдХрд┐ рдорд┐рдХреНрд╕рд┐рди рдЖрдЗрдбреЗрдВрдЯрд┐рдлрд╝рд╛рдпрд░ (рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡) рдЪрдпрдирдХрд░реНрддрд╛ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдореЗрд╢рд╛ рдЙрдиреНрд╣реЗрдВ рдХреЗрд╡рд▓ рдбреЙрдЯ рдпрд╛ # рдЙрдкрд╕рд░реНрдЧ рдХреЗ рд╕рд╛рде рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЛрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдФрд░ .ns > .mixin рдЬреИрд╕реА рдЪреАрдЬреЗрдВ рдЕрдВрддрддрдГ рдмреЗрдорд╛рдиреА рдФрд░ рдмреЗрдХрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдлреАрдХрд╛ :)

рдЬрдмрдХрд┐ рдПрдХ рдЬрдЯрд┐рд▓ рдпрд╛ "рд╡рд╛рд╕реНрддрд╡рд┐рдХ" рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╕рд┐рдВрдЯреИрдХреНрд╕/рдкрд╛рд░реНрд╕рд░ рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рдХрд╛рд░рдг selector рдЫрджреНрдо рдлрд╝рдВрдХреНрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпрд╛рдиреА рдЪреАрдЬреЗрдВ рдЬреИрд╕реЗ:

  • <strong i="29">@var</strong>:foo>bar <- рдЪрдпрдирдХрд░реНрддрд╛ рдФрд░ (рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ) рдПрдХ рддрд╛рд░реНрдХрд┐рдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐
  • <strong i="32">@var</strong>:.1+.2; <- рдЕрдВрдХрдЧрдгрд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдФрд░ рдорд╛рдиреНрдп рдХрдо рдЪрдпрдирдХрд░реНрддрд╛
    (рдЖрджрд┐ред рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕рднреА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЪрдпрдирдХрд░реНрддрд╛ рдкреНрд░рддреАрдХреЛрдВ рдХреЛ рдпрд╛рдж рдХрд░реЗрдВ - рдореВрд▓реНрдп рдкрд╛рд░реНрд╕рд┐рдВрдЧ рд╕рдВрджрд░реНрдн рдореЗрдВ рдХреБрдЫ рдХреЗ рд╕рд╛рде рд▓рдЧрднрдЧ рд╣рд░ рд╕рдВрдШрд░реНрд╖, рдФрд░ рдпрд╣ рддрдм рдФрд░ рднреА рдирд╛рдЯрдХреАрдп рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдЙрдкрд░реЛрдХреНрдд рдорд╛рди рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди/рдорд┐рдХреНрд╕рд┐рди рдХреЛ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрд╕рдВрднрд╡ рд╣реИ w/o selector() рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:
    less: some-function(abc, selector(#foo .is :not(> bar)[baz="qux"], abc), selector(bla), 42); // ^ remove `selector()` and try to parse

рдореИрдВ рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди-рдЬреИрд╕реА рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдкреНрд░рд╢рдВрд╕рдХ рдирд╣реАрдВ рд╣реВрдВред

рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, selector рдЫрджреНрдо рдлрд╝рдВрдХреНрд╢рди рдХрд┐рд╕реА рднреА рд╡рд░реНрддрдорд╛рди рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд рд╕рд┐рдВрдЯреИрдХреНрд╕ рдФрд░ рд╢рдмреНрджрд╛рд░реНрде рд╕рдВрдШрд░реНрд╖ рдХреЛ рдПрдХ рдмрд╛рд░ рдФрд░ рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рдХрд╛рдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред рддреЛ рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣рд╛рдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ (рдореВрд▓реНрдп рдФрд░ рдЪрдпрдирдХрд░реНрддрд╛ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рд╕рдВрджрд░реНрднреЛрдВ рдХреЛ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛)ред


(рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ selector() рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдпрд╛ рдЧрдпрд╛ рдорд╛рди рдХреЙрд▓ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдЗрдХрд╛рдИ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреИрд╕реЗ @var() , рдпрд╣ рд╢рд╛рдпрдж рд╣реЛ рд╕рдХрддрд╛ рд╣реИ - рд▓реЗрдХрд┐рди рдпрд╣ рд╕рд┐рд░реНрдл рдЕрдирд╛рд╡рд╢реНрдпрдХ/рдмреЗрдХрд╛рд░ рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдореБрд╢реНрдХрд┐рд▓ рд╕реЗ рд▓рд╛рдпрдХ рд╣реИ рдкрд░реЗрд╢рд╛рдиреА)ред

@rjgotten

рдЪрдпрдирдХрд░реНрддрд╛ рдХреЛ рдирд┐рдХрд╛рд▓рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП extract(list,index) рдЬреИрд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ

рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╣рдо рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдХреБрдЫ рдЪрдпрдирдХрд░реНрддрд╛ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдРрд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди (рдХреЗрд╡рд▓ extract ) рдХреЛ рдЕрджреНрдпрддрди/рд╕рдорд╛рдпреЛрдЬрд┐рдд/рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИред рд╡рд┐рдкрд░реАрдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЕрдзрд┐рдХ рдХреБрд╢рд▓/рдХрдо рдмреЛрдЭрд┐рд▓ рд╣реЛрдЧрд╛ред рдпрд╛рдиреА рдпрд╣ рдпрд╛ рддреЛ рдПрдХ рд╕рдорд░реНрдкрд┐рдд selector-string->values рд░реВрдкрд╛рдВрддрд░рдг рдлрд╝рдВрдХреНрд╢рди рд╣реИ, рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ selector рджреНрд╡рд╛рд░рд╛ рд╕реАрдзреЗ рдиреЛрдбреНрд╕ рдХреА рдЙрдЪрд┐рдд рд╕рдВрд░рдЪрдирд╛ рд▓реМрдЯрд╛ рд░рд╣рд╛ рд╣реИ (рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рдмрд╕реЗ рдореБрд╢реНрдХрд┐рд▓ рд╣рд┐рд╕реНрд╕рд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЪрдпрдирдХрд░реНрддрд╛ рд╕рдВрдпреЛрдЬрдХреЛрдВ рдХреЛ рд╣рд░ рдЙрдкрдпреЛрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдкреИрдХ/рдЕрдирдкреИрдХ рдХреИрд╕реЗ рдХрд░реЗрдВ -рдХреЗрд╕ рдЕрд▓рдЧ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдкрд╕рдВрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ)ред

(рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЪрдпрдирдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдкреЛрд▓реЗрд╢рди рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдЕрднреА рднреА рдЕрдВрдд рдореЗрдВ @{var} рдХреЛ рдПрдХ рдЙрдЪрд┐рдд рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдирд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдЙрд╕ var рдХрд╛ рдорд╛рди рдХрд┐рд╕ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдЖрддрд╛ рд╣реИ - рдпрд╛ рддреЛ рдпрджрд┐ рдпрд╣ рд╕реНрдЯреНрд░рд┐рдВрдЧ, рдЕрдирд╛рдо рдпрд╛ рдЬреЛ рднреА рд╣реЛ рдиреЛрдбреНрд╕ рдХреА рд╕рдВрд░рдЪрдирд╛ - рдЕрдзрд┐рдХрд╛рдВрд╢ рд░реВрдкрд╛рдВрддрд░рдг рдкреНрд░рд╡рдВрдЪрдирд╛рдПрдБ рд╕рдорд╛рди рд░рд╣рддреА рд╣реИрдВ)ред

@block-name : replace(<strong i="17">@selector</strong>, "\.([^\.\s]+)--\S+$", "$1" );

рдИрдорд╛рдирджрд╛рд░ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ "рдЗрдирд▓рд╛рдЗрди рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рд▓реЗрд╕рд╣реИрдЯ-рдЬреИрд╕реА рд╣реИрдХрд░реА" рдХрд╛ рдкреБрдирд░реНрдЬрдиреНрдо рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ, рдЗрд╕реЗ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдЦрд┐рд▓рд╛рдл рдЖрдХреНрд░рд╛рдордХ рд░реВрдк рд╕реЗ рд╡рд┐рдЬреНрдЮрд╛рдкрди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
(рдпрд╣ рдЧрд┐рдирддреА рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЙрджрд╛рд╣рд░рдг рдмрд╣реБрдд рджреБрд░реНрднрд╛рдЧреНрдпрдкреВрд░реНрдг рд╣реИ <- рд▓рд╛рдЗрдиреЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВ) рдореИрдВ рдХреБрдЫ less-plugin-bem-selectors рдЪреАрдЬрд╝ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреВрдВрдЧрд╛ (рдЬрд╣рд╛рдВ рдЖрдк рдХреЗрд╡рд▓ get-block-name рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдмреАрдЯреАрдбрдмреНрд▓реНрдпреВред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ w/o & рдлреАрдЪрд░) рдЗрд╕ рддрд░рд╣ рдХреЗ рдмрджрд╕реВрд░рдд рд░реЗрдЧреЗрдХреНрд╕ рдХреЗ рдмрдЬрд╛рдп ("рдПрдХ рд╕реАрдПрд╕рдПрд╕ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░ рдХрд╛ рдПрдХ рдордирдорд╛рдирд╛ рдЯреЗрдХреНрд╕реНрдЯ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛" рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЕрдВрддрддрдГ рдкреЛрд╕реНрдЯрд╕реАрдПрд╕рдПрд╕ рдЬреИрд╕реА рд╕рд╛рдордЧреНрд░реА рдХреЗ рдЕрдВрдд рдореЗрдВ рдмреБрд░реА рддрд░рд╣ рд╕реЗ рдвреАрд▓рд╛ рд╣реЛ рдЬрд╛рдПрдЧрд╛)ред

рдФрд░ & рдмрдирд╛рдо context-saving-& рд╡рд╛рдкрд╕ рдЖрдирд╛, рдЕрдм рддрдХ рдореБрдЭреЗ рдбрд░ рд╣реИ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рдзреНрд╡рдЬ рд╕реЗ рдмреЗрд╣рддрд░ рдХреЛрдИ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП selector(..., lazy or not) , рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рджреЛ рдЕрд▓рдЧ рдХрд╛рд░реНрдпред рдпрд╛ other-than-&-keyword (рдЬреИрд╕реЗ тВ╕ ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдмрд╕ рдмрд┐рдВрджреБ-рдореВрд▓реНрдпрд╛рдВрдХрди рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕реБрд░рдХреНрд╖рд┐рдд рддрд░реАрдХрд╛ рдирд╣реАрдВ рджреЗрдЦ рд╕рдХрддрд╛ред

рдореИрдВ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдХреБрдЫ less-plugin-bem-selectors рдЪреАрдЬрд╝ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрдирд╛ рдЪрд╛рд╣реВрдБрдЧрд╛

рдмрд┐рд▓реНрдХреБрд▓ред рд░реЗрдЧреЗрдХреНрд╕-рдЖрдзрд╛рд░рд┐рдд рдирд┐рд╖реНрдХрд░реНрд╖рдг рдХреЗрд╡рд▓ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдерд╛ рдЬрд┐рд╕рдореЗрдВ рдХрд╕реНрдЯрдо рдлрд╝рдВрдХреНрд╢рди рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдереЗред ;)

рдореИрдВ рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди-рдЬреИрд╕реА рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдкреНрд░рд╢рдВрд╕рдХ рдирд╣реАрдВ рд╣реВрдВред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрджрд┐ рдЖрдкрдХрд╛ рдорддрд▓рдм рдХреЗрд╡рд▓ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ ... рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХреБрдЫ рдЕрдиреНрдп рдирд┐рд░реНрдорд╛рдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП тБЮ#foo:not(.bar)тБЮ , рд▓реЗрдХрд┐рди рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдореБрдлреНрдд рдкреНрд░рддреАрдХреЛрдВ рд╕реЗ рдмрд╛рд╣рд░ рд╣реЛ рдЧрдП рд╣реИрдВред рддреЛ рдЫрджреНрдо рдлрд╝рдВрдХреНрд╢рди рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗрд╡рд▓ рдЗрд╕рд▓рд┐рдП рд╕реБрдЭрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА url рд╕рд╛рде рдРрд╕реА рдЕрд╡рдзрд╛рд░рдгрд╛ рд╣реИ (рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЪреАрдЬреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдПрдХ рдирдИ рдЕрд╡рдзрд╛рд░рдгрд╛ рдЯреВрдЯ рд╕рдХрддреА рд╣реИ рдпрд╛ рдЯреВрдЯ рдЬрд╛рдПрдЧреА)ред

рдЕрдм, рдордЬреЗрджрд╛рд░ рд╣рд┐рд╕реНрд╕рд╛ред

рдореИрдВрдиреЗ current-selector рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдПрдХ рддреНрд╡рд░рд┐рдд рдФрд░ рдЧрдВрджрд╛ рдкреНрд▓рдЧрдЗрди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдмрдирд╛рдпрд╛ (рдмрд╕ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдпрд╣ рдХрд┐рддрдирд╛ рдмреНрд▓реЛрдЯрд┐рдВрдЧ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ var рдЖрд▓рд╕реА-рдореВрд▓реНрдпрд╛рдВрдХрди рдХреЗ рдХрд╛рд░рдг рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ), рдФрд░ рдХреНрдпрд╛ рдкрддрд╛? рдпрд╣ рдореВрд▓ рдЙрджрд╛рд╣рд░рдг:

div {
    <strong i="9">@x</strong>: current-selector();
    span {
        r: @x; // -> div
    }
}

r: div рдореЗрдВ рдкрд░рд┐рдгрд╛рдо :)
рдпрд╣ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛрдб рдХрд╛ рдХреМрди рд╕рд╛ рдЯреБрдХрдбрд╝рд╛ рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрд╛рджреВ рдХреЛ рдЪрд┐рддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рдЕрдзрд┐рдХ рдЙрдиреНрдирдд рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

div {
    <strong i="15">@x</strong>: current-selector();     // [1]
    <strong i="16">@y</strong>: current-selector() @v;  // [2]
    <strong i="17">@z</strong>: current-selector(@v);   // [3]
    <strong i="18">@v</strong>: whatever;
    span {
        1: @x; // div
        2: @y; // div span
        3: @z; // div span
        4: current-selector();  // [4] div span
    }
}

рд╡рд╣рд╛рдВ рдХреЗрд╡рд▓ [2] рдФрд░ [3] рдмрдпрд╛рдиреЛрдВ рдХреЛ рджреЛ рдмрд╛рд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ (рдпрд╛рдиреА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд▓рд╕реА-рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд┐рдпрд╛ рдЧрдпрд╛), рдЬрдмрдХрд┐ [1] рдирд╣реАрдВ рд╣реИ (рдЬрд╛рд╣рд┐рд░ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдорд╛рди рдореЗрдВ рдХреЛрдИ рдЪрд░ рдирд╣реАрдВ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдлрд┐рд░ рднреА рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдпрд╣ рдЬрд╛рдирдмреВрдЭрдХрд░ рдпрд╛ рдХреБрдЫ рдХреИрд╢рд┐рдВрдЧ рдХрд╛ рджреБрд╖реНрдкреНрд░рднрд╛рд╡ рд╣реИ, рдпрд╛ рдпрд╣ рдореЗрд░реЗ рдХреЛрдб рдореЗрдВ рдПрдХ рднрд╛рдЧреНрдпрд╢рд╛рд▓реА рдмрдЧ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдпрд╣ рд▓рд╛рдЗрди рдЗрд╕ рдХреИрд╢рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП


рдпрд╛рдиреА, context-saving-& рдПрдХ рдкреНрд▓рдЧрдЗрди рдЖрдзрд╛рд░рд┐рдд рд╕рдВрд╕реНрдХрд░рдг рд╕рдВрднрд╡ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ (рдмреЗрд╢рдХ <strong i="29">@var</strong>: & рдмрдЬрд╛рдп рдЖрдк <strong i="31">@var</strong>: current-selector() рдЬреИрд╕реЗ рдХреБрдЫ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ) рд╣рд╛рд▓рд╛рдВрдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХреЛрдИ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИ рдЕрдиреНрдпрдерд╛ рдпрд╣ рдЖрд▓рд╕реА-рдореВрд▓реНрдпрд╛рдВрдХрди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ (рдпрджрд┐ рдПрдХ рдЪрд░ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ) - рдпрд╣ рджреБрдЦрдж рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЗрд╕реЗ рдЪрд╛рд░ рд░рдЦрдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ рдереА :)ред
рдХрд╛рдлреА рдЕрдкрдорд╛рдирдЬрдирдХ рд▓реЗрдХрд┐рди рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб/рдкреЙрд▓реАрдлрд┐рд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрджрд╛рд╣рд░рдг рд╡рд╛рдВрдЫрд┐рдд рдХреЗ рд░реВрдк рдореЗрдВ рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:

div#zoo {
    <strong i="35">@x</strong>: current-selector();
    span {
        <strong i="36">@y</strong>: replace(<strong i="37">@x</strong>, div, body);
        r: @y; // OK, body#zoo
        @{y} { 
        // ^ not very useful this way (except maybe bem stuff) since you can't remove div
            color: red;
        }
    }
}

рдпрд╛рдиреА рдмрд╛рдж рдХреЗ рд╡реЗрд░рд┐рдПрдмрд▓ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ/рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЪрд░ рдХреЗ рдореВрд▓реНрдпрд╛рдВрдХрди-рдмрд┐рдВрджреБ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред

@ рд╕рд╛рдд-рдЪрд░рдг-рдЕрдзрд┐рдХрддрдо
рдЗрд╕реЗ рдкреНрдпрд╛рд░ рдХрд░рдирд╛ред

рднрд▓реЗ рд╣реА рдЖрд▓рд╕реА-рдореВрд▓реНрдпрд╛рдВрдХрди рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рддрд░реНрдХ рдореМрдЬреВрдж рд╣реЛрдиреЗ рдкрд░ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдПрдХ рд╕реНрдкреИрдирд░ рдлреЗрдВрдХрддрд╛ рд╣реИ, _that_ рд╕рдВрднрд╡рддрдГ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬрд┐рд╕реЗ 'рд╡рд╛рд╕реНрддрд╡рд┐рдХ' рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдЪрд╛рд░реЛрдВ рдУрд░ рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрджрд┐ рдЖрдкрдХрд╛ рдорддрд▓рдм рдХреЗрд╡рд▓ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ... рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХреБрдЫ рдЕрдиреНрдп рдирд┐рд░реНрдорд╛рдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП # foo:not (.bar)тБЮ, рд▓реЗрдХрд┐рди рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдореБрдлреНрдд рдкреНрд░рддреАрдХреЛрдВ рд╕реЗ рдмрд╛рд╣рд░ рд╣реЛ рдЧрдП рд╣реИрдВред

рдХрд╛рдлреА рдЙрдЪрд┐рддред рдореИрдВрдиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдкрдиреЗ рджрд┐рдорд╛рдЧ рдХреЛ рдЙрдкрдпреЛрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рдкреЗрдЯрд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рди рд╣реА рдореЗрд░реЗ рдкрд╛рд╕ рдХреЛрдИ рдмреЗрд╣рддрд░ рд╡рд┐рдЪрд╛рд░ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдореЗрдВ рдХреБрдЫ рдЦрд╛рд╕ рд▓рдЧ рд░рд╣рд╛ рдерд╛, рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рдирд╣реАрдВред рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рд╕рдордп $() рдмрд╛рд░реЗ рдореЗрдВ рдЪрд░реНрдЪрд╛ рд╣реБрдИ рдереА, рд▓реЗрдХрд┐рди рд╣рдордиреЗ $ рдХрд░рдирд╛ рд╕рдорд╛рдкреНрдд рдХрд░ рджрд┐рдпрд╛ред рдмреАрдЯреАрдбрдмреНрд▓реНрдпреВ, рдХреНрдпрд╛ рдпрд╣ selectors() рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдФрд░ selector() ? рдХреНрдпрд╛ рдпрд╣ (рдЬреИрд╕реЗ & ) рдореЗрдВ рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИ?

рдФрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ selector(&) current-selector() рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рд╡рд╣ рд╣реИ: "рдПрдХреНрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗ рдЪрдпрдирдХрд░реНрддрд╛ рд╕реВрдЪреА рдмрдирд╛рдПрдВ, рдЪрд╛рд╣реЗ рд╡рд╣ & рдпрд╛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реЛ"ред рдЬреЛ рдХреБрдЫ рднреА рдЕрдВрддрд┐рдо рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рд╣реИ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ & рд▓реЗрдЧрд╛ред

рдФрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдЬреИрд╕реЗ selector(&) current-selector() рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ

рдпреЗ рдЕрд▓рдЧ рдЪреАрдЬреЗрдВ рд╣реИрдВред current-selector рдмрд╕ рдХреЗ рдПрдХ рд╕рдорд╛рд░реЛрд╣ рд╕рдВрд╕реНрдХрд░рдг рд╣реИ & (рдЙрддреНрддрд░рд╛рд░реНрджреНрдз рдХреЗ рдмрд╛рдж рд╕реЗ рдкрд╛рд░реНрд╕рд░ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИ)ред рдЬрдмрдХрд┐ selector(...) рдПрдХ рдордирдорд╛рдирд╛ рдЪрдпрдирдХрд░реНрддрд╛ (рд╕рд╣рд┐рдд & ) рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рд░реНрд╕рд░ рдХреЗ рд▓рд┐рдП рд╡рд╣ рдкреИрдЪ рд╣реИред


selectors - рдареАрдХ рд╣реИ, рдпрд╣ рд╣реИред рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рдпрд╣ рдПрдХрд▓ рдЪрдпрдирдХрд░реНрддрд╛ рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓реЛрдВ рдХрд╛ 99% рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБрд╡рдЪрди рд░реВрдк рдХрдо рд╕реНрдкрд╖реНрдЯ рд╣реЛрдЧрд╛ (рдЕрдзрд┐рдХрд╛рдВрд╢ рдореЗрдВ, рд╡реЗ рдЖрдорддреМрд░ рдкрд░ h1, h2, h3 {} рдПрдХ рдЪрдпрдирдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╢реАрд░реНрд╖рдХ рджреЗрддреЗ рд╣реИрдВ рдФрд░ рдХрдо рдорд╛рддрд╛-рдкрд┐рддрд╛ рдЪрдпрдирдХрд░реНрддрд╛ рдХреА рдмрд╛рдд рдХрд░рддреЗ рд░рд╣рддреЗ рд╣реИрдВ (рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдЕрдЧрд░ рдпрд╣ рдХреЗ рдЪрдпрдирдХрд░реНрддрд╛ рд░реЛрдВ) :) рддреЛ рдХреНрдпреЛрдВ рдкрд░реЗрд╢рд╛рди?

рдЖрд╣ рдЕрдЪреНрдЫрд╛ред

@ рдореИрдереНрдпреВ-рдбреАрди
рдмрд╣реБрд╡рдЪрди рдФрд░ рдПрдХрд╡рдЪрди рд░реВрдк рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рднреА рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╡рд┐рдирд┐рдореЗрдп рд╣реИ, рд▓реЗрдХрд┐рди CSS рдХрд▓реНрдкрдирд╛ рд▓реЗрдЦрдХред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЗрд╕реЗ рдмрдирд╛рдПрдВ: рд╡рд┐рд╢рд┐рд╖реНрдЯ рд▓реЗрдЦрдХреЛрдВ рд╕рд╣рд┐рдд рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рд╕реАрдПрд╕рдПрд╕ рдЪрд╢реНрдорд╛ рднреА рдХрднреА-рдХрднреА рдПрдХрд╡рдЪрди рдФрд░ рдмрд╣реБрд╡рдЪрди рд░реВрдк рдХреЗ рдкрд░рд╕реНрдкрд░ рдЙрдкрдпреЛрдЧ рдХреЗ рд╢рд┐рдХрд╛рд░ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред

рдмрд╣реБрдд рдордЬрд╝рд╛рдХрд┐рдпрд╛ рдврдВрдЧ рд╕реЗ; рдмрд╣реБрд╡рдЪрди рд╢рдмреНрдж 'рдЪрдпрдирдХрд░реНрддрд╛' рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо рд╕реЗ рдЕрд▓рдЧ рдХрд┐рдП рдЧрдП рд╕реЗрдЯ рдХреЛ рдирд╛рдорд┐рдд рдХрд░рдиреЗ рдХрд╛ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рддрд░реАрдХрд╛ рднреА рдирд╣реАрдВ рд╣реИред рдмрд╣реБрд╡рдЪрди рд░реВрдк рдХреЗ рд▓рд┐рдП рдХрдбрд╝рд╛рдИ рд╕реЗ рд╕рд╣реА рд╢рдмреНрджрд╛рд╡рд▓реА рд╣реИ, рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐, рдПрдХ _selector list_ред

рддреЛ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдЕрд╕реНрдкрд╖реНрдЯ рд╕рдВрджрд░реНрдн рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд┐рддрдирд╛ рдЧрд╣рд░рд╛ рд╣реИред

рдмрд╣реБрд╡рдЪрди рд░реВрдк рдХреЗ рд▓рд┐рдП рдХрдбрд╝рд╛рдИ рд╕реЗ рд╕рд╣реА рд╢рдмреНрджрд╛рд╡рд▓реА, рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ, рдПрдХ рдЪрдпрдирдХрд░реНрддрд╛ рд╕реВрдЪреА рд╣реИред

рд╣рд╛рдБ, рдореИрдВрдиреЗ рдХрд▓ w3c рднреА рдЦреЛрдЬрд╛ рдерд╛, рдпрд╣ "рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХрд╛ рд╕рдореВрд╣", "рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХреА рдПрдХ рд╕реВрдЪреА" рдЖрджрд┐ рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЬреАрдм рдХреА рддрд░рд╣ рдХреБрдЫ рднреА рдлреИрдВрд╕реА рдирд╣реАрдВ рд╣реИ "рдПрдХ рдЪрдпрдирдХрд░реНрддрд╛ рд╕рдВрдпреЛрдЬрдХреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЕрд▓рдЧ рдХрд┐рдП рдЧрдП рд╕рд░рд▓ рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХреЗ рдПрдХ рдпрд╛ рдЕрдзрд┐рдХ рдЕрдиреБрдХреНрд░рдореЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╣реИ" рд╡реЗ рднреА рд╡рд╣рд╛рдБ рд╣реИ :) "рдЪрдпрдирдХрд░реНрддрд╛ рдкреНрд░рдХрд╛рд░" рдЪреАрдЬрд╝ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╕ "рдЪрдпрдирдХрд░реНрддрд╛" рдлреЙрд░реНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдЬреНрдпрд╛рджрд╛рддрд░ рд╡рд╣рд╛рдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

"рдПрдХ рдЪрдпрдирдХрд░реНрддрд╛ рд╕рдВрдпреЛрдЬрдХреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЕрд▓рдЧ рдХрд┐рдП рдЧрдП рд╕рд╛рдзрд╛рд░рдг рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХреЗ рдПрдХ рдпрд╛ рдЕрдзрд┐рдХ рдЕрдиреБрдХреНрд░рдореЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╣реИ"

рдФрд░ рдпрд╣ рд╕реЛрдЪрдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рднреА рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рдЬреЛ рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо рд╕реЗ рдЕрд▓рдЧ рдХреА рдЧрдИ рд╕реВрдЪрд┐рдпреЛрдВ рдХрд╛ рд╕рдВрджрд░реНрдн рджреЗ рд╕рдХрддрд╛ рд╣реИ: рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИред рдЙрд╕ рдЙрджреНрдзрд░рдг рдХрд╛ рдкреВрд░реНрдг рд░реВрдк рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП: "рдПрдХ _complex_ рдЪрдпрдирдХрд░реНрддрд╛ рд╕рдВрдпреЛрдЬрдХреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЕрд▓рдЧ рдХрд┐рдП рдЧрдП рд╕рд░рд▓ рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХреЗ рдПрдХ рдпрд╛ рдЕрдзрд┐рдХ рдЕрдиреБрдХреНрд░рдореЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╣реИред"

рд╕реАрдПрд╕рдПрд╕ рд╕реНрдкреЗрдХреНрд╕ рдореЗрдВ рдПрдХ рдФрд░ рд╕рдорд╕реНрдпрд╛ рд╣реИ рдЬрд╣рд╛рдВ "рдЪрдпрдирдХрд░реНрддрд╛" рдХреЗ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рд░реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдЬреНрдпрд╛рджрд╛рддрд░ рдпрд╣ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЪрд╢реНрдорд╛ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рддреМрд░ рдкрд░ _complex рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ_ рдХреЛ рдХреНрдпрд╛ рдХрд╣рддреЗ рд╣реИрдВред рдЬрдЯрд┐рд▓ рдЪрдпрдирдХрд░реНрддрд╛ рд╕рд░рд▓ рдЪрдпрдирдХрд░реНрддрд╛ рд╣реЛрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ tag ; #id ; .class ; [attr] ; рдЖрджрд┐ , рд╕рдВрдпреЛрдЬрдХреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрдВрдЬреАрд░, рдЬреИрд╕реЗ > ; + ; ~ , рдЖрджрд┐ред

ul > li рдЬреИрд╕реА рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХреЛ рдЬрдЯрд┐рд▓ рдЪрдпрдирдХрд░реНрддрд╛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред


рдЪреЗрддрд╛рд╡рдиреА рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдПрдХ рд╢реЗрдЦрд╝реА рдХрд╛ рдПрдХ рд╕рд╛ рд╣реЛрдЧрд╛:

рд╕реАрдПрд╕рдПрд╕ рдЪрд╢реНрдорд╛ рджреБрдЦ рдХреА рдмрд╛рдд рд╣реИ рдХрд┐ рдЕрд╕рдВрдЧрдд рдФрд░ рдЧрд▓рдд рдирд╛рдо рд╡рд╛рд▓реА рд╢рдмреНрджрд╛рд╡рд▓реА рдХрд╛ рдПрдХ рджрд▓рджрд▓ рд╣реИред рдЖрдк рдЬрд┐рддрдирд╛ рдкреАрдЫреЗ рдЬрд╛рддреЗ рд╣реИрдВ, рдпрд╣ рдЙрддреНрддрд░реЛрддреНрддрд░ рдмрджрддрд░ рд╣реЛрддрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдорджрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдХрд┐ CSS3 рдореЙрдбреНрдпреВрд▓ рдХрд╛ рднрд╛рд░ CSS 2.1 рдореЙрдбреНрдпреВрд▓ рдХрд╛ рд╕рдВрджрд░реНрдн рджреЗрддрд╛ рд░рд╣рддрд╛ рд╣реИ рдпрд╛ рдпрд╣ рдХрд┐ рдирдП CSS3 рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЙрдирдХреЗ рдкреБрд░рд╛рдиреЗ CSS 2.1 рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдХреЛ рд╢рдмреНрджрд╢рдГ рдХреЙрдкреА рдХрд░рдХреЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЪрд╢реНрдорд╛ рдФрд░ рджреГрд╢реНрдп рд╕реНрд╡рд░реВрдкрдг рдореЙрдбрд▓ рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рдЕрдкрд░рд╛рдзреА рд╣реИрдВ; рдЗрддрдирд╛ рдЕрд╕реНрдкрд╖реНрдЯ, рд╕рдорд╛рди-рдзреНрд╡рдирд┐ рд╡рд╛рд▓рд╛ рдпрд╛ рд╕рд╛рджрд╛ рдЦрд░рд╛рдм рдирд╛рдо рд╡рд╛рд▓реА рд╢рдмреНрджрд╛рд╡рд▓реАред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП ul > li рд╕реЗ рдмрд╣реБрдд рдХрдо рддреБрдЪреНрдЫ рдХреБрдЫ рд▓реЗрдВ, рдЬреИрд╕реЗ рдХрд┐ [*|attr^="value" i] ред рдЙрддреНрддрд░рд╛рд░реНрджреНрдз рдХреЛ рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЪрдпрдирдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд░реНрдЧреАрдХреГрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред (рд╣рд╛рдБ рд╕рдЪред)

рдореБрдЭреЗ рдХреБрдЫ рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдПрдХ рдмрд┐рдВрджреБ рдкрд░ рдЕрдкрдиреЗ рдПрдХ рдФрд░ рдбрд┐рдЬрд╝рд╛рдЗрди-рдЙрдиреНрдореБрдЦ рд╕рд╣рдпреЛрдЧреА рдХреЛ рдмрд╛рдж рдХреЗ рджреГрд╢реНрдп рд╕реНрд╡рд░реВрдкрдг рдореЙрдбрд▓ рд╕реНрдкреЗрдХ рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдЖрдЬрдорд╛рдиреЗ рдФрд░ рд╕рдордЭрд╛рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдереАред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рдлрд╝реНрдпреВрдЬрд╝ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣рдорд╛рд░реЗ рджрд┐рдорд╛рдЧ рдореЗрдВ _рджреЛрдиреЛрдВ_ рдЙрдбрд╝рд╛ рджрд┐рдП рдЧрдП рдереЗ рдЬрдм рд╣рдо рдЙрди рдЕрдВрд╢реЛрдВ рдкрд░ рдЧрдП рдЬреЛ рд▓рд╛рдЗрди рдмреЙрдХреНрд╕ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХрд╛ рдЗрд▓рд╛рдЬ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рдЗрд╕рдХрд╛ рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рд╣рд┐рд╕реНрд╕рд╛ рднреА рдирд╣реАрдВ рдерд╛ред (рдЬрд╛рджреБрдИ рд▓рд╛-рд▓рд╛-рд▓реИрдВрдб рдореЗрдВ рдЪрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ, рдЬреЛ рдХрд┐ рдЯреЗрдмрд▓ рдлреЙрд░реНрдореЗрдЯрд┐рдВрдЧ рдореЙрдбрд▓ рд╣реИ, рдЕрдЧрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЕрдкрдиреА рдкрд╡рд┐рддреНрд░рддрд╛ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХрдо рдореВрд▓реНрдп рд╣реИред)

рдУрдкрди рд╕реЛрд░реНрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдкреНрд░рд▓реЗрдЦрди рдХреА рдХрдИ рдЧреБрдирд╛ рдЦреБрд╢рд┐рдпрд╛рдБ ...

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП ul > li рд╕реЗ рдмрд╣реБрдд рдХрдо рддреБрдЪреНрдЫ рдХреБрдЫ рд▓реЗрдВ, рдЬреИрд╕реЗ рдХрд┐ [*|attr^="value" i] ред рдЙрддреНрддрд░рд╛рд░реНрджреНрдз рдХреЛ рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЪрдпрдирдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд░реНрдЧреАрдХреГрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ

рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рд▓реЙрд▓, рд╕рд┐рд░реНрдл рдЗрд╕рд▓рд┐рдП рдХрд┐ рдпрд╣ рдПрдХ рд╕рдВрдпреЛрдЬрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдареАрдХ рдкрд░рд┐рднрд╛рд╖рд╛ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддрд╛ рд╣реИред рд╕рд┐рд░реНрдл рдЗрд╕рд▓рд┐рдП рдХрд┐ рдпрд╣ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдкреНрд░рддреАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ "рдЬрдЯрд┐рд▓" рдирд╣реАрдВ рдмрдирд╛рддрд╛ рд╣реИред ul > li рдЬрдЯрд┐рд▓ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рджреЛ рд╕реЗрдЯ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдпрд╛рдиреА li рдореЗрд▓ рдЦрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рддрддреНрд╡реЛрдВ рдХреЗ рд▓рд┐рдП рдкреВрдЫрддрд╛рдЫ рдХрд░рдирд╛ рдФрд░ рдлрд┐рд░ рдкреНрд░рддреНрдпреЗрдХ рд╕реЗ рдкреЗрдбрд╝ рдХреЛ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреМрди рд╕рд╛ ul рд╕рд╛рде рдирд┐рд╣рд┐рдд рд╣реИред рдЙрддреНрддрд░рд╛рд░реНрджреНрдз рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рд╡реНрдпрдХреНрддрд┐рдЧрдд рддрддреНрд╡реЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдПрдХ рдкреНрд░рд╢реНрди рд╣реИ рдЗрд╕рд▓рд┐рдП рдпрд╣ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЪрдпрдирдХрд░реНрддрд╛ рд╣реИред

рдмрд╣реБрд╡рдЪрди рд╢рдмреНрдж 'рдЪрдпрдирдХрд░реНрддрд╛' рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо рд╕реЗ рдЕрд▓рдЧ рдХрд┐рдП рдЧрдП рд╕реЗрдЯ рдХреЛ рдирд╛рдорд┐рдд рдХрд░рдиреЗ рдХрд╛ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рддрд░реАрдХрд╛ рднреА рдирд╣реАрдВ рд╣реИред рдмрд╣реБрд╡рдЪрди рд░реВрдк рдХреЗ рд▓рд┐рдП рдХрдбрд╝рд╛рдИ рд╕реЗ рд╕рд╣реА рд╢рдмреНрджрд╛рд╡рд▓реА, рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ, рдПрдХ рдЪрдпрдирдХрд░реНрддрд╛ рд╕реВрдЪреА рд╣реИред

рд╕рд╣реА, рддреБрдо рд╕рд╣реА рд╣реЛред "рдЪрдпрдирдХрд░реНрддрд╛" рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЗрд╡рд▓ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдмрд┐рдЯреНрд╕ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ рддрддреНрд╡реЛрдВ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди ul > li > .title рдПрдХ "рдЪрдпрдирдХрд░реНрддрд╛" рдПрдХрд╡рдЪрди рд╣реИред рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ selector() рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╢рд╛рдпрдж рд╢рдмреНрджрд╛рд░реНрде рдХреЗ рдХрд░реАрдм рд╣реИред

@ рд╕рд╛рдд-рдЪрд░рдг-рдЕрдзрд┐рдХрддрдо

рдХреНрд╡рд┐рдХ-рдПрди-рдбрд░реНрдЯреА рдкреНрд▓рдЧрдЗрди рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдмрд╕ рдПрдХ рдФрд░ рдорд╛рдореВрд▓реА рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛: рдпрд╣ рдХрд┐рд╕реА рдиреЗрдорд╕реНрдкреЗрд╕реНрдб рдорд┐рдХреНрд╕рд┐рди рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХреЛ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рд╣реИрдВрдбрд▓ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдиреЗрдорд╕реНрдкреЗрд╕ рдПрдХ рдирд┐рдпрдорд┐рдд Ruleset рдкреНрд░рдХрд╛рд░ рдХрд╛ рдлреНрд░реЗрдо рд╣реИ рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЙрдирдХрд╛ рдирд╛рдо рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред

рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╢рд╛рдпрдж рдЙрд╕ рдорд╛рдорд▓реЗ рдХреЛ рднреА рдХрд╡рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред


[рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ]
рдЗрд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЪрд╛рд▓ рдпрд╣ рдЬрд╛рдВрдЪрдирд╛ рд╣реИ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рд╕рдВрджрд░реНрдн рдХреЗ рд╕реНрдЯреИрдХ рдкрд░ рдлрд╝реНрд░реЗрдореЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ MixinDefinition рдФрд░ рдпрджрд┐ рдпрд╣ _is_ рд╣реИ, рддреЛ рдЙрд╕ рд╕реНрдЯреИрдХ рдкрд░ рдЕрдЧрд▓реЗ x рдлрд╝реНрд░реЗрдо рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВ, рдЬрд╣рд╛рдВ x MixinDefinition рдХреЗ рд╕реНрдЯреИрдХ рдкрд░ рдлрд╝реНрд░реЗрдо рдХреА рдорд╛рддреНрд░рд╛ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред

(рдореВрд▓ рд░реВрдк рд╕реЗ, рдпрд╣ 'рдХреНрд▓реЛрдЬрд░' рдлреНрд░реЗрдо рдХреЛ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ рдЬреЛ рд╕реНрдЯреИрдХ рдореЗрдВ рдЬреЛрдбрд╝реЗ рдЬрд╛рддреЗ рд╣реИрдВ рдЬрдм MixinCall MixinDefinition рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИред)

"рдмрд╛рд╕реА" рд▓реЗрдмрд▓ рд╣рдЯрд╛ рджрд┐рдпрд╛ред рдпрд╣ рдЕрднреА рднреА рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рдореБрджреНрджрд╛ рд╣реИред

рд╢рд╛рдпрдж current-selector() рдЗрддрдирд╛ рдмреБрд░рд╛ рдирд╣реАрдВ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕реНрдкрд╖реНрдЯ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ current-selectors() ред рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рднреА рдереЛрдбрд╝рд╛ рд╡рд░реНрдмреЛрдЬрд╝ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ рд╣рдо "рдХреИрдкреНрдЪрд░рд┐рдВрдЧ &" рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдирд╛рдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд╕рдХрддреЗ рд╣реИрдВ рддреЛ рдореИрдВ рдЕрдзрд┐рдХ рдкрдХреНрд╖ рдореЗрдВ рд╣реЛрдЧрд╛ рдЬреЛ рдХрд┐ рдЕрдзрд┐рдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╣реИред

"рдХреИрдкреНрдЪрд░рд┐рдВрдЧ рдФрд░" рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди рдирд╛рдо рдЬреЛ рдЕрдзрд┐рдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╣реИред

рдмрд╕ рдЗрд╕реЗ &() рдирд╛рдо рджреЗрдВред рдпрд╣ рдЕрд╡рдзрд╛рд░рдгрд╛рддреНрдордХ рд░реВрдк рд╕реЗ & рдореЗрдВ рдЬреЛ рдХреБрдЫ рднреА рд╣реИ рдЙрд╕рдХреЗ рд▓рд┐рдП рдЧреЗрдЯрдЯрд░ рд╕реЗ рдЬреНрдпрд╛рджрд╛ рдХреБрдЫ рдирд╣реАрдВ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП

.rule {
  <strong i="11">@selectors</strong> : &();
}

рдореИрдВ
рд╣рд╛рдБ, рдпрд╣ рдареАрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдХреЛрдИ рдПрддрд░рд╛рдЬ?

рдореИрдВ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдХреНрдпрд╛ рдореИрдВ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рд╕рдордЭ рд░рд╣рд╛ рд╣реВрдВ:

рдирдпрд╛ рдлрд╝рдВрдХреНрд╢рди &() рджреЗрддрд╛ рд╣реИ рдЬреЛ & рд╡рд░реНрддрдорд╛рди рд╕рдВрджрд░реНрдн рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рдХрд░реЗрдЧрд╛, рдЗрд╕рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

.component { // I only write "component" once!  Much concise, such DRY!
  <strong i="9">@this</strong>: &();

  /* base styles */

  &_child {
    /* styles for the child */
  }

  &-variant { // component-variant styles all together, and inside the `.component` block
    /* nothing too schmancy so far */
    @{this}_child {
      /* IT'S MAGIC! */
    }
  }
}

рдФрд░ рд╡рд╣ рд╕рдм рдЗрд╕рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░реЗрдЧрд╛ред

.component {
  /* base styles */
}
.component_child {
  /* styles for the child */
}
.component-variant {
  /* nothing too schmancy so far */
}
.component-variant .component_child {
  /* IT'S MAGIC! */
}

рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрджреНрднреБрдд рд╣реИ, рдФрд░ рдореБрдЭреЗ рдпрд╣ рдкрд╕рдВрдж рд╣реИред

рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдЕрдзрд┐рдХ рд╕реЛрдЪрддреЗ рд╣реБрдП, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореЗрд░реЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдореНрдореЛрд╣рдХ (рдкрд╣рд▓реЗ-рдкрд╛рд╕ рдХреЗ рдмрд╛рдж; рдЕрдЧрд░ рдореИрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдкрд╛рдЧрд▓ рд╣реЛ рд░рд╣рд╛ рд╣реВрдВ рддреЛ рдореБрдЭреЗ рд░реЛрдХреЗрдВ) рдПрдХ рдорд╛рдирдХреАрдХреГрдд рдШрдЯрдХ "рдмреНрд▓реЙрдХ" (рдирд┐рдпрдорд╕реЗрдЯ) рд╢реИрд▓реА рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реЛрдЧреАред рдореВрд▓ рд░реВрдк рд╕реЗ, рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЪрдпрдирдХрд░реНрддрд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдорд╛рди рд╕рд╣реЗрдЬреЗ рдЬрд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдлрд╝рдВрдХреНрд╢рди _" & рдореИрдк рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рджрд╛рдпрд░реЗ рдореЗрдВ рдЪрд░ рдХреЛ "_" рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬреЛ рдЗрд╕ рд╕рдВрд▓реЗрдЦрди рд╢реИрд▓реА рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ рдПрдХ рдШрдЯрдХ рдХреЗ рд▓рд┐рдП (рдореИрдВ рдЗрд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдП рдХрд╣реВрдВрдЧрд╛):

.component{ <strong i="8">@this</strong>:&();
  /* default styles */
  @{this}_child {
  // тЖС The crucial difference: `@{this}` here behaves _like `&`_, **NOT** like `.component`
    /* child default styles */
  }
}

рддрдм рдореИрдВ рдХрд╣ рд╕рдХрддрд╛ рдерд╛ " @this рдмрдЬрд╛рдп рд╣рд░ рдЬрдЧрд╣ & "ред

рдореЗрд░реА рдПрдХрдорд╛рддреНрд░ рдЪрд┐рдВрддрд╛ рдлреНрд▓рд┐рдк рдХреЗрд╕ рд╣реЛрдЧреА (рдЬрд┐рд╕реЗ рдореИрдВ рд╡реНрдпрд╡рд╣рд╛рд░ рдмреА рдХрд╣реВрдВрдЧрд╛), рд▓реЗрдХрд┐рди рдореИрдВ рдПрдХ рдЖрдХрд░реНрд╖рдХ рдорд╛рдорд▓реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╕реЛрдЪ рд╕рдХрддрд╛ рдЬрд╣рд╛рдВ рдореБрдЭреЗ рд╡рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдЪрд╛рд╣рд┐рдПред рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдореИрдВ рдирд╣реАрдВ рджреЗрдЦ рд╕рдХрддрд╛ рдХрд┐ рдХреЛрдИ рдРрд╕рд╛ рдХреНрдпреЛрдВ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдЧрд╛ред

.foo { <strong i="16">@and</strong>: &();
  @{and} {
    /*stuff meant to live under selector `.foo.foo` */
  }
}

рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХрд╛ рд╡рд░реНрддрдорд╛рди рддрд░реАрдХрд╛ _much_ рдЕрдзрд┐рдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╣реИ (рдФрд░ рдкрдврд╝рдиреЗ рдпреЛрдЧреНрдп рднреА, рдПрдХ рдмрд╛рд░ & рдЖрдкрдХреА рд╢рдмреНрджрд╛рд╡рд▓реА рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ)ред

.foo {
  && {
    /*stuff meant to live under selector `.foo.foo` */
  }
}

рдХреНрдпрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдП рдкрд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдмреА рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдореНрдореЛрд╣рдХ рдорд╛рдорд▓рд╛ (рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдХрдард┐рдирд╛рдИ рдХреЗ рдЕрд▓рд╛рд╡рд╛) рд╣реИ?

рдпрд╣ рдЙрди рдкреНрд░рд╢реНрдиреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ рдЬреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрд╛рдо рд╢реБрд░реВ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЙрддреНрддрд░ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред


TL; DR: рдореЗрд░рд╛ рд╡реЛрдЯ рдЧрддрд┐рд╢реАрд▓ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП &() рд▓рд┐рдП рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ _" & , рд▓реЗрдХрд┐рди рдорд╛рдиреЛ рдпрд╣рд╛рдВ рдиреЗрд╕реНрдЯреЗрдб рдХреЗ рдмрдЬрд╛рдп рдЧрд╣рд░рд╛"_, рдПрдХ рд╕реНрдерд┐рд░ _" рдХрд╛ рдорд╛рди рд▓реМрдЯрд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп & рдЕрднреАред"_

@calvinjuarez рдЖрдкрдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреБрдЫ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдЕрдкрдирд╛ рдЕрдкреЗрдХреНрд╖рд┐рдд рдЖрдЙрдЯрдкреБрдЯ рдирд╣реАрдВ рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╡реЗ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ рдХреБрдЫ рд╣рдж рддрдХ рдкреНрд░рддреАрдд рд╣реЛрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореВрд▓ рд░реВрдк рд╕реЗ:

.component{
  <strong i="7">@this</strong>: &();  // <strong i="8">@this</strong> is now assigned the value of `.component`
  @{this}_child { a: b; } // this variable, when evaluated, forms the selector .component_child
}
// therefore this output is:
.component .component_child {
  a: b;
}

рдЕрд░реНрде рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ "&, рд▓реЗрдХрд┐рди рдЬреИрд╕реЗ рдХрд┐ рдЧрд╣рд░рд╛рдИ рдХреЗ рдмрдЬрд╛рдп рдпрд╣рд╛рдВ рдШреЛрдВрд╕рд▓рд╛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ", рдПрдХ рд╕реНрдерд┐рд░ "рдЕрднреА рдФрд░ рдХрд╛ рдореВрд▓реНрдп" рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдпред

рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХрд╛ рдЕрд░реНрде рдирд╣реАрдВ рд╕рдордЭрддрд╛ред

рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ рдХрд╛ рдПрдХ рдФрд░ рддрд░реАрдХрд╛ред рдЗрд╕:

.component {
  <strong i="6">@this</strong>: &()
}

рд▓реЗрдЦрди рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ:

.component {
  <strong i="10">@this</strong>: .component;
}

@ рдореИрдереНрдпреВ-рдбреАрди

рд╣рд╛рдВред рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдорд┐рдХреНрд╕рд┐рдиреНрд╕ рдХреЗ рд▓реЗрдВрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реЛрдЪреЗрдВ, рдЬрд╣рд╛рдВ &() рдорд┐рдХреНрд╕рд┐рди рдХреЙрд▓рд░ рдХреЗ рдЪрдпрдирдХрд░реНрддрд╛ рд╕рдВрджрд░реНрдн рдХреЛ рдкрдХрдбрд╝ рд▓реЗрдЧрд╛ред

рдпрд╣ рдорд┐рдХреНрд╕рд┐рди-рдЖрдзрд╛рд░рд┐рдд рдШрдЯрдХреЛрдВ рдХреЛ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдмрдирд╛рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рд▓реЗрдЦрдХ рд╕реНрд╡рдпрдВ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рд╡рд░реНрдЧрдирд╛рдо рдХреА рдЬрдбрд╝ рдкрд░ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдирд┐рд░реНрдгрдп рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВред рдЬреИрд╕реЗ рджрд┐рдпрд╛ рдЧрдпрд╛

.my-button {
  #buttons.base();
  #buttons.size( ... );
  #buttons.inset-icon-support( left right );
}

.my-button--wide {
  #buttons.size( ... )
}

.my-button--condensed {
  #buttons.size( ... )
}

рд╡рд╣рд╛рдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдП рдЧрдП рдорд┐рд╢реНрд░рдг рдХрдХреНрд╖рд╛ рдХреЛ &() рдорд╛рдзреНрдпрдо рд╕реЗ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдЕрдкрдиреЗ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рдЙрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рджреВрд╕рд░реЗ рдФрд░ рддреАрд╕рд░реЗ рдирд┐рдпрдореЛрдВ рдХреЗ рд▓рд┐рдП рдХрдмреНрдЬрд╛ рдХрд░ рд▓рд┐рдпрд╛ рдЪрдпрдирдХрд░реНрддрд╛ рдмреЗрд╕ рдмреНрд▓реЙрдХ рдХреНрд▓рд╛рд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреАрдИрдПрдо рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рд╡рд┐рдШрдЯрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдиреЗрд╕реНрдЯреЗрдб рддрддреНрд╡ рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдУрд╡рд░рд░рд╛рдЗрдб рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЕрд░реНрдерд╛рддреН; рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рд╕реА рднреА рдЪрдпрдирдХрд░реНрддрд╛ рдирд╛рдо рдХреЛ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ .my-button--wide > .my-button__text рдЬреИрд╕реЗ рдЪрдпрдирдХрд░реНрддрд╛ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХреЗрд╡рд▓ рдХреИрд▓реА рдЪрдпрдирдХрд░реНрддрд╛ рд╕рдВрджрд░реНрдн рд╕реЗ рд╣реАред


рдорд┐рдХреНрд╕рд┐рди-рдЖрдзрд╛рд░рд┐рдд _рдШрдЯрдХ рдХрд╛рд░рдЦрд╛рдиреЗ_ рдЗрд╕ рддрд░рд╣ рд╕реНрдЯрд╛рдЗрд▓рд┐рдВрдЧ рдврд╛рдВрдЪреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рдЖрдкрдХреЛ рдорд┐рд▓рдиреЗ рд╡рд╛рд▓реА рд╕рднреА-рдпрд╛-рдХреБрдЫ рднреА рд╣рдорд╛рд░реА-рдпрд╛-рд░рд╛рдЬрдорд╛рд░реНрдЧ рдХреА рдХрдИ рд╕рдорд╕реНрдпрд╛рдУрдВ рд╕реЗ рдмрдЪрддреЗ рд╣реИрдВред рд╡реЗ рдЖрдкрдХреЛ рдврд╛рдВрдЪреЗ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдмрд╛рд░реАрдХ рд░реВрдк рд╕реЗ рдЪреБрдиреЗрдВ рдХрд┐ рдЖрдк рдХрд┐рди рдШрдЯрдХреЛрдВ рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдХрд┐рд╕ рдирд╛рдо рдХреЗ рддрд╣рддред

@rjgotten

рд╡рд╣рд╛рдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдП рдЧрдП рдорд┐рд╢реНрд░рдг рдХрдХреНрд╖рд╛ рдХреЛ &() рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдЕрдкрдиреЗ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рдЙрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рджреВрд╕рд░реЗ рдФрд░ рддреАрд╕рд░реЗ рдирд┐рдпрдореЛрдВ рдХреЗ рд▓рд┐рдП рдХрдмреНрдЬрд╛ рдХрд░ рд▓рд┐рдпрд╛ рдЪрдпрдирдХрд░реНрддрд╛ рдмреЗрд╕ рдмреНрд▓реЙрдХ рдХреНрд▓рд╛рд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреАрдИрдПрдо рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рд╡рд┐рдШрдЯрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдиреЗрд╕реНрдЯреЗрдб рддрддреНрд╡ рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдУрд╡рд░рд░рд╛рдЗрдб рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд╣рд╛рдБ, рдореИрдВ рд╕рдордЭ рдЧрдпрд╛ред рдпрд╣ рдорд┐рд╢реНрд░рдг рдореЗрдВ рд╢рд╛рдпрдж рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рд╣реИред рдкреНрд░рддреНрдпрдХреНрд╖ рдЪрдпрдирдХрд░реНрддрд╛ рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рдореБрдЭреЗ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ &() рдХреА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдорд┐рд▓рддреА рд╣реИред рдореЗрд░рд╛ рдХрд╣рдирд╛ рдХреЗрд╡рд▓ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ &() рдХреЗ рдореВрд▓реНрдп рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ рдерд╛ред

рдЖрдЧреЗ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд╛рдХреНрдпрд╛рддреНрдордХ рд╕рдорд╛рдзрд╛рди рд╣реИ, рдФрд░ рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ &() рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рджреВрдВрдЧрд╛, рдЕрдЧрд░ рдХреЛрдИ рдЗрд╕реЗ рд▓реЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИред

@ рдореИрдереНрдпреВ-рдбреАрди

рдЖрдкрдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреБрдЫ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдЕрдкрдирд╛ рдЕрдкреЗрдХреНрд╖рд┐рдд рдЖрдЙрдЯрдкреБрдЯ рдирд╣реАрдВ рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВ

рдУрд╣, рдХреНрд╖рдорд╛ рдХрд░реЗрдВред рдореИрдВ рдЗрд╕реЗ рдареАрдХ рд╕реЗ рджреЛрд╣рд░рд╛рдКрдВрдЧрд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ &() рдПрдХ рдордЬрдмреВрдд рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реЛрдЧреА рдпрджрд┐ рдХрдо рдпрд╣рд╛рдВ рдиреАрдЪреЗ рд╕реАрдПрд╕рдПрд╕ рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

.component { <strong i="10">@this</strong>:&();
  /* default styles */
  @{this}_child {
  // тЖС The crucial difference: `@{this}` here behaves _like `&`_, **NOT** like `.component`
  // (since it's in the same rule block and scope level).
    /* child default styles */
  }
}
.component {
  /* default styles */
}
.component_child {
  /* child default styles */
}

рдпрджрд┐ <strong i="15">@this</strong>:&(); рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ <strong i="17">@this</strong>:.component; рддрд░рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╣рдо рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдорд┐рдХреНрд╕рд┐рди рдХреЗ рдЕрдВрджрд░ рдЙрдкрдпреЛрдЧрд┐рддрд╛ _only_ рдкрд░ рд▓рд╛рдЧреВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдореЗрдВ рдФрд░ рднреА рдмрд╣реБрдд рдХреБрдЫ рд╣реИред

рдЕрд░реНрде рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ "&, рд▓реЗрдХрд┐рди рдЬреИрд╕реЗ рдХрд┐ рдЧрд╣рд░рд╛рдИ рдХреЗ рдмрдЬрд╛рдп рдпрд╣рд╛рдВ рдШреЛрдВрд╕рд▓рд╛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ", рдПрдХ рд╕реНрдерд┐рд░ "рдЕрднреА рдФрд░ рдХрд╛ рдореВрд▓реНрдп" рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдпред

рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХрд╛ рдЕрд░реНрде рдирд╣реАрдВ рд╕рдордЭрддрд╛ред

рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ .thing{ & {} } рдФрд░ .thing{ <strong i="11">@amp</strong>:&(); @{amp} {} } рдПрдХ рд╣реА рдЖрдЙрдЯрдкреБрдЯ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ, рдЕрдзрд┐рдХ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ, рдЖрдкрдХреЛ рдЖрд╕рд╛рди рдмреАрдИрдПрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд┐рд╢реНрд░рдг рд▓рд┐рдЦрдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдЗрдирд▓рд╛рдЗрди рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореЗрд░реЗ рдкреБрд░рд╛рдиреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рд╡рд╛рдкрд╕ рдЬрд╛рдирд╛:

_рдШрдЯрдХ.рдХрдо_

.component { // I only write "component" once!  Much concise, such DRY!
  <strong i="16">@this</strong>: &();

  /* base styles */

  @{this}_child {
    /* styles for the child */
  }

  @{this}-variant { // component-variant styles all together, and inside the `.component` block
    /* nothing too schmancy so far */
    @{this}_child {
      /* IT'S MAGIC! */
    }
  }
}

рдореИрдВ

_рдШрдЯрдХ.рд╕реАрдПрд╕рдПрд╕_

.component {
  /* base styles */
}
.component_child {
  /* styles for the child */
}
.component-variant {
  /* nothing too schmancy so far */
}
.component-variant .component_child {
  /* IT'S MAGIC! */
}

рд▓рд╛рдн: рдЖрдкрдХреЛ рдЕрдкрдиреА рдЯреАрдо рд╕реЗ рдпрд╣ рдкреВрдЫрдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЙрдирдХрд╛ рдорддрд▓рдм & рдпрд╛ @{this} ред рдЖрдк рдмрд╕ рдХрд╣рддреЗ рд╣реИрдВ "рдмрд╕ рд╣рд░ рдЬрдЧрд╣ @{this} рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред"

рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдШрдЯрдХ рдлреИрдХреНрдЯреНрд░реА рдорд┐рдХреНрд╕рд┐рди рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рд╕реБрд╕рдВрдЧрдд рдмрдирд╛ рджреЗрдЧрд╛ред

_рдХрд╛рд▓реНрдкрдирд┐рдХ-рдмрдЯрди-рдорд┐рд╢реНрд░рдгред рд░рд╣рд┐рдд_

#button () {
  .size(large) { <strong i="7">@button</strong>: &();
    @{button} { // same scope, so it behaves _exactly_ like `&`.
      font-size: 1.8rem;
    }
    @{button}-primary { // same scope, so it behaves _exactly_ like `&`.
      border-width: 5px;
      @{button}_icon { // nested scope, behaves like the parent selector at the mixin call (.btn).
        height: 1.8rem;
        width:  1.8rem;
      }
    }
  }
}
// ...

_рдХрд╛рд▓реНрдкрдирд┐рдХ-рд╢реИрд▓реАред рд░рд╣рд┐рдд_

.btn {
  #button.size(large);
}

_рдХрд╛рд▓реНрдкрдирд┐рдХ-рд╢реИрд▓реА.css_

.btn {
  font-size: 1.8rem;
}
.btn-primary {
  border-width: 5px;
}
.btn-primary .btn_icon {
  height: 1.8rem;
  width:  1.8rem;
}

рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ .thing{& {} } рдФрд░ .thing{ @amp :&(); @{amp} {} } рдХреЛ рд╕рдорд╛рди рдЖрдЙрдЯрдкреБрдЯ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╣рд╛рдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рд╡рд╣реА рдмрд╛рддреЗрдВ рдХрд╣ рд░рд╣реЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рджреЗрдВред рдореИрдВ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдмрдирд╛рдо рдЗрди-рдкреНрд▓реЗрд╕ & рдЗрд╕ рддрд░рд╣ рджреЗрдЦрддрд╛ рд╣реВрдВред

.mixin() {
  <strong i="10">@this</strong>: &();
  .a {
    .b @{this} { c: d; }
  }
}
.component {
  .mixin();
}

// outputs:
.component .a .b .component {
  c: d;
}

рдЬрдмрдХрд┐:

.mixin() {
  .a {
    .b & { c: d; }
  }
}

рдЙрддреНрдкрд╛рджрди рдХрд░реЗрдВрдЧреЗ:

.b .component .a {
  c: d;
}

@calvinjuarez рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЙрд▓рдЭрди рдореЗрдВ рдерд╛ рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рднреА рдЖрдкрдХреЗ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдЕрд▓рдЧ рдХреБрдЫ рд╕реБрдЭрд╛рд╡ рдирд╣реАрдВ рджреЗ рд░рд╣рд╛ рдерд╛ред &() рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдЙрд╕ рд╕реНрдерд╛рди рдкрд░ this.selectors.toCSS() eval'd рдЬреИрд╕рд╛ рд╣реЛрдЧрд╛ ( рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП .... рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рддреЗрдЬрд╝ рддрд░реАрдХрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)ред рдФрд░ рдлрд┐рд░ рдЙрд╕ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдЕрдиреНрдп рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рдирд╛ рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдкреБрдирдГ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИред

@ рдореИрдереНрдпреВ-рдбреАрди
рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ _more_ рднреА рднрдпрд╛рдирдХ рд╣реЛрдЧрд╛ рдпрджрд┐ рдпрд╣ рдЪрдпрдирдХрд░реНрддрд╛ рд╕реВрдЪреА рдХреЛ рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реВрдЪреА рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдЬрд╛рдЧрд░ рдХрд░реЗрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ рд╕рднреА рд╕реВрдЪреА рд╕рджрд╕реНрдпреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд╡реНрдпрд╡рд╣рд╛рд░ рд╢рд╛рдорд┐рд▓ рд╣реИред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП

.a, .b {
  <strong i="8">@this</strong> : &();

  @{this} {
    c : d;  
  }
}

рдЙрддреНрдкрд╛рджрди

.a .a,
.a .b,
.b. .a,
.a .b {
  c : d
}

рдЬреИрд╕реЗ рджреЗрд╢реА & рд╣реЛрдЧрд╛ред

рд╣рд╛рдБ, рдпрд╣ рдареАрдХ рдпрд╣реА рдХрд░реЗрдЧрд╛ред 3.5 рдореЗрдВ, рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдореЗрдВ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд┐рдП рдЧрдП рдХрд┐рд╕реА рднреА рдЪрд░ рдХреЗ рдХрд╛рд░рдг рд╕рдВрдкреВрд░реНрдг рдЪрдпрдирдХрд░реНрддрд╛ рд╕реВрдЪреА рдХреЛ рдПрдХ рдирдИ рдЪрдпрдирдХрд░реНрддрд╛ рд╕реВрдЪреА рдХреЗ рд░реВрдк рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдкрд╛рд░реНрд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рддреЛ рд╣рд╛рдБ, рдпрд╣ рдЕрдкреЗрдХреНрд╖рд╛ рдХреЗ рдЕрдиреБрд░реВрдк рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдП рдЧрдП рдХреБрдЫ рд╣рд╛рд▓рд┐рдпрд╛ рдкреАрдЖрд░ рдХреЗ рдХрд╛рд░рдг рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╛рдлреА рдЖрд╕рд╛рди рд╣реИред

рдЬреБрд▓рд╛ 7, 2018, рдкрд░ 10:34 AM рдкрд░, rjgotten [email protected] рд▓рд┐рдЦрд╛ рд╣реИ:

@ рдореИрдереНрдпреВ-рдбреАрди
рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдФрд░ рднреА рднрдпрд╛рдирдХ рд╣реЛрдЧрд╛ рдпрджрд┐ рдпрд╣ рдЪрдпрдирдХрд░реНрддрд╛ рд╕реВрдЪреА рдХреЛ рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реВрдЪреА рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдЬрд╛рдЧрд░ рдХрд░реЗрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ рд╕рднреА рд╕реВрдЪреА рд╕рджрд╕реНрдпреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд╡реНрдпрд╡рд╣рд╛рд░ рд╢рд╛рдорд┐рд▓ рд╣реИред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП

.рдП, .рдмреА {
@ рдпрд╣ : рдФрд░ ();

@{рдпрд╣} {
рд╕реА: рдбреА;
}
}
рдЙрддреНрдкрд╛рджрди

.рдП.рдП,
.рдП.рдмреА,
редрдмреАред редрдП,
.рдП.рдмреА {
рд╕реА: рдбреА
}
рдореВрд▓ рдирд┐рд╡рд╛рд╕реА рдХреА рддрд░рд╣ рдФрд░ рд╣реЛрдЧрд╛ред

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ, рдпрд╛ рдереНрд░реЗрдб рдХреЛ рдореНрдпреВрдЯ рдХрд░реЗрдВред

.component{
 <strong i="6">@this</strong>: &();  // <strong i="7">@this</strong> is now assigned the value of `.component`
 @{this}_child { a: b; } // this variable, when evaluated, forms the selector .component_child
}
// therefore this output is:
.component .component_child {
 a: b;
}

рдЕрддрд┐рд░рд┐рдХреНрдд .component рд╡рд╣ рд╣реИ рдЬрд┐рд╕рдХреЗ рдЦрд┐рд▓рд╛рдл рдореИрдВ рдмрд╣рд╕ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдореИрдВ рд╕реБрдЭрд╛рд╡ рджреЗ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:

less .component{ <strong i="12">@this</strong>: &(); // <strong i="13">@this</strong> is now assigned the value of `.component < &` @{this}_child { a: b; } // this variable evaluates like `&_child` } // therefore this output is: .component_child { // < Note: `.component_child` !== `.component .component_child` a: b; }

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдлреАрдЪрд░ рд╣рд╛рд▓рд╛рдВрдХрд┐ рдПрдХ рдЕрд▓рдЧ рджрд┐рд╢рд╛ рдореЗрдВ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рдмрд╕ рдЕрдкрдиреА рд╕реНрдерд┐рддрд┐ рд╕реНрдкрд╖реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред

рдореИрдВ рд╕реБрдЭрд╛рд╡ рджреЗ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:

рдпрд╛рдиреА рдЕрдЧрд░ рдПрдХ рдЪрдпрдирдХрд░реНрддрд╛ рдореЗрдВ рдПрдХ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдЯреЛрдХрди рд╣реИ рдЬреЛ рдПрдХ рд╕рд╛рджреЗ _string_ рдХреЗ рдмрдЬрд╛рдп рдПрдХ _selector list_ рд╣реИ, рддреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдЯреЛрдХрди рдЙрд╕реА рддрд░рд╣ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ & рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдП рдЧрдП рдереЗ рдФрд░ рдпрд╣ _disables_ рд╕рд╛рдорд╛рдиреНрдп рдЪрдпрдирдХрд░реНрддрд╛ рдЪреЗрдирд┐рдВрдЧ рдЬреЛ рдШреЛрдВрд╕рд▓реЗ рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИред

рдпрджрд┐ &() рдПрдХ рдиреЛрдб рдкреНрд░рдХрд╛рд░ рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рдирд╛ рдерд╛ рдЬреЛ рдЗрд╕реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЪрдпрдирдХрд░реНрддрд╛ рд╕реВрдЪреА рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╣рдЪрд╛рдирдиреЗ рдпреЛрдЧреНрдп рдмрдирд╛рддрд╛ рд╣реИ, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рд╣рд╛рд╕рд┐рд▓ рдХрд░рдирд╛ рддреБрд▓рдирд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрджрд┐ рдпрд╣ рдПрдХ рд╕рдорд░реНрдкрд┐рдд рдиреЛрдб рдкреНрд░рдХрд╛рд░ рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдерд╛, рдЬреЛ рдмрд╛рдж рдореЗрдВ рдХреИрдкреНрдЪрд░ рдХреА рдЧрдИ рдЪрдпрдирдХрд░реНрддрд╛ рд╕реВрдЪреА рдХреЛ _manipulate_ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд▓рдЧрдЗрди рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдореЗрдВ рд╕рд╣рд╛рдпрддрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдореЗрд░реЗ рд▓рд┐рдП, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдмрд╛рд░ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдХрд╛рдо рдХрд░рдирд╛ &() рдХрд░рдирд╛ред рдпрджрд┐ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХреЛ рдПрдХ рдЪрд░ рдореЗрдВ рд╕рд╣реЗрдЬреЗ, рддреЛ рдпрд╣ рдПрдХ рдмрд╛рдд рд╣реИ, рд▓реЗрдХрд┐рди рдЙрд╕ рдЪрд░ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪрдпрдирдХрд░реНрддрд╛ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЛ _content_ рдХреЗ рдХрд╛рд░рдг рд╕рд┐рдВрдЯреИрдХреНрд╕ рдореЗрдВ рдЕрд╕реНрдкрд╖реНрдЯ рд╣реЛрдЧрд╛ред рд╡рд╣ рдЪрд░ рдХрд╣реАрдВ рд╕реЗ рднреА рдЖ рд╕рдХрддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдорд┐рд╢реНрд░рдг рд╕реЗ рдкрд╛рд░рд┐рдд) рдФрд░ рдЪрдпрдирдХрд░реНрддрд╛ рд╕реВрдЪреА рд╕рд░рд▓ рдЪрд░ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред рдпрд╣реА рд╣реИ, рдпрд╣ рдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдЙрдкрдпреЛрдЧ рд╕реЗ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЪрд░ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдЕрд▓рдЧ рд╢реНрд░реГрдВрдЦрд▓рд╛рдмрджреНрдз рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реЛрдЧрд╛ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк рдЪреЗрдирд┐рдВрдЧ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдпрд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдЖрдк рдирд┐рд╣рд┐рдд рдФрд░ рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдорд╛рди рд╕реЗ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ (рд╕реНрд╡рд░реВрдкрдг рдХреЛ рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдореИрдВ рдЕрдкрдиреЗ рдлреЛрди рдкрд░ рд╣реВрдВ) -

редрдЕрд╡рдпрд╡ {
@рд╡рд░ : рдФрд░ ();
&(@var)_child {} // рдпрд╛ рдХреБрдЫ рдРрд╕реЗ "& рдХрд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди" рд╕рд┐рдВрдЯреИрдХреНрд╕
}

рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкрд░рд┐рдгрд╛рдо рд╡рд╛рдВрдЫрдиреАрдп рдХреНрдпреЛрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдИрдПрдордУ рд╣рдо рдЪрдпрдирдХрд░реНрддрд╛ рд╕реВрдЪреА рдХрд╣рд╛рдВ рд╕реЗ рдЖрддреЗ рд╣реИрдВ, рдЗрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╣рдо рдХреЗрд╡рд▓ "рдЬрд╛рджреВ-рд╕реНрд╡рд┐рдЪ" рдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╡рд┐рд▓рдп рд╡реНрдпрд╡рд╣рд╛рд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рд▓рд┐рдП рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рдУрд╣... рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ &(...) рдЪреАрдЬрд╝ рдкрд╕рдВрдж рд╣реИ...

рд╣рд╛, рд╕рдЪ рдореЗрдВ? рдЖрдкрдХреЛ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ &() (& рд╕реЗ рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХреЛ рдХреИрдкреНрдЪрд░ рдХрд░реЗрдВ) рдФрд░ &(@arg) ( & рдХреЛ рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдмрджрд▓реЗрдВ) рдХрд╛ рдЕрд░реНрде рд╕рдВрдмрдВрдзреА рднреНрд░рдо рд╣реЛрдЧрд╛?

рдЖрдк рдЙрдиреНрд╣реЗрдВ рдорд┐рд╢реНрд░рд┐рдд рди рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ & рдХреЛ рдПрдХ рдЦрд╛рд▓реА рдЪрдпрдирдХрд░реНрддрд╛ рдХреЗ рд╕рд╛рде рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рддреНрдпрд╛рдЧрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣ рд╕рдХрддрд╛ рд╣реИред (рдмрдЪреНрдЪреЗ рдХреЛ рдЬрдбрд╝ рдореЗрдВ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдПред) рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╢рд╛рдпрдж рдпрд╣ &(тАЬтАЭ) рд╕рдХрддрд╛ рд╣реИред

рдореБрдЭреЗ рдкрддрд╛ рдирд╣реАрдВ, рдпрд╣ рдХреБрдЫ рд╡рд┐рдЪрд╛рд░/рд╡рд┐рдЪрд╛рд░ рдХреЗ рдпреЛрдЧреНрдп рд╣реИред

рд╕рд╛рде рд╣реА, рдЬреИрд╕рд╛ рдХрд┐ "рдкреИрд░реЗрдВрдЯ рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХреЗ рдкрд╛рд╕ рд▓рдХреНрд╖реНрдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП" рдереНрд░реЗрдб рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╡рд┐рд░рд╛рд╕рдд рдЪрдпрдирдХрд░реНрддрд╛ (рдпрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ) рдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдХрд░, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдореБрджреНрджреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЯреНрд░реИрдХ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдореБрджреНрджрд╛ рд╕рд┐рд░реНрдл рдХреИрдкреНрдЪрд░рд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░

рдмрд╕ рдЗрд╕ рд╕рд░реНрдХрд▓ рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдВ рдкрд░ рдореИрдВрдиреЗ & рдХреЛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди-рдЬреИрд╕реА рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде рдмрджрд▓рдиреЗ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИред - https://github.com/less/less.js/issues/1075#issuecomment -397697714

рдЗрд╕рд▓рд┐рдП, рдореИрдВ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ рдХрд┐ "рдХреИрд╕реЗ/рдХреНрдпрд╛ & рд╡рд┐рд░рд╛рд╕рдд рдХреЛ рдмрджрд▓рдирд╛ рд╣реИ" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдЪрдпрдирдХрд░реНрддрд╛ рдзрд╛рдЧреЗ рдореЗрдВ рдмрдиреА рд╣реБрдИ рд╣реИ, рдФрд░ рдпрд╣ рдзрд╛рдЧрд╛ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ рдХрд┐ <strong i="9">@var</strong>: &() рдореЗрдВ рдХрдмреНрдЬрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИ рдпрд╛ рдирд╣реАрдВ - & рдЪрдпрдирдХрд░реНрддрд╛ рдХреЛ рдПрдХ рдЪрд░ рдореЗрдВ рд░рдЦреЗрдВред рдЬреЛ, рдореЗрд░реЗ рджрд┐рдорд╛рдЧ рдореЗрдВ, рдЕрдиреНрдп рд╕реВрддреНрд░ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдЕрднреА рднреА рдареАрдХ рд▓рдЧрддрд╛ рд╣реИред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рджреЛрдиреЛрдВ рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рд╣реИ рдпрд╛ рдирд╣реАрдВред

рдореИрдВ рдпрд╣ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ

.html, .css, .js, .php, .mysql, .jquery, .txt, .java {
    <strong i="6">@html</strong>: '\f2d0';
    <strong i="7">@css</strong>: '\f034';
    <strong i="8">@js</strong>: '\f121';
    <strong i="9">@php</strong>: '\f120';
    <strong i="10">@mysql</strong>: '\f1c0';
    <strong i="11">@jquery</strong>: '\f78c';
    <strong i="12">@java</strong>: '\f11b';
    <strong i="13">@txt</strong>: '\f15c';
    &:before {
        content+_: @&;
    }
}

рд▓реЗрдХрд┐рди рдпрд╣ рддрдм рддрдХ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ рдЬрдм рддрдХ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

papandreou picture papandreou  ┬╖  7рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

BrianMulhall picture BrianMulhall  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

joe223 picture joe223  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

briandipalma picture briandipalma  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

xblakestone picture xblakestone  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ