{"componentChunkName":"component---src-templates-post-js","path":"/html-css/standarty-napisaniya-gibkogo-nadezhnogo-i-zhiznesposobnogo-html-s-css/","result":{"pageContext":{"slug":"standarty-napisaniya-gibkogo-nadezhnogo-i-zhiznesposobnogo-html-s-css","content":"\n<p id=\"f89b\">Вообще, эта статья является неким руководством по написанию грамотного HTML и CSS. Но явно не полноценным руководством сводом правил или БЭМ, который, кстати, является очень спорным моментом в мире фронт-энда. Но об этом потом.</p>\n\n\n\n<p id=\"4c29\">То, что вы прочитаете, скорее является сводом правил хорошего тона при вёрстке, которые сведут на минимум проблемы с пониманием и рендерингом вашей работы.</p>\n\n\n\n<p class=\"author\" id=\"7e07\">Перевод статьи&nbsp;<a href=\"http://codeguide.co/#html-practicality\"><em>Standards for developing flexible, durable, and sustainable HTML and CSS.</em></a></p>\n\n\n\n<h2 id=\"7336\">HTML</h2>\n\n\n\n<h3 id=\"8818\">Синтаксис</h3>\n\n\n\n<p id=\"0739\">Используйте двойные пробелы — это единственный способ, который будет гарантировать то, что ваш код покажется и отрендерится одинаковым образом в любой среде разработки.</p>\n\n\n\n<p id=\"4fe5\">Вложенные элементы должны иметь только одинарный отступ,&nbsp;<strong>то есть двойным пробелом.</strong></p>\n\n\n\n<p id=\"9dc4\">На&nbsp;атрибутах всегда используйте двойные кавычки, а не одинарные.</p>\n\n\n\n<p id=\"1e38\">Не включайте закрывающий слеш в самозкрывающиеся элементы — HTML5&nbsp;<a href=\"http://dev.w3.org/html5/spec-author-view/syntax.html#syntax-start-tag\">спецификация указывает на то, что они вообще опциональны, но мы то знаем.</a></p>\n\n\n\n<p id=\"0451\">Ни в коем случае не пропускайте закрывающие теги (такие как&nbsp;<code>&lt;/li&gt;</code>&nbsp;или&nbsp;<code>&lt;/body&gt;</code>).</p>\n\n\n\n<pre class=\"wp-block-code html\"><code>&lt;!DOCTYPE html>\n&lt;html>\n  &lt;head>\n    &lt;title>Заголовок страницы&lt;/title>\n  &lt;/head>\n  &lt;body>\n    &lt;img src=\"images/company-logo.png\" alt=\"Company\">\n    &lt;h1 class=\"hello-world\">Привет, братиш!&lt;/h1>\n  &lt;/body>\n&lt;/html></code></pre>\n\n\n\n<h3 id=\"bf53\">HTML5 doctype</h3>\n\n\n\n<p id=\"50cd\">Чтобы работать в режиме стандартов и последовательного рендеринга элементов в каждом доступном браузере — добавляйте этот простой доктайп в начале каждой HTML страницы. Вообще, всегда старайтесь помнить про стандарты.</p>\n\n\n\n<pre class=\"wp-block-code html\"><code>&lt;!DOCTYPE html>\n&lt;html>\n  &lt;head>\n  &lt;/head>\n&lt;/html></code></pre>\n\n\n\n<h3 id=\"de68\">Атрибуты языка</h3>\n\n\n\n<p id=\"0954\">Вырезка из спецификации HTML5:</p>\n\n\n\n<p id=\"a989\"><em>Разработчикам рекомендуется указывать атрибут языка в начале html файла, тем самым указывая на принадлежность языка документа. Это способствует&nbsp;</em><strong><em>инструментам генерации голоса</em></strong><em>&nbsp;определить то, какое произношение использовать, а инструментам перевода определить каким правилам придерживаться и так далее.</em></p>\n\n\n\n<p id=\"6e52\"><a href=\"http://www.w3.org/html/wg/drafts/html/master/semantics.html#the-html-element\">Вообще, прочитайте побольше об атрибуте lang в этой спецификации.</a></p>\n\n\n\n<p id=\"b765\">А вот, ссылка на&nbsp;<a href=\"http://reference.sitepoint.com/html/lang-codes\">Sitepoint со списком языковых кодов</a></p>\n\n\n\n<pre class=\"wp-block-code html\"><code>&lt;html lang=\"ru\">\n  &lt;!-- ... -->\n&lt;/html></code></pre>\n\n\n\n<h3 id=\"e66a\">Режим совместимости IE</h3>\n\n\n\n<p id=\"60f2\">Internet Explorer поддерживает тег использования совместимости&nbsp;<code>&lt;meta&gt;</code>, чтобы указывать то, под какую версию IE должна быть отрендерена страница. Да, пока что обстоятельства этого требуют и самый подходящий способ — это указать IE использовать последний поддерживаемый мод с&nbsp;<strong>edge mode</strong>.</p>\n\n\n\n<pre class=\"wp-block-code html\"><code>&lt;meta http-equiv=\"X-UA-Compatible\" content=\"IE=Edge\"></code></pre>\n\n\n\n<h3 id=\"b6f3\">Кодировки</h3>\n\n\n\n<p id=\"eaab\">Легко и быстро делайте правильный рендеринг вашего контента, указывая точную кодировку вашим страницам. Так вы можете избежать использования мнемоников в HTML (&nbsp;<em>Это &amp;nbsp; и т.п. В общем, дальше вы поняли</em>), указывая их точную кодировку документу. В основном, самая ходовая кодировка это&nbsp;<code>UTF-8</code>.</p>\n\n\n\n<pre class=\"wp-block-code html\"><code>&lt;head>\n  &lt;meta charset=\"UTF-8\">\n&lt;/head></code></pre>\n\n\n\n<h3 id=\"0ce4\">Указание пути к CSS и JavaScript</h3>\n\n\n\n<p id=\"3b56\">По спецификации HTML5, нет нужды в конкретном указании type при вставке CSS и JavaScript файлов, добавля как&nbsp;<code>text/css</code>&nbsp;так и&nbsp;<code>text/javascript</code>&nbsp;как страндартные указатели на типы подключаемых файлов. Теперь это лишнее.</p>\n\n\n\n<p id=\"4a93\">Просто сделайте так:</p>\n\n\n\n<pre class=\"wp-block-code html\"><code>&lt;!-- Внешний CSS -->\n&lt;link rel=\"stylesheet\" href=\"code-guide.css\">\n\n&lt;!-- Внутренний CSS -->\n&lt;style>\n  /* ... */\n&lt;/style>\n\n&lt;!-- JavaScript -->\n&lt;script src=\"code-guide.js\">&lt;/script></code></pre>\n\n\n\n<h3 id=\"e7aa\">Практичность прежде всего</h3>\n\n\n\n<p id=\"5719\">Старайтесь поддерживать HTML стандарты и семантику,&nbsp;<strong>но не ценой практичности</strong>. Используйте как можно меньше разметки с наименее возможным количеством запутанных моментов и спорных вложений.</p>\n\n\n\n<h3 id=\"3cd8\">Порядок атрибутов</h3>\n\n\n\n<p id=\"a75c\">HTML атрибуты должны располагаться именно в таком порядке для облегчения чтения кода:</p>\n\n\n\n<pre class=\"wp-block-code\"><code>class\nid, name\ndata-*\nsrc, for, type, href, value\ntitle, alt\nrole, aria-*</code></pre>\n\n\n\n<p>Классы сделаны для удобного переиспользования компонентов, так что они идут первыми.&nbsp;<code>ID</code>&nbsp;это уже более специфичные вещи и относится к ним нужно довольно бережно, так что они идут вторыми.</p>\n\n\n\n<pre class=\"wp-block-code html\"><code>&lt;a class=\"...\" id=\"...\" data-toggle=\"modal\" href=\"#\">\n  Example link\n&lt;/a>\n\n&lt;input class=\"form-control\" type=\"text\">\n\n&lt;img src=\"...\" alt=\"...\"></code></pre>\n\n\n\n<h3 id=\"1ad7\">Булиные атрибуты (Логические атрибуты)</h3>\n\n\n\n<p id=\"6f47\"><em>p.s. тут используется слово булиные для простоты упоминания в тексте, который и так не очень простой. В общем, как в простом сленге разработки.</em></p>\n\n\n\n<p id=\"ae7d\">Это атрибуты, которые нуждаются в необъявленном значении. Да,&nbsp;<code>XHTML</code>&nbsp;требует, чтобы вы объявляли их значение, но в HTML5 нет такого требования.</p>\n\n\n\n<p id=\"e865\">Для дальнейшего чтения, примите во внимание следующую&nbsp;<a href=\"http://www.whatwg.org/specs/web-apps/current-work/multipage/common-microsyntaxes.html#boolean-attributes\">WhatWG секцию по булиным атрибутам.</a></p>\n\n\n\n<blockquote class=\"wp-block-quote\"><p>Присутствие булиных атрибутов на элементе указывает на значение&nbsp;<code>true</code>, а отсутствие атрибута указывает на значение&nbsp;<code>false</code>.</p></blockquote>\n\n\n\n<p id=\"827a\">Если вам&nbsp;<em>необходимо</em>&nbsp;присутствие атрибута, НО наличие его значения вам ненужно, то следуйте этому наставлению WhatWG:</p>\n\n\n\n<p id=\"5780\"><em>Если атрибут есть, его значение должно быть либо пустой строкой, либо каноничным именем атрибута, без заглавного или замыкающего пробела.</em></p>\n\n\n\n<pre class=\"wp-block-code html\"><code>&lt;input type=\"text\" disabled>\n\n&lt;input type=\"checkbox\" value=\"1\" checked>\n\n&lt;select>\n  &lt;option value=\"1\" selected>1&lt;/option>\n&lt;/select></code></pre>\n\n\n\n<h3 id=\"fb6c\">Сокращение разметки</h3>\n\n\n\n<p id=\"e493\">Где только возможно, избегайте излишних родительских элементов при написании HTML. Во многих случаях это приводит к повторениям и рефакторингу, но в итоге вы получаете меньше HTML. Вот хороший пример:</p>\n\n\n\n<pre class=\"wp-block-code html\"><code>&lt;!-- Отстой -->\n&lt;span class=\"avatar\">\n  &lt;img src=\"...\">\n&lt;/span>\n\n&lt;!-- Уже получше -->\n&lt;img class=\"avatar\" src=\"...\"></code></pre>\n\n\n\n<h3 id=\"8d20\">Разметка созданная в JavaScript</h3>\n\n\n\n<p id=\"14aa\">Создание разметки в JavaScript файле усложняет поиск контента, усложняет его редактирование и уменьшает скорость его рендеринга.&nbsp;<strong>Избегайте такого подхода всегда, когда это только возможно.</strong></p>\n\n\n\n<h2 id=\"6130\">CSS</h2>\n\n\n\n<h3 id=\"28a0\">Синтаксис</h3>\n\n\n\n<p id=\"e7d7\">Используйте двойные пробелы, это единственный способ гарантировать то, что ваш код везде одинаково отрендерится и будет легко прочитан.</p>\n\n\n\n<p id=\"4e4d\">Группируя селекторы, дайте каждому по строке.</p>\n\n\n\n<p id=\"de30\">Включайте один пробел перед открывающей скобкой блока, чтобы было понятнее.</p>\n\n\n\n<p id=\"bd9b\">Ставьте закрывающие скобки на новой строке.</p>\n\n\n\n<p id=\"b062\">Делайте один пробел после каждого&nbsp;<code>:</code></p>\n\n\n\n<p id=\"f4c0\">Каждое объявление должно появляться на своей собственной строке для получения точного отчета об ошибках. В общем, чтобы видеть на какой строке был сбой.</p>\n\n\n\n<p id=\"12eb\">Заканчивайте каждое объявление точкой с запятой. В последнем объявлении это опционально, но в таком случае ваш код будет более склонен выдать ошибку в самых странных моментах при рендеринге.</p>\n\n\n\n<p id=\"d81f\">Свойства, разделенные запятой, должны включать в себя пробел после каждой запятой. Например как в случае с&nbsp;<code>box-shadow</code>.</p>\n\n\n\n<p id=\"9918\">Не ставьте пробелы после запятых в значениях&nbsp;<code>rgb()</code>,&nbsp;<code>rgba()</code>,&nbsp;<code>hsl()</code>,&nbsp;<code>hsla()</code>, or&nbsp;<code>rect()</code>. Это поможет различать разные значения цвета(запятая, без пробела) от разных значений свойств (запятая с пробелом).</p>\n\n\n\n<p id=\"25b0\">Не добавляйте ноль к свойствам значений или цветовым параметрам, то есть&nbsp;<code>.5</code>&nbsp;вместо&nbsp;<code>0.5</code>&nbsp;и&nbsp;<code>-.5px</code>&nbsp;вместо&nbsp;<code>-0.5px</code>.</p>\n\n\n\n<p id=\"9df2\">Все хекс значения пишите в нижнем регистре, то есть&nbsp;<code>#fff</code>. Буквы в нижнем регистре легче отличить, когда читаешь документ, так как у них больше уникальных очертаний.</p>\n\n\n\n<p id=\"8d1f\">Используйте сокращенные хекс значения, где это только возможно. Например,&nbsp;<code>#fff&nbsp;</code>вместо&nbsp;<code>#ffffff</code>.</p>\n\n\n\n<p id=\"b168\">Заключайте в скобки значения атрибутов в селекторах. Например,&nbsp;<code>input[type=”text”]</code>. Хоть это и опционально, но это хорошая практика в плане логичности.</p>\n\n\n\n<p id=\"e0b0\">Избегайте указывания единиц измерения для нулевых значений. Например,&nbsp;<code>margin: 0</code>, вместо&nbsp;<code>margin: 0px</code>.</p>\n\n\n\n<pre class=\"wp-block-code css\"><code>/* Плохой CSS */\n.selector, .selector-secondary, .selector&#91;type=text] {\n  padding:15px;\n  margin:0px 0px 15px;\n  background-color:rgba(0, 0, 0, 0.5);\n  box-shadow:0px 1px 2px #CCC,inset 0 1px 0 #FFFFFF\n}\n\n/* Хороший CSS */\n.selector,\n.selector-secondary,\n.selector&#91;type=\"text\"] {\n  padding: 15px;\n  margin-bottom: 15px;\n  background-color: rgba(0,0,0,.5);\n  box-shadow: 0 1px 2px #ccc, inset 0 1px 0 #fff;\n}</code></pre>\n\n\n\n<h3 id=\"613f\">Порядок объявления</h3>\n\n\n\n<p id=\"ddee\">Следующие объявления, должны группироваться в таком порядке:</p>\n\n\n\n<p id=\"8d15\"><em>Позиционирование</em></p>\n\n\n\n<p id=\"172b\"><em>Box model</em></p>\n\n\n\n<p id=\"ae44\"><em>Типография</em></p>\n\n\n\n<p id=\"ae5c\"><em>Визуализация</em></p>\n\n\n\n<p id=\"0123\">Главное — позиционирование идет первым, так как оно может удалить элемент с потока документа и переопределить относительные стили для box-модели, которая идет следующей, так как указывает размещение и размеры элемента.</p>\n\n\n\n<p id=\"cc80\">Всё остальное, что внутри компонента или не влияет на предыдущие две секции, идет последним:</p>\n\n\n\n<pre class=\"wp-block-code css\"><code>.declaration-order {\n  /* Позиционирование */\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 100;\n\n  /* Box-model */\n  display: block;\n  float: right;\n  width: 100px;\n  height: 100px;\n\n  /* Типография */\n  font: normal 13px \"Helvetica Neue\", sans-serif;\n  line-height: 1.5;\n  color: #333;\n  text-align: center;\n\n  /* Визаулизация */\n  background-color: #f5f5f5;\n  border: 1px solid #e5e5e5;\n  border-radius: 3px;\n\n  /* Всякое */\n  opacity: 1;\n}</code></pre>\n\n\n\n<h3 id=\"03b5\">Не используйте @import</h3>\n\n\n\n<p id=\"d735\">В сравнении с&nbsp;<code>&lt;link&gt;</code>,&nbsp;<code>@import</code>&nbsp;медленнее, добавляет несколько дополнительных запросов странице и может вызывать другие непредвиденные проблемы. Избегайте его применение и делайте уклон на другие решения:</p>\n\n\n\n<p id=\"b6d3\">Используйте несколько&nbsp;<code>&lt;link&gt;</code>&nbsp;элементов</p>\n\n\n\n<p id=\"47ec\">Компилируйте свой CSS с препроцессором, таким как Sass, в один файл.</p>\n\n\n\n<p id=\"8774\">Сливайте вместе ваши CSS файлы с функционалом, предоставленным в Rails, Jekyll и других.</p>\n\n\n\n<pre class=\"wp-block-code html\"><code>&lt;!-- Используйте link -->\n&lt;link rel=\"stylesheet\" href=\"core.css\">\n\n&lt;!-- Избегайте @imports -->\n&lt;style>\n  @import url(\"more.css\");\n&lt;/style></code></pre>\n\n\n\n<h3>Размещение медиа запросов </h3>\n\n\n\n<p>Размещайте медиа запросы как можно ближе к своим релевантным наборам правил. Не связывайте их через разные таблицы стилей или под конец документа. Делая так, вы только усложните работу с ними в будущем, не говоря уже о том треше, с которым придется столкнуться тому, кто потом будет работать с вашим кодом. Вот обычная хорошая разметка с медиа-запросами:</p>\n\n\n\n<pre class=\"wp-block-code css\"><code>.element { ... }\n.element-avatar { ... }\n.element-selected { ... }\n\n@media (min-width: 480px) {\n  .element { ...}\n  .element-avatar { ... }\n  .element-selected { ... }\n}</code></pre>\n\n\n\n<h3 id=\"43ef\">Свойства с префиксом</h3>\n\n\n\n<p id=\"9dfa\">Используя вендорные свойства префиксов, делайте отступ каждому свойству так, будто это объявление нового свойства, то есть в линию, для того, чтобы облегчить мультистрочное редактирование.</p>\n\n\n\n<p id=\"68d4\">В Textmate, используйте Text → Edit Each Line in Selection (⌃⌘A). В Sublime Text 2, используйте Selection → Add Previous Line (⌃⇧↑) и Selection → Add Next Line (⌃⇧↓).</p>\n\n\n\n<pre class=\"wp-block-code css\"><code>/* Свойства с префиксами */\n.selector {\n  -webkit-box-shadow: 0 1px 2px rgba(0,0,0,.15);\n          box-shadow: 0 1px 2px rgba(0,0,0,.15);\n}</code></pre>\n\n\n\n<h3 id=\"a668\">Одиночные объявления стилей</h3>\n\n\n\n<p id=\"1f70\">В примерах, где набор правил включает только одно указание стиля, рассмотрите вариант с удалением переноса строк, для улучшения читабельности и быстроты редактирования. Каждый набор правил с несколькими декларациями должен разделяться на разные строки.</p>\n\n\n\n<p id=\"b4cc\">Ключевой фактор тут, это обнаружение ошибок — то есть CSS валидатор подмечает то, что у вас есть синтаксическая ошибка на 183 строке. С одиночной декларацией,&nbsp;<em>вы её не пропустите</em>. В множественном объявлении стилей, разные строки обязательны для сохранения здравого смысла.</p>\n\n\n\n<pre class=\"wp-block-code css\"><code>/* Одиночное объявление стиля */\n.span1 { width: 60px; }\n.span2 { width: 140px; }\n.span3 { width: 220px; }\n\n/* Множественное объявление, по стилю на строку */\n.sprite {\n  display: inline-block;\n  width: 16px;\n  height: 15px;\n  background-image: url(../img/sprite.png);\n}\n.icon           { background-position: 0 0; }\n.icon-home      { background-position: 0 -20px; }\n.icon-account   { background-position: 0 -40px; }</code></pre>\n\n\n\n<h3 id=\"8cb6\">Условные сокращения</h3>\n\n\n\n<p id=\"630b\">Ограничивайте себя в использовании условных сокращений, в тех примерах, где вам надо выставлять все доступные значения. По обыкновению, злоупотребляют сокращениями следующих свойств:</p>\n\n\n\n<p id=\"e0f3\"><em>padding</em></p>\n\n\n\n<p id=\"7ca7\"><em>margin</em></p>\n\n\n\n<p id=\"97d9\"><em>font</em></p>\n\n\n\n<p id=\"2bba\"><em>background</em></p>\n\n\n\n<p id=\"bf14\"><em>border</em></p>\n\n\n\n<p id=\"2f59\"><em>border-radius</em></p>\n\n\n\n<p id=\"358a\">Зачастую, нам просто не нужно выставлять все значения в условных сокращениях. Для примера, HTML заголовки выставляют только верхний и нижний margin, так что когда необходимо, переписывайте только два этих значения. Чрезмерное использование сокращений зачастую ведет к медленному рендеренгу кода, с ненужными перезаписями и непреднамеренными побочными эффектами.</p>\n\n\n\n<pre class=\"wp-block-code css\"><code>/* Плохой пример */\n.element {\n  margin: 0 0 10px;\n  background: red;\n  background: url(\"image.jpg\");\n  border-radius: 3px 3px 0 0;\n}\n\n/* Хороший пример */\n.element {\n  margin-bottom: 10px;\n  background-color: red;\n  background-image: url(\"image.jpg\");\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}</code></pre>\n\n\n\n<h3 id=\"1ce5\">Вложения в Less и Sass</h3>\n\n\n\n<p id=\"ed9a\">Под страхом расстрела избегайте ненужных вложений в препроцессорах. Просто если вы можете это делать, то это не означает того, что вам всегда надо это делать. Рассматривайте использование вложений только в тех случаях, если вам надо масштабировать стили по родителю и если есть несколько элементов для вложения.</p>\n\n\n\n<pre class=\"wp-block-code css\"><code>// Без вложения\n.table > thead > tr > th { … }\n.table > thead > tr > td { … }\n\n// С вложением\n.table > thead > tr {\n  > th { … }\n  > td { … }\n}</code></pre>\n\n\n\n<h3 id=\"02e2\">Операторы в Less и Sass</h3>\n\n\n\n<p id=\"1dc2\">Для улучшения читабельности, заключайте математические операции в скобки с пробелом между значениями, переменными и операторами.</p>\n\n\n\n<pre class=\"wp-block-code css\"><code>// Плохой пример\n.element {\n  margin: 10px 0 @variable*2 10px;\n}\n\n// Хороший пример\n.element {\n  margin: 10px 0 (@variable * 2) 10px;\n}</code></pre>\n\n\n\n<h3 id=\"a894\">Комментарии</h3>\n\n\n\n<p id=\"32be\">Помните, что код пишется и поддерживается людьми. Убедитесь, что ваш код достаточно описателен, хорошо прокомментирован и доступен для понимания другими. Создавайте комменты в коде, передающие контекст и своё конкретное предназначение. А не просто повторяющие компонент или имя класса.</p>\n\n\n\n<p id=\"195e\">Убеждайтесь в том, что вы пишите полные предложения для больших комментариев и сжатые фразы для заглавных записей.</p>\n\n\n\n<pre class=\"wp-block-code css\"><code>/* Плохой пример */\n/* Modal header */\n.modal-header {\n  ...\n}\n\n/* Good example */\n/* Wrapping element for .modal-title and .modal-close */\n.modal-header {\n  ...\n}</code></pre>\n\n\n\n<h3 id=\"052f\">Именование классов</h3>\n\n\n\n<p id=\"7d69\">Пишите классы в нижнем регистре и используйте тире, а не нижние подчеркивания или горбатый регистр. Тире служит как естественный пробел в связанных классах. (<code>.btn</code>&nbsp;и&nbsp;<code>.btn-danger</code>).</p>\n\n\n\n<p id=\"d106\">Избегайте чрезмерных или слишком коротких, спорных определений названий.&nbsp;<code>.btn</code>&nbsp;очень полезно для кнопок, но&nbsp;<code>.s</code>&nbsp;не означает ровным счетом ничего.</p>\n\n\n\n<p id=\"5a7c\">Классы должны быть как можно короче и более сжатыми, на сколько это возможно.</p>\n\n\n\n<p id=\"7b8d\">Используйте имена со смыслом, предпочитайте структурные или целесообразные имена, взамен презентативных.</p>\n\n\n\n<p id=\"44a1\">Добавляйте классам префикс, основываясь на их ближайшем родителе или основном классе.</p>\n\n\n\n<p id=\"a0c6\">Используйте&nbsp;<code>.js-*</code>&nbsp;классы для обозначения поведения, но держите эти классы подальше от вашего CSS.</p>\n\n\n\n<p id=\"f520\">Также, очень полезно применять эти правила при раздаче имен переменным в Sass и Less.</p>\n\n\n\n<pre class=\"wp-block-code css\"><code>/* Плохой пример */\n.t { ... }\n.red { ... }\n.header { ... }\n\n/* Хороший пример */\n.tweet { ... }\n.important { ... }\n.tweet-header { ... }</code></pre>\n\n\n\n<h3 id=\"edab\">Селекторы</h3>\n\n\n\n<p id=\"0d62\"><strong>Обязательно обратите внимание на эту статью —&nbsp;<a href=\"https://stasonmars.ru/html-css/prokachivaem-naviki-raboty-s-css-selectorami/\">Прокачиваем навыки работы с CSS селекторами</a></strong></p>\n\n\n\n<p id=\"9cd3\">Используйте классы вместо обычных тегов элементов для оптимального рендеринга.</p>\n\n\n\n<p id=\"cada\">Избегайте исползования нескольких селекторов атрибутов, например&nbsp;<code>[class^=\"…\"]</code>, на часто встречающихся компонентах. Известно, что производительность браузера страдает из-за этого.</p>\n\n\n\n<p id=\"5e34\">Сохраняйте селекторы краткими и ограничивайте количество элементов в каждом селекторе до трех.</p>\n\n\n\n<p id=\"6d30\">Масштабируйте классы до ближайшего родителя, только тогда, когда нужно. Когда не используются префиксные классы.</p>\n\n\n\n<pre class=\"wp-block-code css\"><code>/* Плохой пример */\nspan { ... }\n.page-container #stream .stream-item .tweet .tweet-header .username { ... }\n.avatar { ... }\n\n/* Хороший пример */\n.avatar { ... }\n.tweet-header .username { ... }\n.tweet .avatar { ... }</code></pre>\n\n\n\n<h3 id=\"b08d\">Организация кода</h3>\n\n\n\n<p id=\"288a\">Организуйте секции кода по компонентам.</p>\n\n\n\n<p id=\"a96e\">Создавайте последовательную иерархию комментирования.</p>\n\n\n\n<p id=\"eea6\">Используйте последовательные пробелы при разделении секций кода, чтобы потом вам было легче читать большие документы.</p>\n\n\n\n<p>Используя несколько CSS файлов, разделяйте их по компонентам, а не по страницам. Страницы могут быть перераспределены, а компоненты смещены.</p>\n\n\n\n<pre class=\"wp-block-code css\"><code>/*\n * Начало секции компонента\n */\n\n.element { ... }\n\n\n/*\n * Начало секции компонента\n *\n * Иногда вам надо добавлять дополнительный контекст для целого компонента. Делайте это как описано ниже, при необходимости.\n */\n\n.element { ... }\n\n/* Связанный саб-компонент или модификатор стиля */\n.element-heading { ... }</code></pre>\n\n\n\n<h3 id=\"9ea2\">Предпочтения при редактировании</h3>\n\n\n\n<p id=\"293f\">Выставите вашему редактору следующие настройки, чтобы избежать распространенные несоответствия в коде и странные различия:</p>\n\n\n\n<p id=\"4aa4\">Используйте двойной пробел.</p>\n\n\n\n<p id=\"ffaf\">Обрезайте&nbsp;<em>болтающиеся(лишние)</em>&nbsp;пробелы при сохранении.</p>\n\n\n\n<p id=\"b84a\">Выставляйте кодировку на&nbsp;<code>UTF-8</code>.</p>\n\n\n\n<p id=\"cb7c\">Добавляйте новые строки с конца.</p>\n\n\n\n<p id=\"59b7\">Рассмотрите документирование и применение этих свойств в вашем проекте в&nbsp;<code>.editorconfig</code>&nbsp;файле. Для примера, вот один&nbsp;<a href=\"https://github.com/twbs/bootstrap/blob/master/.editorconfig\">для Bootstrap</a>. Вот больше про&nbsp;<a href=\"http://editorconfig.org/\">EditorConfig</a>.</p>\n","type":"html-css","date":"2021-02-14T15:53:49.000Z","acf":{"seo_desc":"Вообще, эта статья является неким руководством по написанию грамотного HTML и CSS. Но явно не полноценным руководством сводом правил или БЭМ, который, кстати, является очень спорным моментом в мире фронт-энда.","pub_date":"2018-08-15","keywords":"стандарты написания html, стандарты написания css, стандарты написания html и css","tags":"HTML, CSS, CSS советы, HTML советы"},"title":"Стандарты написания гибкого, надежного и жизнеспособного HTML c CSS","id":"5d29a53f-ec56-5b98-8117-d0f03d17e0f8","excerpt":"<p>Вообще, эта статья является неким руководством по написанию грамотного HTML и CSS. Но явно не полноценным руководством сводом правил или БЭМ, который, кстати, является очень спорным моментом в мире фронт-энда.</p>\n","featured_media":{"source_url":"https://stasonmars.ru/wp/wp-content/uploads/2021/02/standartynaposankjnfk.jpg"},"interesting":[{"title":"Зачем использовать правило @supports","slug":"zachem-ispolzovat-pravilo-supports","type":"html-css"},{"title":"Размеры шрифтов CSS. Пиксели vs Em vs Rem vs Проценты vs Viewport единицы","slug":"razmery-shriftov-css-pikseli-vs-em-vs-rem-procenti-vs-viewport-edinitsy","type":"html-css"},{"title":"Более доступная разметка с display: contents","slug":"bolee-dosutpnaya-razmetka-s-display-contents","type":"html-css"}]}},"staticQueryHashes":["3576131997","63159454"]}