Git Product home page Git Product logo

front-end-best-practices's Introduction

Front-end best practices

Стандарты компании для frontend-проектов.

Разделы стандартов

  1. Инициализация
  2. HTML
  3. CSS
  4. JS
  5. React
  6. Окружение

Contributing

Если вы хотите внести свой вклад в развитие наших стандартов, пожалуйста следуйте практике issue first. Перед тем, как создать pull request, заведите issue, подробно опишите, в чем проблема, и как ваша идея позволяет решить ее. Пропускать этап создания issue и сразу создавать pull request можно только в случаях, когда проблема и решение очевидны (например, опечатка или орфографическая ошибка).

front-end-best-practices's People

Contributors

akhmadbabaev avatar alagunoff avatar apploidx avatar chmnkh avatar dywork avatar fanmanutd avatar feinminen avatar geksanit avatar imin314 avatar in19farkt avatar kegbi avatar krashaen avatar nelliza avatar nzminusdev avatar prodderman avatar sk1e avatar znack avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

front-end-best-practices's Issues

Нейминг приватных полей класса

Привет всем!
В goodPractice.md имеется пункт про следованию стайлгайду от AirBnB. И хотя там же присутствует оговорка

Все, что перечислено в гайде принять к исполнению, если это не перекрыто нашими правилами ниже

тем не менее, хотелось бы акцентировать внимание на спорных рекомендациях касательно нейминга (квази)приватных методов класса:

В js нет публичных и частных свойств, поэтому частные методы просто делать с префиксами "_" (нижнее подчеркивание)

Как вы считаете, возможно, стоит этот пункт переписать с учетом правил, изложенных в стайлгайде AirBnB, и использовать для имитации приватных полей WeakMap или, как вариант, символы?

Регламентировать 'кавычки' в PUG файлах

На данный момент имеется несколько разногласных issues для нескольких людей, где в одном issue указано, что все кавычки в pug файлах необходимо заменить на двойные, а в issue другого человека, другой ревьювер написал о необходимости использовать двойные кавычки в pug HTML атрибутах, а в местах где используется js код - одинарные. Нужно регламентировать данный момент в best practices, во избежание спорных моментов, и желательно использовать второй вариант, где:

- const anyWord = "word";               // Плохо, т.к это уже js код, хоть и внутри PUG файла, 
                                        // у него должны быть одинарные кавычки
button(type="button")= anyWord          // type="button" - HTML атрибут, 
                                        // он должен быть в двойных кавычках
- const anyWord = 'word';               // Хорошо
button(type="button")= anyWord         

Сделать шаблон для Issues и PR

В шаблоне можно сфомрировать структуру, по которой будет требоваться перед открытием PR заводить ишью и там обсуждать сам факт внесения изменений. В шаблоне ишью можно будет формализовать, какие именно части вопросов надо осветить, чтобы начать обсуждение предложенной темы.

Создано после обсуждение в #36

Орфография

Не знаю можно ли создавать issue по этому поводу, но когда изучаю best practices иногда встречаются такие ошибки
image
Если нужно, буду сюда заносить неточности

Форматирование размещения импортов

Думаю, следует дополнить стандарт примерами для:

  • использования путей с алиасами;
  • что делать в случае если импорт используется только для правки порядка импорта ресурсов сборщиком (при использовании bem компонент должен быть импортирован раньше модификаторов, которые лежат глубже).

Ссылка на стандарт

Для стайл гайда Airbnb есть нормальный русский перевод

Здравствуйте!
Надеюсь, обратился в правильное место. Я стажер.
В лучших практиках указано, что нужно придерживаться стайлгайда Airbnb,
и читать его только на оригинальном английском, так как в нем описаны es6 фичи.
Я наткнулся на перевод Леонида Лебедева, где так же хорошо описаны эти фичи.
https://github.com/leonidlebedev/javascript-airbnb#ecmascript-6-es-2015-styles
Прошу обратить на это внимание.

В разделе "инициация" глобальные библиотеки имеется ввиду библиотеки, которые собираются в бандле?

Здравствуйте!
В моем личном представлении глобальные библиотеки - библиотеки, которые установлены в системе, а не в проекте.
Речь, наверное идет о библиотеках, которые попадают в конечную сборку, то есть не только находятся в проекте при разработке, но и на продакшене.
В файле package.json они описаны в Dependencies.
Надеюсь я правильно понял, и лучше изменить "глобальные" на "которые попадут в продакшн"

Недействительная ссылка на перевод Flexbugs

В конце раздела о CSS:

Подробнее об этом и других багах, возникающих при работе с флексами, можно прочитать на Flexbugs, перевод 
материала на русский здесь.

Ссылка на русскоязычный материал не работает (это просто свободный домен на данный момент). Я погуглил свежие материалы на эту тему, но ничего раньше 2015 года не нашел – ссылка на материал с css-live.

