тЬН

рдХреЛрдб рдЧрд╛рдЗрдб by @mdo

рд▓рдЪреАрд▓рд╛, рдЯрд┐рдХрд╛рдК, рдФрд░ рдЯрд┐рдХрд╛рдК HTML рдФрд░ CSS рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ

рд╡рд┐рд╖рдп - рд╕реВрдЪреА

рдПрдЪрдЯреАрдПрдордПрд▓

рд╕реАрдПрд╕рдПрд╕

рд╕реБрдирд╣рд░рд╛ рдирд┐рдпрдо

рдЗрди, рдпрд╛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рд▓рд╛рдЧреВ рдХрд░рдиреЗ, рд╕рднреА рд╕рдордп рдкрд░ рджрд┐рд╢рд╛-рдирд┐рд░реНрджреЗрд╢реЛрдВ рдкрд░ рд╕рд╣рдордд рд╣реБрдПред рдЫреЛрдЯреЗ рдпрд╛ рдмрдбрд╝реЗ, рдмрд╛рд╣рд░ рдХреЙрд▓ рдХреНрдпрд╛ рдЧрд▓рдд рд╣реИред рдЬреЛрдбрд╝ рдпрд╛ рдЗрд╕ рд╕рдВрд╣рд┐рддрд╛ рдЧрд╛рдЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпреЛрдЧрджрд╛рди рдХреЗ рд▓рд┐рдП, рдХреГрдкрдпрд╛ GitHub рдкрд░ рдПрдХ рдореБрджреНрджрд╛ рдЦреЛрд▓рдиреЗ.

рдХреЛрдб рдХреА рд╣рд░ рдкрдВрдХреНрддрд┐ рдПрдХ рд╣реА рд╡реНрдпрдХреНрддрд┐ рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦреЗ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдХрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреЛрдИ рдпреЛрдЧрджрд╛рдирдХрд░реНрддрд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдХреЛрдИ рдлрд░реНрдХред

рдПрдЪрдЯреАрдПрдордПрд▓

рд╡рд╛рдХреНрдп - рд╡рд┐рдиреНрдпрд╛рд╕

<!DOCTYPE html>
<html>
  <head>
    <title>Page title</title>
  </head>
  <body>
    <img src="images/company-logo.png" alt="Company">
    <h1 class="hello-world">Hello, world!</h1>
  </body>
</html>

рдПрдЪрдЯреАрдПрдордПрд▓ 5 doctype

рд╣рд░ HTML рдкреГрд╖реНрда рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЗрд╕ рд╕рд░рд▓ doctype рдХреЗ рд╕рд╛рде рд╕рдВрднрд╡ рд╣рд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдорд╛рдирдХреЛрдВ рдореЛрдб рдФрд░ рдЕрдзрд┐рдХ рд╕реБрд╕рдВрдЧрдд рдкреНрд░рддрд┐рдкрд╛рджрди рд▓рд╛рдЧреВред

<!DOCTYPE html>
<html>
  <head>
  </head>
</html>

рднрд╛рд╖рд╛ рд╡рд┐рд╢реЗрд╖рддрд╛

рдПрдЪрдЯреАрдПрдордПрд▓ 5 рдХрд▓реНрдкрдирд╛ рд╕реЗ:

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

рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдЕрдзрд┐рдХ рдкрдврд╝реЗрдВ lang рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд▓реНрдкрдирд╛ рдореЗрдВ.

рдПрдХ рдХреЗ рд▓рд┐рдП Sitepoint рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд┐рд░ рднрд╛рд╖рд╛ рдХреЛрдб рдХреА рд╕реВрдЪреА.

<html lang="en-us">
  <!-- ... -->
</html>

IE рд╕рдВрдЧрддрддрд╛ рдореЛрдб

