<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="uk">
	<id>https://mediawiki.zina.run/index.php?action=history&amp;feed=atom&amp;title=%D0%9F%D1%80%D0%B0%D0%B2%D0%B8%D0%BB%D0%B0_CSS_%D0%B8_HTML</id>
	<title>Правила CSS и HTML - Історія редагувань</title>
	<link rel="self" type="application/atom+xml" href="https://mediawiki.zina.run/index.php?action=history&amp;feed=atom&amp;title=%D0%9F%D1%80%D0%B0%D0%B2%D0%B8%D0%BB%D0%B0_CSS_%D0%B8_HTML"/>
	<link rel="alternate" type="text/html" href="https://mediawiki.zina.run/index.php?title=%D0%9F%D1%80%D0%B0%D0%B2%D0%B8%D0%BB%D0%B0_CSS_%D0%B8_HTML&amp;action=history"/>
	<updated>2026-10-12T10:40:00Z</updated>
	<subtitle>Історія редагувань цієї сторінки в вікі</subtitle>
	<generator>MediaWiki 1.44.2</generator>
	<entry>
		<id>https://mediawiki.zina.run/index.php?title=%D0%9F%D1%80%D0%B0%D0%B2%D0%B8%D0%BB%D0%B0_CSS_%D0%B8_HTML&amp;diff=571&amp;oldid=prev</id>
		<title>&gt;Zina: /* Хорошо vs плохо */</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zina.run/index.php?title=%D0%9F%D1%80%D0%B0%D0%B2%D0%B8%D0%BB%D0%B0_CSS_%D0%B8_HTML&amp;diff=571&amp;oldid=prev"/>
		<updated>2023-01-08T08:39:15Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Хорошо vs плохо&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Нова сторінка&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Хорошо vs плохо ==&lt;br /&gt;