Можно приложить ссылку на вышеупомянутый материал, либо вовсе убрать текст о русскоязычной версии.

Использование кавычек в CSS.

В стандартах ничего не говорится о том, какие кавычки используются в CSS, одинарные или двойные, можно было бы добавить это в "Общие требования".

Определение элемента footer

Мне кажется не совсем точно указано п.8 определение для элемента. Footer может использоваться не только как подвал страницы, а также как нижний колонтитул section, article и aside. Думаю стоит дополнить, т.к. это достаточно важно для придания семантики документу

Имена css-классов.

CSS/generalRequirements.md

12.Имена:

использовать lower-case-hyphenated (то есть не mySuperAwesomeElement и не my_super_awesome_element);
имена должны отображать смысл, а не описание стилей ("loading" а не "big-yellow-spinny-thing");

Здесь еще можно добавить, что нельзя именовать классы с нумерацией: .icon-1, icon-2, icon-3... Мне кажется, такое часто встречается.

Изменить формулировку пункта 4.4 в разделе CSS

Снимок
https://github.com/fullstack-development/front-end-best-practices/blob/master/CSS/README.md#4.4

Предлагаю:

  1. Удалить явно лишнее быть.
  2. Удалить тавтологию с должен.
  3. Изменить окончание в слове самодостаточен на ным (быть каким?).

Как итог: "Каждый компонент должен иметь только явные зависимости, быть самодостаточным."

Добавить пункт про баги в либах

Если в библиотеке есть бага/нерешенный вопрос из-за которого в проекте приходится писать костыль, то обязательно нужно оставить ссылку на ишью в репозитории либы

Например, кейс который ща у Лехи Жмайлика случился с тем что нативные focus/blur не всплывают, а у реакта какого-то фига всплывают (и эта штука висит с 2016 года) facebook/react#6410 (comment)

Ввести ограничение на вложенность селекторов.

Я читала, что хорошей практикой считается вложенность селекторов не больше двух уровней, т.к. большая вложенность усложняет читабельность и поддержку кода.

Неправильно. Вложенность больше двух уровней

.block {
  display: block;

  .description {
    font-size: 14px;

    .title {
      font-size: 16px;
    }
  }
}

Правильно. Псевдоэлменты, псевдоселекторы, родственные и соседние селекторы не влияют на вложенность.

.checkbox__input:checked ~ .checkbox__label::before {   
  border-color: #3D4975;
}

Обсуждение требования по установке одновременно ширины и высоты для тэга img.

image

Проблемы

  1. Изображения установленные через background не индексируются.
  2. Теряем семантику.
  3. CSS cвойство object-fit которое может дать изображению img поведение как при background-size: cover нуждается в установке ширины и высоты, что противоречит требованию.

Варианты решения

  1. Требование мы можем:
    1.1. Расширить, добавив информацию о том как быть в тех или иных ситуациях.
    1.2. Сократить, на пример - Избегайте действий нарушающие пропорции изображений.
    1.3. Убрать требование вовсе.

  2. Вне зависимости от того что было выбрано в пункте 1, предлагаю:

    • Добавить в карту развития jun1/css: Что делает свойство object-fit?
    • Перенести с карты развития jun3/css вопрос Когда стоит использовать тег img, а когда background-image? в jun1/html или css, так как без знания когда и как подключать изображения знания про object-fit и прочие рекомендации будут менее эффективны. Учитывая то, как часто перед нами стоит выбор img или background-image это надо знать уже на позиции jun1.

Результаты Can I use. Поддержка большинством передовых браузеров началась с 2013-14 годов.

Структура папок.

CSS/generalRequirements.md

  1. Все правила должны быть разбиты на разные файлы по страницам и блокам, каждый файл не должен быть длинее чем 1000 строк;

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

Регламентирование использования z-index

Почему бы не добавить стандарт, добавляющий регламентацию css свойства z-index?

Схема, которую нашел:

  • 0-9 - в пределах компонента;
  • 10-19 - для всплывающих менюшек, подсказок и т.д.;
  • 20-25 - для выезжающих меню, модалок и т.д.;
  • для сторонних плагинов добавлять обертки с меньшим z-index.

Что думаете?

Использование W3C Markup Validation Service

Предлагаю вынести некоторые пункты HTML стандартов в один: "Прогонять страницы через валидатор".

Решаемые проблемы:

  • уплотнится структура стандартов, что упростит запоминание;
  • процесс поиска многих ошибок будет частично автоматизирован;
  • валидатор также сообщает и о ошибках, не отображенных в текущих стандартах: <input> внутри <button> или <a>.

Пункты стандартов, которые проверяет валидатор:

P.S.: расширение позволяет прогонять страницы локально.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.