рдЗрдВрдЯрд░рдиреЗрдЯ рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рдПрдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рдЕрдиреБрдХреВрд▓рддрд╛ рдХреЗ рдЙрдкрдпреЛрдЧ рдХрд╛ рд╕рдорд░реНрдерди <meta> IE рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреНрдпрд╛ рдкреГрд╖реНрда рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рджрд╛рди рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреИрдЧред рдЬрдм рддрдХ рд╣рд╛рд▓рд╛рдд рдЕрдиреНрдпрдерд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЗрд╕рдХреЗ рд╕рд╛рде рдирд╡реАрдирддрдо рд╕рдорд░реНрдерд┐рдд рдореЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП IE рд╣рд┐рджрд╛рдпрдд рд▓рд┐рдП рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдПрдЬ рдореЛрдб.

рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП, рдЗрд╕ рднрдпрд╛рдирдХ рдкреЛрдЯ рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рд▓реЗрдЦ рдкрдврд╝рд╛ (рд╕реНрдЯреИрдХ рдУрд╡рд░рдлреНрд▓).

<meta http-equiv="X-UA-Compatible" content="IE=Edge">

рдЕрдХреНрд╖рд░реЛрдВ рдХреЛ рд╕рд╛рдВрдХреЗрддрд┐рдХ рдЕрдХреНрд╖рд░реЛрдВ рдореЗрдВ рдмрджрд▓рдирд╛

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

<head>
  <meta charset="UTF-8">
</head>

рд╕реАрдПрд╕рдПрд╕ рдФрд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╢рд╛рдорд┐рд▓

рдкреНрд░рддрд┐ рдПрдЪрдЯреАрдПрдордПрд▓ 5 рдХрд▓реНрдкрдирд╛, рдЖрдо рддреМрд░ рдкрд░ рд╡рд╣рд╛рдБ рдПрдХ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИ type рдЬрдм рд╕рд╣рд┐рдд рд╕реАрдПрд╕рдПрд╕ рдФрд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ text/css рдФрд░ text/javascript рдЙрдирдХреЗ рд╕рдВрдмрдВрдзрд┐рдд рдЪреВрдХ рд░рд╣реЗ рд╣реИрдВред

рдПрдЪрдЯреАрдПрдордПрд▓ 5 рдХрд▓реНрдкрдирд╛ рд▓рд┐рдВрдХ

<!-- External CSS -->
<link rel="stylesheet" href="code-guide.css">

<!-- In-document CSS -->
<style>
  /* ... */
</style>

<!-- JavaScript -->
<script src="code-guide.js"></script>

рдкрд╡рд┐рддреНрд░рддрд╛ рд╕реЗ рдЕрдзрд┐рдХ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХрддрд╛

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

рдЖрджреЗрд╢ рдЧреБрдг

рдПрдЪрдЯреАрдПрдордПрд▓ рдХреЛрдб рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдЖрд╕рд╛рдиреА рд╕реЗ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рдХреНрд░рдо рдореЗрдВ рдЖрдирд╛ рдЪрд╛рд╣рд┐рдПред

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

<a class="..." id="..." data-toggle="modal" href="#">
  Example link
</a>

<input class="form-control" type="text">

<img src="..." alt="...">

рдмреВрд▓рд┐рдпрди рдЧреБрдг

рдПрдХ рдмреВрд▓рд┐рдпрди рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рдШреЛрд╖рд┐рдд рдореВрд▓реНрдп рдХреА рдЬрд░реВрд░рдд рд╣реИред рдПрдХреНрд╕рдПрдЪрдЯреАрдПрдордПрд▓ рдЖрдк рдПрдХ рдореВрд▓реНрдп рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдЪрдЯреАрдПрдордПрд▓ 5 рдРрд╕реА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдЖрдЧреЗ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдкрд░рд╛рдорд░реНрд╢ рдмреВрд▓рд┐рдпрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдкрд░ WHATWG рдЕрдиреБрднрд╛рдЧ:

рдПрдХ рддрддреНрд╡ рдкрд░ рдПрдХ рдмреВрд▓рд┐рдпрди рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рд╕рд╣реА рдореВрд▓реНрдп рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рдЕрднрд╛рд╡ рдЭреВрдареА рдореВрд▓реНрдп рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИред

рдЖрдк рддреЛ рдЪрд╛рд╣рд┐рдП рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рдореВрд▓реНрдп рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдФрд░ рдЖрдк рдХреЛ рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИ, рдЗрд╕ WHATWG рджрд┐рд╢рд╛рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВ:

рдЕрдЧрд░ рд╡рд┐рд╢реЗрд╖рддрд╛ рдореМрдЬреВрдж рд╣реИ, рдЗрд╕рдХреА рдХреАрдордд рдпрд╛ рддреЛ рдЦрд╛рд▓реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдпрд╛ [...] рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╡рд┐рд╣рд┐рдд рдирд╛рдо, рдХреЛрдИ рдЖрдЧреЗ рдпрд╛ рдкреАрдЫреЗ рдХреЛрдИ рдЦрд╛рд▓реА рд╕реНрдерд╛рди рдХреЗ рд╕рд╛рде рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдПрдХ рдореВрд▓реНрдп рдЬреЛрдбрд╝ рдирд╣реАрдВ рд╣реИред

<input type="text" disabled>

<input type="checkbox" value="1" checked>

<select>
  <option value="1" selected>1</option>
</select>

рдорд╛рд░реНрдХрдЕрдк рдХреЛ рдХрдо рдХрд░рдирд╛

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

<!-- Not so great -->
<span class="avatar">
  <img src="...">
</span>

<!-- Better -->
<img class="avatar" src="...">

рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЙрддреНрдкрдиреНрди рдорд╛рд░реНрдХрдЕрдк

рдПрдХ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдорд╛рд░реНрдХрдЕрдк рд▓реЗрдЦрди рд╕рд╛рдордЧреНрд░реА рдХрдард┐рди рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдард┐рди рд╣реИ, рдФрд░ рдХрдо performant рдмрдирд╛рддрд╛ рд╣реИред рдпрд╣ рдХрд░рдиреЗ рд╕реЗ рдмрдЪреЗрдВ рдЬрдм рднреА рд╕рдВрднрд╡ рд╣реИред

рд╕реАрдПрд╕рдПрд╕

рд╡рд╛рдХреНрдп - рд╡рд┐рдиреНрдпрд╛рд╕

рд╢рд░реНрддреЛрдВ рдкрд░ рд╕рд╡рд╛рд▓ рдпрд╣рд╛рдБ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рд╣реИ? рджреЗрдЦреЗрдВ рд╡реНрдпрд╛рдкрдХ рд╕реНрдЯрд╛рдЗрд▓ рд╢реАрдЯ рд▓реЗрдЦ рдХреЗ рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рдЕрдиреБрднрд╛рдЧ рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рдкрд░ред

/* Bad CSS */
.selector, .selector-secondary, .selector[type=text] {
  padding:15px;
  margin:0px 0px 15px;
  background-color:rgba(0, 0, 0, 0.5);
  box-shadow:0px 1px 2px #CCC,inset 0 1px 0 #FFFFFF
}

/* Good CSS */
.selector,
.selector-secondary,
.selector[type="text"] {
  padding: 15px;
  margin-bottom: 15px;
  background-color: rgba(0,0,0,.5);
  box-shadow: 0 1px 2px #ccc, inset 0 1px 0 #fff;
}

рдШреЛрд╖рдгрд╛ рдХреЗ рдЖрджреЗрд╢

рд╕рдВрдмрдВрдзрд┐рдд рд╕рдВрдкрддреНрддрд┐ рдШреЛрд╖рдгрд╛рдУрдВ рдХреЗ рдЖрджреЗрд╢ рдХреЗ рдмрд╛рдж рдПрдХ рд╕рд╛рде рдмрд╛рдВрдЯрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:

  1. рдкреЛрдЬрд┐рд╢рдирд┐рдВрдЧ
  2. рдмреЙрдХреНрд╕ рдореЙрдбрд▓
  3. рдореБрджреНрд░рдг
  4. рджреГрд╢реНрдп

рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдФрд░ рдУрд╡рд░рд░рд╛рдЗрдб рдмреЙрдХреНрд╕ рдореЙрдбрд▓ рд╕рдВрдмрдВрдзрд┐рдд рд╢реИрд▓рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рд╡рд╛рд╣ рд╕реЗ рдПрдХ рддрддреНрд╡ рдХреЛ рджреВрд░ рдХрд░ рд╕рдХрддреЗ рдкреЛрдЬрд┐рд╢рдирд┐рдВрдЧ рдкрд╣рд▓реЗ рдЖрддрд╛ рд╣реИред рдмреЙрдХреНрд╕ рдореЙрдбрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдпрд╣ рдПрдХ рдШрдЯрдХ рдХреЗ рдЖрдпрд╛рдо рдФрд░ рд╕реНрдерд╛рди рддрдп рдХрд░ рдЕрдЧрд▓реЗ рдЖрддрд╛ рд╣реИред

рдмрд╛рдХреА рд╕рдм рдХреБрдЫ рдЬрдЧрд╣ рд▓реЗрддрд╛ рд╣реИ рдЕрдВрджрд░ рдШрдЯрдХ рдпрд╛ рдкрд┐рдЫрд▓реЗ рджреЛ рд╡рд░реНрдЧреЛрдВ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд┐рдП рдмрд┐рдирд╛, рдФрд░ рдЗрд╕ рддрд░рд╣ рд╡реЗ рдкрд┐рдЫрд▓реЗ рдЖрддреЗ рд╣реИрдВред

рдЧреБрдг рдФрд░ рдЙрдирдХреЗ рдЖрджреЗрд╢ рдХреА рдПрдХ рдкреВрд░реА рд╕реВрдЪреА рдХреЗ рд▓рд┐рдП, рдХреГрдкрдпрд╛ рджреЗрдЦреЗрдВ рдЕрд╡рдХрд╛рд╢.

.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;
}

@import рдХрд╛ рдкреНрд░рдпреЛрдЧ рди рдХрд░реЗрдВ

<link> рдХреА рддреБрд▓рдирд╛ рдореЗрдВ @import рдзреАрдореА рд╣реИ, рдЕрддрд┐рд░рд┐рдХреНрдд рдкреГрд╖реНрда рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╣рддреЗ рд╣реИрдВ, рдФрд░ рдЕрдиреНрдп рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рдХрд╛рд░рдг рдмрди рд╕рдХрддрд╛ рд╣реИред рдЙрдиреНрд╣реЗрдВ рдмрдЪреЗрдВ рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд▓рд┐рдП рдЪреБрдирддреЗ рд╣реИрдВ:

рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП, рд╕реНрдЯреАрд╡ рд╕реЛрдЙрджреЗрд░реНрд╕ рджреНрд╡рд╛рд░рд╛ рдЗрд╕ рд▓реЗрдЦ рдХреЛ рдкреЭреЗрдВ!.

<!-- Use link elements -->
<link rel="stylesheet" href="core.css">

<!-- Avoid @imports -->
<style>
  @import url("more.css");
</style>

рдореАрдбрд┐рдпрд╛ рдХреНрд╡реЗрд░реА рдХреЗ рдкреНрд▓реЗрд╕рдореЗрдВрдЯ

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

.element { ... }
.element-avatar { ... }
.element-selected { ... }

@media (min-width: 480px) {
  .element { ...}
  .element-avatar { ... }
  .element-selected { ... }
}

рдЙрдкрд╕рд░реНрдЧ рдХреЗ рдЧреБрдг

