Skip to content

azarro/coding-style

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 

Repository files navigation

Стиль кода от LFeh

"Каждая линия кода должна быть написана так, будто её писал лишь один человек, вне зависимости от количества разработчиков." - Китайская народная пословица.

Этот документ описывает правила написания кода для языков, которые я использую: HTML, CSS и Javascript.

Этот репозиторий не был задуман как целый проект для описания моего стиля кода. Я лишь хотел поместить её сюда для себя и для других разработчиков, участвующих в моих проектах, чтобы информировать их о стандартах, которые я использую.

Так как это новый документ, некоторые участки кода в старых проектах могут не соответствовать данным правилам.

Этот документ постоянно обновляется и время от времени могут появляться изменения

Содержание

  1. [Git] (#commits)
  2. [HTML] (#html)
  3. [CSS] (#css)
  4. [Javascript] (#js)
  5. Ссылки
  6. Переводы
  7. Лицензия

1. Git

Для облегчения содействия других людей в проектах, все описания commit'ов, названия pull request'ов или записей о багах должны быть написаны на Английском языке

Прежде чем commit'ить что-либо, нужно проверять, нет ли других commit'ов с таким названием. Если такие есть, писать номер исправления после символа #

// Правильно
git commit -m "Add placeholder in input #10"

// Неправильно
git commit -m "Add placeholder in input"

2. HTML

Основы раздела про HTML взяты с "Code Guide by @mdo".

Оглавление HTML

  1. [Синтаксис HTML] (#html-syntax)
  2. [Комментарии HTML] (#html-comments)
  3. [Кодировка документов HTML] (#html-encoding)
  4. [Порядок аттрибутов в HTML] (#html-attribute-order)
  5. [Производительность HTML-кода] (#html-performance)
  6. [Базовый шаблон HTML-кода] (#html-base)

2.1. Синтаксис HTML

Используйте мягкую табуляцию размером в два символа пробела. Это настраивается в редакторе кода.

<!-- Правильно -->
<nav class="nav">
  <ul class="nav-menu">
    <li class="nav-item">
      <a class="nav-link">

<!-- Неправильно -->
<nav class="nav">
      <ul class="nav-menu">
            <li class="nav-item">
                  <a class="nav-link">

Всегда используйте двойные кавычки в HTML.

<!-- Правильно -->
<div class="main">

<!-- Неправильно -->
<div class='main'>

Не включайте символ '/' в самозакрывающиеся теги.

<!-- Правильно -->
<hr>

<!-- Неправильно -->
<hr />

Разделяйте блочные элементы пустой строкой и группируйте внутренние элементы блоков

<!-- Правильно -->
<ul class="nav-tabs">
  <li>...</li>
  <li>...</li>
  <li>...</li>
  <li>...</li>
</ul>

<div class="tab-content">
  ...
</div>

<!-- Неправильно -->
<ul class="nav-tabs">

  <li>...</li>

  <li>...</li>

  <li>...</li>

  <li>...</li>

</ul>
<div class="tab-content">
  ...
</div>

2.2. Комментарии в HTML

Следуйте этому правилу при написании комментариев:

<!-- Пример комментариев в HTML -->
<!-- /Конец примера комментариев в HTML -->

2.3. Кодировка HTML-документво

Всегда используйте кодировку UTF-8 в документах.

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

2.4. Порядок аттрибутов в HTML

Аттрибуты в HTML должны следовать данному порядку для облегчения чтения кода.

  1. class
  2. id, name
  3. data-*
  4. src, for, type, href
  5. title, alt
  6. aria-*, role
<a class="..." id="..." data-modal="toggle" href="#">

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

<img class="img-rounded" src="..." alt="...">

2.5. Производительность HTML

Нет необходимости указывать тип CSS и JS файлов в аттрибуте type, такие как text/css и text/javascript.

<!-- Правильно -->
<link rel="stylesheet" href="assets/css/style.css" />
<script src="scripts.min.js"></script>

<!-- Не правильно -->
<script src="scripts.min.js"></script>
</head>
<body>

Для увеличения скорости загрузки страницы указывайте ссылки на Javascript-скрипты перед закрывающим тегом <body>.

<!-- Правильно -->
<script src="scripts.min.js"></script>
</body>

<!-- Не правильно -->
<script src="scripts.min.js"></script>
</head>
<body>

Всегда сокращайте код в проектах на чистом HTML. Таск-менеджеры, вроде Grunt leaves this easier.

<!-- Good -->
<html><head>...</head><body><div class="container">...</div></body></html>

<!-- Bad -->
<html>
  <head>
    ...
  </head>
  <body>
    <div class="container">
      ...
    </div>
  </body>
</html>

2.6. Базовый шаблон HTML-документа

Этот код следует использовать для быстрого начала работы над новым проектом:

<!DOCTYPE html>
<html lang="en">
<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="format-detection" content="telephone=no">
<meta name="viewport" content="width=device-width">

<link rel="shortcut icon" href="assets/img/ico/favicon.ico" />
<link rel="logo" type="image/svg" href="../assets/img/logo/logo.svg" />
<link rel="stylesheet" href="assets/css/style.css" />

<title></title>

</head>
<body>

<!-- Скрипты -->
<script src="assets/js/scripts.min.js"></script>

</body>
</html>

Немного совместимости с IE...

<!DOCTYPE html>
<!--[if IE]><![endif]-->
<!--[if IE 7 ]> <html lang="en" class="ie7">    <![endif]-->
<!--[if IE 8 ]>    <html lang="en" class="ie8">    <![endif]-->
<!--[if IE 9 ]>    <html lang="en" class="ie9">    <![endif]-->
<!--[if (gt IE 9)|!(IE)]><!--><html lang="en"><!--<![endif]-->
<head>
...

3. CSS

Основы раздела про CSS взяты с Code Guide by @mdo и "Разговорный CSS".

Оглавление CSS

  1. [Синтаксис CSS] (#css-syntax)
  2. [Порядок обьявления в CSS] (#css-order)
  3. [Имена классов в CSS] (#css-class-name)
  4. [Производительность CSS] (#css-performance)
  5. [Адаптивность и @media-запросы] (#mobile-first-and-media-queries)
  6. [Препроцессоры] (#css-pre-processors)
  7. [Комментарии в CSS] (#css-comments)

3.1. Синтаксис

Используйте мягкую табуляцию размером в два символа пробела. Это настраивается в редакторе кода.

/* Правильно */
.nav-item {
  display: inline-block;
  margin: 0 5px;
}

/* Неправильно */
.nav-item {
    display: inline-block;
    margin: 0 5px;
}

Всегда используйте двойные кавычки.

/* Правильно */
[type="text"]
[class^="..."]

.nav-item:after {
  content: "";
}

/* Неправильно */
[type='text']
[class^='...']

.nav-item:after {
  content: '';
}

Всегда вставляйте один пробел перед символом фигурной скобки

/* Правильно */
.header {
  ...
}

/* Неправильно */
.header{
  ...
}

После двоеточия объявления свойства также вставляйте один пробел

/* Правильно */
.header {
  margin-bottom: 20px;
}

/* Неправильно */
.header{
  margin-bottom:20px;
}

В блоке объявлений свойств после каждого свойства всегда вставляйте точку с запятой

/* Правильно */
.header {
  margin-bottom: 20px;
}

/* Неправильно */
.header{
  margin-bottom:20px
}

Каждый селектор при его объявлении пишите на отдельной строке

/* Правильно */
.selector-1,
.selector-2,
.selector-3 {
  ...
}

/* Неправильно */
.selector-1, .selector-2, .selector-3 {
  ...
}

Обьявления селекторов с единственным свойством пишите вместе со свойством на одной строке

/* Правильно */
.selector-1 { width: 50%; }

/* Неправильно */
.selector-1 {
  width: 50%;
}

Разделяйте каждое объявление селектора пустой строкой

/* Правильно */
.selector-1 {
  ...
}

.selector-2 {
  ...
}

/* Неправильно */
.selector-1 {
  ...
}
.selector-2 {
  ...
}

Используйте нижний регистр и сокращения для обозначения шестнадцетиричных цветов

Не пишите обозначений для нулевых величин.

/* Правильно */
.selector-1 {
  color: #aaa;
  margin: 0;
}

/* Неправильно */
.selector-1 {
  color: #AAAAAA;
  margin: 0px;
}

3.2. Порядок объявлений в CSS

Объявления свойств должны идти в алфавитном порядке

/* Правильно */
.selector-1 {
  background: #fff;
  border: #333 solid 1px;
  color: #333;
  display: block;
  height: 200px;
  margin: 5px;
  padding: 5px;
  width: 200px;
}

/* Неправильно */
.selector-1 {
  padding: 5px;
  height: 200px;
  background: #fff;
  margin: 5px;
  width: 200px;
  color: #333;
  border: #333 solid 1px;
  display: block;
}

3.3. Имена классов в CSS

Используйте только нижний регистр и вставляйте дефисы между словами

/* Правильно */
.nav-item { ... }

/* Неправильно */
.NavItem { ... }
.nav_item { ... }

Дефисы также необходимы для того, чтобы показать принадлежность одного селектора к другому. Префиксами можно подписывать селекторы родителей для удобного чтения кода.

/* Правильно */
.navbar { ... }
.nav { ... }
.nav-item { ... }
.nav-link { ... }

/* Неправильно */
.item-nav { ... }
.link-nav { ... }

Избегайте слишком коротких имён селекторов и всегда выбирайте пододящие по смыслу имена

/* Правильно */
.btn { ... }
.page-header { ... }
.progress-bar { ... }

/* Неправильно */
.s { ... }
.ph { ... }
.block { ... }

3.4. Производительность CSS

Никогда не используйте идентификаторы.

/* Правильно */
.header { ... }
.section { ... }

/* Неправильно */
#header { ... }
#section { ... }

Всегда отдавайте предпочтения классам, а не названиям тегов или другим стандартным селекторам

/* Правильно */
.form-control { ... }
.header { ... }
.section { ... }

/* Неправильно */
input[type="text"] { ... }
header
section

Избегайте гнездящихся элементов, используйте вместо них отдельные классы

/* Правильно */
.navbar { ... }
.nav { ... }
.nav-item { ... }
.nav-link { ... }

/* Неправильно */
.navbar ul { ... }
.navbar ul li { ... }
.navbar ul li a { ... }

Используйте гнездящиеся элементы только когда нужно поменять свойства класса в зависимости от его вложенности в другие классы. Не используйте гнёзда с вложенностью более трёх селекторов

/* Правильно */
.modal-footer .btn { ... }
.progress.active .progress-bar { ... }

/* Неправильно */
.modal-btn { ... }
.progress.active .progress-bar .progress-item span { ... }

Сокращайте CSS-код. Таск-менеджеры, такие как Grunt упрощают это.

/* Правильно */
.navbar { ... }.nav { ... }.nav-item { ... }.nav-link { ... }

/* Неправильно */
.nav-item {
  ...
}
.nav-link {
  ...
}

3.5 Адаптивность и @media-запросы

Начинайте разработку части кода с введения основных правил и @media-запросов для этой части.

/* Правильно */
.navbar {
  margin-bottom: 20px;
}

@media (min-width: 480px) {
  .navbar {
    padding: 10px;
  }
}

@media (min-width: 768px) {
  .navbar {
    position: absolute;
    top: 0;
    left: 0;
  }
}

@media (min-width: 992px) {
  .navbar {
    position: fixed;
  }
}

/* Неправильно */
.navbar {
  position: fixed;
  top: 0;
  left: 0;
}

@media (max-width: 767px) {
  .navbar {
    position: static;
    padding: 10px;
  }
}

Держите @media-запросы как можно ближе к тому правилу, к которому они относятся. Не выделяйте их в отдельную таблицу стилей или в конец документа

.navbar { ... }
.nav { ... }
.nav-item { ... }

@media (min-width: 480px) {
  .navbar { ... }
  .nav { ... }
  .nav-item { ... }
}

3.6. Препроцессоры

Во всех своих проектах я (автор) использую LESS.

Осторожнее с гнездящимися элементами. Лучше просто продолжайте обходиться без них.

/* Правильно */
.nav-item { ... }

/* Неправильно */
.navbar {
  .nav {
    .nav-item {
      ...
    }
  }
}

Имена переменных должны быть семантическими.

/* Правильно */
@brand-primary: #049cdb;

/* Неправильно */
@color-blue: #049cdb;

3.7. Комментарии в CSS

Все комментарии должны быть написаны в синтаксисе используемого препроцессора

//
// Раздел
// --------------------------------------------------

// Подраздел
// --------------------------------------------------

//
// Блок комментариев
//
//

// Простой комментарий

4. Javascript

Основой этой части документа стали: "idiomatic.js" и "Zeno Rocha Coding Style".

Оглавление Javascript

  1. [Синтаксис Javascript] (#js-syntax)
  2. [Переменные Javascript] (#js-variables)
  3. [Производительность Javascript-кода] (#js-performance)
  4. [Комментарии в Javascript] (#js-comments)

4.1. Синтаксис Javascript

Используйте мягкую табуляцию размером в два символа пробела. Это настраивается в редакторе кода.

// Правильно
while (condition) {
  statements
}

// Неправильно
while (condition) {
    statements
}

Всегда прописывайте точку с запятой в конце строки.

// Правильно
var me = $(this);
test();

// Неправильно
var me = $(this)
test()

Всегда используйте одинарные кавычки

// Правильно
var string = '<p class="foo">Lorem Ipsum</p>';
var noteClick = me.attr('data-note');

// Неправильно
var string = "<p class='foo'>Lorem Ipsum</p>";
var noteClick = me.attr("data-note");

Пишите else на той же линии, что и закрывающая фигурная скобка блока инструкций выражения if.

// Правильно
if ( true ) {
  ...
} else {
  ...
}

// Неправильно
if ( true ) {
  ...
}
else {
  ...
}

Добавляйте пробелы между операторами.

// Правильно
for (i = 0; i < 10; i++) {
  ...
}

// Неправильно
for (i=0;i<10;i++) {
  ...
}

Никогда не добавляйте пробелов после названия функции и перед её первым аргументом.

// Правильно
foo(function() {
  ...
});

// Неправильно
foo ( function () {
  ...
});

Добавляйте пробелы за пределами круглых скобок, но избегайте пробелов внутри.

// Правильно
if (condition) {
  statement
}

// Неправильно
if( condition ){
  statement
}

Для условных операторов if/else/else if всегда использовать фигурные скобки {}.

// Правильно
if (condition) {
  statement
} else if (condition) {
  statement
} else {
  statement
}

// Неправильно
if (condition) statement;
else if (condition) statement;
else statement;

Проверка значений на равенство чаще всего должна быть строгой (===), нестрогую (==) использовать только в крайних случаях.

// Правильно
if (foo === 'foo') {
  statement
}

// Неправильно
if (foo == 'foo') {
  statement
}

4.2. Переменные Javascript

Все переменные перед использованием должны быть объявлены.

// Правильно
var me = $(this);
var noteClick = me.attr('data-note');
notes[noteClick].play();

// Неправильно
notes[noteClick].play();
var me = $(this);
var noteClick = me.attr('data-note');

Всегда используйте var для объявления переменных.

// Правильно
var me = $(this);

// Неправильно
me = $(this);

4.3. Производительность Javascript-кода

Используйте JSHint для выявления ошибок и проблем кода.

Всегда сокращайте и конкатенируйте весь Javascipt-код. Таск-менеджеры, такие как Grunt упрощают этот процесс.

4.4. Комментарии Javascript

Комментарий должен идти одной строкой над строкой комментируемого кода

// Правильно
// Пример хорошего комментария
var me = $(this);

// Неправильно
var me = $(this); // Пример плохого комментария

5. Ссылки

6. Переводы

7. Лицензия

MIT License © Luiz Felipe Tartarotti Fialho

About

Перевод стиля кода от LFeh на русский язык

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published