&lt;br /&gt;
=== REM вместо EM ===&lt;br /&gt;
&lt;br /&gt;
[https://www.aleksandrhovhannisyan.com/blog/use-rems-for-font-size/ Use Rems for Font Size to Respect User Preferences]&lt;br /&gt;
&lt;br /&gt;
=== Чем меньше CSS «знает» про структуру HTML, тем лучше ===&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Источник: [http://web-standards.ru/articles/css-architecture/ Архитектура CSS — Веб-стандарты]&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
CSS определяет, как выглядит ваш компонент, а HTML применяет этот вид к элементам на странице.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
/* Граната */&lt;br /&gt;
#main-nav ul li ul { }&lt;br /&gt;
&lt;br /&gt;
/* Снайперская винтовка */&lt;br /&gt;
.subnav { }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Задайте пространство имён ===&lt;br /&gt;
&lt;br /&gt;
Мы уже выяснили, почему родительские селекторы не всегда на 100% эффективны для ограничения действия и пересечения стилей. Гораздо лучший подход — добавить пространство имён к самим классам. Если элемент является частью визуального компонента, то каждый из классов его вложенных элементов должен использовать имя класса базового компонента в качестве пространства имён.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
/* Высокий риск пересечения имён классов */&lt;br /&gt;
.widget { }&lt;br /&gt;
.widget .title { }&lt;br /&gt;
&lt;br /&gt;
/* Низкий риск пересечения имён классов */&lt;br /&gt;
.widget { }&lt;br /&gt;
.widget-title { }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление пространства имён к классам делает ваши компоненты самодостаточными и модульными. Это также уменьшает вероятность конфликтов с уже существующими классами и снижает специфичность, необходимую для оформления дочерних элементов.&lt;br /&gt;
&lt;br /&gt;
=== Расширяйте компоненты модификаторами классов ===&lt;br /&gt;
&lt;br /&gt;
Когда существующий компонент должен выглядеть чуть иначе в некотором контексте, создайте модификатор класса, чтобы расширить его.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
/* Плохо */&lt;br /&gt;
.widget { }&lt;br /&gt;
#sidebar .widget { }&lt;br /&gt;
&lt;br /&gt;
/* Хорошо */&lt;br /&gt;
.widget { }&lt;br /&gt;
.widget-sidebar { }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Мы уже рассмотрели все недостатки изменения компонентов на основе их родительских элементов, но для закрепления: модификатор класса может использоваться где угодно, переопределение на основе вложенности — только в конкретной ситуации. Модификатор класса также может использоваться сколько угодно раз. Наконец, модификаторы класса очень ясно выражают намерения разработчика прямо в HTML. Классы, основанные на вложенности, напротив, полностью скрыты для разработчика, который смотрит только на HTML, что сильно увеличивает вероятность, что они от него ускользнут.&lt;br /&gt;
&lt;br /&gt;
=== Сохраняйте селекторы короткими ===&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Источник: [https://webref.ru/layout/advanced-html-css/performance-organization Производительность и организация | WebReference]&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Есть несколько преимуществ, зачем сохранять селекторы CSS при возможности короткими. Они включают в себя минимизацию специфичности, что позволяет лучше наследоваться и переноситься, плюс повышение эффективности. Длинные, более точные селекторы снижают производительность, поскольку они заставляют браузер отображать каждый отдельный селектор типа справа налево. Это также накладывает бремя на все остальные селекторы, чтобы они стали более специфичными.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
/* Плохо */&lt;br /&gt;
header nav ul li a {...}&lt;br /&gt;
&lt;br /&gt;
/* Хорошо */&lt;br /&gt;
.primary-link {...}&lt;br /&gt;
&lt;br /&gt;
/* Плохо */&lt;br /&gt;
button strong span {...}&lt;br /&gt;
button strong span .callout {...}&lt;br /&gt;
&lt;br /&gt;
/* Хорошо */&lt;br /&gt;
button span {...}&lt;br /&gt;
button .callout {…}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В приведённом выше коде первый селектор весьма специфичен и может быть намного быстрее идентифицирован и показан с помощью класса. Кроме того, использование класса в этом случае значительно снижает необходимость определения родителей этого элемента, что позволяет элементу со временем менять своё местоположение без нарушения каких-либо стилей.&lt;br /&gt;
&lt;br /&gt;
Второй пример включает в себя более короткие селекторы, чем в первом примере, но они могут быть улучшены путём обеспечения такого же уровня специфичности для каждого селектора. Избегайте применения чрезмерно конкретных селекторов, взамен это уменьшит шанс нарушения должного порядка элементов при их изменении. Удалив некоторые отдельные блоки селекторов и дав всем селекторам одинаковую силу, всё это позволит им лучше взаимодействовать.&lt;br /&gt;
&lt;br /&gt;
Вообще, цель коротких селекторов — уменьшить специфичность, создать чистый, более отзывчивый код.&lt;br /&gt;
&lt;br /&gt;
=== Предпочитайте классы ===&lt;br /&gt;
&lt;br /&gt;
Классы это хорошо, потому что они отображаются быстро, позволяют повторно использовать стили и широко применяются при создании сайта. Существуют общие методы применения классов, которые позволяют увидеть, что классы работают должным образом.&lt;br /&gt;
&lt;br /&gt;
Поскольку селекторы отображаются справа налево, важно следить за ключевым селектором. Это селектор в самом конце, крайний справа. Ключевой селектор имеет решающее значение, поскольку он определяет первый элемент, который браузер собирается найти. Плохой ключевой селектор может отправить браузер охотиться на диких гусей. Не бойтесь использовать класс, чтобы сделать элемент более уникальным, просто во благо производительности.&lt;br /&gt;
&lt;br /&gt;
Кроме того, не предваряйте селектор класса элементом. Это запрещает стилям применяться к разным элементам и повышает общую специфичность селектора.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
/* Плохо */&lt;br /&gt;
#container header nav {...}&lt;br /&gt;
&lt;br /&gt;
/* Хорошо */&lt;br /&gt;
.primary-nav {...}&lt;br /&gt;
&lt;br /&gt;
/* Плохо */&lt;br /&gt;
article.feat-post {...}&lt;br /&gt;
&lt;br /&gt;
/* Хорошо */&lt;br /&gt;
.feat-post {…}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Повторное использование кода ===&lt;br /&gt;
&lt;br /&gt;
Одно из самых больших падений производительности приходит с раздуванием размера файла и ненужным отображением в браузере. Одним из быстрых способов, который поможет во многом сократить размеры CSS-файла, является повторное, насколько это возможно, использование стилей. Любые повторяющиеся стили или шаблоны интерфейса должны быть объединены, задействуя общий код. Если два модуля используют одинаковый фон, закругленные уголки и тень у блока, нет причин явно указывать те же стили два раза. Вместо этого они могут быть объединены в одном классе, стили при этом пишутся один раз.&lt;br /&gt;
&lt;br /&gt;
Повторно используемый код не должен работать за счёт семантики. Одним из методов может быть соединение селекторов вместе, разделяя их запятой и позволяя одинаковым стилям наследоваться сразу двум селекторам. Другой подход, который часто встречается в ранее упомянутых методологиях OOCSS и SMACSS, включает в себя привязывание стилей к одному классу, а затем использование нескольких классов в одном элементе.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
/* Плохо */&lt;br /&gt;
.news {&lt;br /&gt;
  background: #eee;&lt;br /&gt;
  border-radius: 5px;&lt;br /&gt;
  box-shadow: inset 0 1px 2px rgba(0, 0, 0, .25);&lt;br /&gt;
}&lt;br /&gt;
.social {&lt;br /&gt;
  background: #eee;&lt;br /&gt;
  border-radius: 5px;&lt;br /&gt;
  box-shadow: inset 0 1px 2px rgba(0, 0, 0, .25);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Хорошо */&lt;br /&gt;
.news,&lt;br /&gt;
.social {&lt;br /&gt;
  background: #eee;&lt;br /&gt;
  border-radius: 5px;&lt;br /&gt;
  box-shadow: inset 0 1px 2px rgba(0, 0, 0, .25);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Ещё лучше */&lt;br /&gt;
.modal {&lt;br /&gt;
  background: #eee;&lt;br /&gt;
  border-radius: 5px;&lt;br /&gt;
  box-shadow: inset 0 1px 2px rgba(0, 0, 0, .25);&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Между этими применяемыми подходами нет большой разницы, так как код используется повторно, а общий размер файла уменьшается.&lt;br /&gt;
&lt;br /&gt;
=== Тихие %placeholder ===&lt;br /&gt;
&lt;br /&gt;
Лучше, чем mixin.&lt;br /&gt;
&lt;br /&gt;
* https://youtu.be/vXW7w3ym8hg?t=23m42s&lt;br /&gt;
* http://codezona.com/css3-rules-oocss.html &lt;br /&gt;
&lt;br /&gt;
[http://jsfiddle.net/m8tkdh5y/24/ Демо]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Плохо:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;-- Чистый CSS --&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;wrapper&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;#&amp;quot; class=&amp;quot;btn linkedin&amp;quot;&amp;gt;Linkedin&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;#&amp;quot; class=&amp;quot;btn myspace&amp;quot;&amp;gt;Myspace&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
.btn {&lt;br /&gt;
  border:2px solid gray;&lt;br /&gt;
  padding:5px 15px;&lt;br /&gt;
  border-radius:5px;&lt;br /&gt;
  color:white;&lt;br /&gt;
  font-weight:bold;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.linkedin {&lt;br /&gt;
  background:blue;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Хорошо:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- SASS  @extend --&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;wrapper&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;#&amp;quot; class=&amp;quot;blue&amp;quot;&amp;gt;Linkedin&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;#&amp;quot; class=&amp;quot;red&amp;quot;&amp;gt;Myspace&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
/* SASS %placeholder selector. %button НЕ записывается в css */&lt;br /&gt;
%button {&lt;br /&gt;
  border:2px solid gray;&lt;br /&gt;
  padding:5px 15px;&lt;br /&gt;
  border-radius:5px;&lt;br /&gt;
  color:gray;&lt;br /&gt;
  font-weight:bold;&lt;br /&gt;
}&lt;br /&gt;
.yellow {&lt;br /&gt;
  @extend %button;&lt;br /&gt;
  background:yellow;&lt;br /&gt;
}&lt;br /&gt;
.pink {&lt;br /&gt;
  @extend %button;&lt;br /&gt;
  background:pink;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Правила ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Источник: [http://web-standards.ru/articles/css-architecture/ Архитектура CSS — Веб-стандарты]&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
=== Правила для Sass ===&lt;br /&gt;
&lt;br /&gt;
* Никогда не вкладывайте правила только для организации кода. Вкладывайте только тогда, когда это нужно в CSS на выходе.&lt;br /&gt;
* Никогда не используйте примеси (&amp;lt;code&amp;gt;mixin&amp;lt;/code&amp;gt;), если не передаёте аргумент. Примеси без аргументов гораздо лучше использовать в качестве шаблонов, которые можно расширить.&lt;br /&gt;
* Никогда не используйте &amp;lt;code&amp;gt;@extend&amp;lt;/code&amp;gt; для селектора, который не является одиночным классом. Это не имеет смысла с точки зрения дизайна и раздувает скомпилированный CSS.&lt;br /&gt;
* Никогда не используйте &amp;lt;code&amp;gt;@extend&amp;lt;/code&amp;gt; для компонентов интерфейса в модификаторе компонента, иначе вы нарушаете цепь наследования (подробнее об этом дальше).&lt;br /&gt;
&lt;br /&gt;
=== Правила для CSS ===&lt;br /&gt;
&lt;br /&gt;
* Не допускайте ID в своих селекторах.&lt;br /&gt;
* Не используйте несемантические типы селекторов (&amp;lt;code&amp;gt;div&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;span&amp;lt;/code&amp;gt;, напр.) для любого неодиночного правила.&lt;br /&gt;
* Не используйте больше двух комбинаторов в селекторе.&lt;br /&gt;
* Не допускайте использование классов, начинающихся с &amp;lt;code&amp;gt;.js-&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Внимание, если раскладка и позиционирование применяются в правилах для элементов без префикса &amp;lt;code&amp;gt;.l-&amp;lt;/code&amp;gt; в названии класса.&lt;br /&gt;
* Внимание, если класс, определённый сам по себе, позднее переопределяется как дочерний или иначе.&lt;br /&gt;
&lt;br /&gt;
=== Правила для HTML ===&lt;br /&gt;
&lt;br /&gt;
* Внимание, если один и тот же ID используется на странице два раза.&lt;br /&gt;
* Не используйте классы, не упомянутые ни в одном из файлов стилей или передайте список разрешённых (с префиксом &amp;lt;code&amp;gt;.js-&amp;lt;/code&amp;gt;, например.)&lt;br /&gt;
* Классы модификаторов не должны использоваться без их базовых классов.&lt;br /&gt;
* Классы вложенных объектов не должны использоваться в отсутствие родительского базового класса.&lt;br /&gt;
* Простые элементы &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;div&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;span&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; не должны использоваться в HTML без назначенных классов.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
&lt;br /&gt;
[https://github.com/necolas/idiomatic-css/tree/master/translations/ru-RU Принципы написания однородного CSS-кода] — github.com/necolas/idiomatic-css&lt;br /&gt;
&lt;br /&gt;
[[Категория:CSS]]&lt;/div&gt;</summary>
		<author><name>&gt;Zina</name></author>
	</entry>
</feed>