рд╡рд┐рдХреНрд░реЗрддрд╛ рдЙрдкрд╕рд░реНрдЧ рдЧреБрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░, рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрдкрддреНрддрд┐ рдЗрдВрдбреЗрдВрдЯ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреА рдШреЛрд╖рдгрд╛ рдХреЗ рдореВрд▓реНрдп рд▓рд╛рдЗрдиреЗрдВ рдЦрдбрд╝реА рдЖрд╕рд╛рди рдмрд╣реБ рд▓рд╛рдЗрди рд╕рдВрдкрд╛рджрди рдХреЗ рд▓рд┐рдПред

Textmate рдореЗрдВ рдЙрдкрдпреЛрдЧ Text тЖТ рдХреЗ рдЪрдпрди рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ тЖТ рд╕рдВрдкрд╛рджрд┐рдд рдкрд╛рда (тМГтМШA). Sublime Text 2 рдХрд╛ рдЙрдкрдпреЛрдЧ рдЪрдпрди тЖТ рдкрд┐рдЫрд▓рд╛ рд▓рд╛рдЗрди рдХреЛ рдЬреЛрдбрд╝рдиреЗ (тМГтЗзтЖС) рдФрд░ рдЪрдпрди тЖТ рдЕрдЧрд▓реА рдкрдВрдХреНрддрд┐ рдЬреЛрдбрд╝реЗрдВ (тМГтЗзтЖУ).

/* Prefixed properties */
.selector {
  -webkit-box-shadow: 0 1px 2px rgba(0,0,0,.15);
          box-shadow: 0 1px 2px rgba(0,0,0,.15);
}

рдПрдХрд▓ рдШреЛрд╖рдгрд╛рдУрдВ

рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ рдЬрд╣рд╛рдВ рдПрдХ рдирд┐рдпрдо рд╕реЗрдЯ рд╢рд╛рдорд┐рд▓ рд╣реИ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдШреЛрд╖рдгрд╛ , рдкрдардиреАрдпрддрд╛ рдФрд░ рддреЗрдЬреА рд╕реЗ рд╕рдВрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рд▓рд╛рдЗрди рдЯреВрдЯ рд╣рдЯрд╛рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдХрд┐рд╕реА рднреА рдирд┐рдпрдо рдХрдИ рдШреЛрд╖рдгрд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╕реЗрдЯ рдЕрд▓рдЧ рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

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

/* Single declarations on one line */
.span1 { width: 60px; }
.span2 { width: 140px; }
.span3 { width: 220px; }

/* Multiple declarations, one per line */
.sprite {
  display: inline-block;
  width: 16px;
  height: 15px;
  background-image: url(../img/sprite.png);
}
.icon           { background-position: 0 0; }
.icon-home      { background-position: 0 -20px; }
.icon-account   { background-position: 0 -40px; }

рд╕рдВрдХреНрд╖реЗрдк рд╕рдВрдХреЗрддрди

рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ рдЬрд╣рд╛рдВ рдЖрдк рд╕реНрдкрд╖реНрдЯ рд╕рднреА рдЙрдкрд▓рдмреНрдз рдореВрд▓реНрдпреЛрдВ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЖрд╢реБрд▓рд┐рдкрд┐ рдШреЛрд╖рдгрд╛рдУрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред рдЖрдо overused рдЖрд╢реБрд▓рд┐рдкрд┐ рд╕рдВрдкрддреНрддрд┐ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:

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

рдореЛрдЬрд╝рд┐рд▓рд╛ рдбреЗрд╡рд▓рдкрд░ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдПрдХ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓реЗрдЦ рд╣реИ рдЖрд╢реБрд▓рд┐рдкрд┐ рдЧреБрдг рд╕рдВрдХреЗрддрди рдФрд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд╕рд╛рде рдЕрдкрд░рд┐рдЪрд┐рдд рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдПред

/* Bad example */
.element {
  margin: 0 0 10px;
  background: red;
  background: url("image.jpg");
  border-radius: 3px 3px 0 0;
}

/* Good example */
.element {
  margin-bottom: 10px;
  background-color: red;
  background-image: url("image.jpg");
  border-top-left-radius: 3px;
  border-top-right-radius: 3px;
}

LESS рдФрд░ SASS рдореЗрдВ рдиреЗрд╕реНрдЯрд┐рдВрдЧ

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

рдЕрддрд┐рд░рд┐рдХреНрдд рдкрдврд╝рдирд╛:

// Without nesting
.table > thead > tr > th { тАж }
.table > thead > tr > td { тАж }

// With nesting
.table > thead > tr {
  > th { тАж }
  > td { тАж }
}

LESS рдФрд░ SASS рдореЗрдВ рдСрдкрд░реЗрдЯрд░

рд╕реБрдзрд╛рд░ рдкрдардиреАрдпрддрд╛ рдХреЗ рд▓рд┐рдП, рдореВрд▓реНрдпреЛрдВ, рдЪрд░, рдФрд░ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рдмреАрдЪ рдПрдХ рднреА рдЬрдЧрд╣ рдХреЗ рд╕рд╛рде рдХреЛрд╖реНрдардХреЛрдВ рдореЗрдВ рд╕рднреА рдЧрдгрд┐рдд рд╕рдВрдЪрд╛рд▓рди рд▓рдкреЗрдЯреЛред

// Bad example
.element {
  margin: 10px 0 @variable*2 10px;
}

// Good example
.element {
  margin: 10px 0 (@variable * 2) 10px;
}

рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

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

рдмрдбрд╝рд╛ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рдиреЛрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╡рд╛рдХреНрдпрд╛рдВрд╢реЛрдВ рдХреЗ рд▓рд┐рдП рдкреВрд░рд╛ рд╡рд╛рдХреНрдп рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВред

/* Bad example */
/* Modal header */
.modal-header {
  ...
}

/* Good example */
/* Wrapping element for .modal-title and .modal-close */
.modal-header {
  ...
}

рдХреНрд▓рд╛рд╕ рдХрд╛ рдирд╛рдо

рдпрд╣ рднреА SASS рдФрд░ LESS рдЪрд░ рдирд╛рдо рдмрдирд╛рддреЗ рд╕рдордп рд╣реА рдЗрди рдирд┐рдпрдореЛрдВ рдХреЗ рдХрдИ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИред

/* Bad example */
.t { ... }
.red { ... }
.header { ... }

/* Good example */
.tweet { ... }
.important { ... }
.tweet-header { ... }

рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ

рдЕрддрд┐рд░рд┐рдХреНрдд рдкрдврд╝рдирд╛:

/* Bad example */
span { ... }
.page-container #stream .stream-item .tweet .tweet-header .username { ... }
.avatar { ... }

/* Good example */
.avatar { ... }
.tweet-header .username { ... }
.tweet .avatar { ... }

рд╕рдВрдЧрдарди

/*
 * Component section heading
 */

.element { ... }


/*
 * Component section heading
 *
 * Sometimes you need to include optional context for the entire component. Do that up here if it's important enough.
 */

.element { ... }

/* Contextual sub-component or modifer */
.element-heading { ... }

рд╕рдВрдкрд╛рджрдХ рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдПрдБ

рдЖрдо рдХреЛрдб рд╡рд┐рд╕рдВрдЧрддрд┐рдпреЛрдВ рдФрд░ рдЧрдВрджрд╛ diffs рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╕рдВрдкрд╛рджрдХ рд╕реЗрдЯ:

рджрд╕реНрддрд╛рд╡реЗрдЬреАрдХрд░рдг рдФрд░ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдЗрди рд╡рд░реАрдпрддрд╛рдУрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ .editorconfig рдлрд╝рд╛рдЗрд▓ред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рджреЗрдЦреЗрдВ рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рдореЗрдВ рдПрдХ. рдФрд░ рдЬрд╛рдиреЗрдВ EditorConfig рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ.