Принципы написания чистого CSS кода
Слишком часто крупные (да и мелкие) сайты страдают от слишком разросшегося, и по сути, избыточного CSS кода, где можно найти большое количество лишних элементов, слишком длинные и конкретизированные выражения, большую зависимость одних селекторов от других, частое и нецелесообразное использование !important и так далее… Для оптимизации наших таблиц стилей, мы конечно же можем воспользоваться какими-то базовыми основами написания CSS кода. Что мы действительно должны делать, так это добиваться хорошего структурирования таблиц стилей и стремиться к повышению устойчивости к высоким нагрузкам.
Итак, наш подход будет заключаться в двух принципах. Во-первых, мы должны использовать базовые правила написания чистого и эффективного CSS кода. Во-вторых, нам необходимо применять различные методы и подходы для организации хорошей архитектуры кода и вывода наших таблиц стилей на новый уровень.
В этом уроке мы затронем эти темы, но перед этим давайте посмотрим на несколько примеров очистки CSS кода.
Несколько полезных методов
Частенько чей-то чужой опыт бывает очень полезным. Давайте рассмотрим несколько примеров:
Быстрый доступ к элементам
Очень важно иметь возможность получать быстрый доступ к какому-то стилю прямо со страницы. Для этого можно воспользоваться различными инструментами, такими как Explorer Developer Toolbar, Mozilla Firebug или Chrome Developer Tools. Используя данные инструменты, мы можем быстро находить то, что нам нужно, и тут же менять, видя результат.
1 .searchform > .searchsubmit {
2 width: 14%;
3 height: 25px;
4 background: transparent url(/images/icon_magnify.png) 0 0 no-repeat;
5 outline: 1px solid red
6 }
В данном фрагменте присутствует свойство outline. Оно используется для одновременного присвоения цвета, стиля и толщины внешней границы на всех четырех сторонах элемента. Тут я выбрал слово red для определения цвета границы и заметьте, не просто так. Для определения конечных цветов всегда пользуйтесь rgb или hsl кодами, а для временных — цельными словами. Это поможет вам в будущем быстро найти нужные фрагменты и устранить спорные моменты, возникшие во время разработки. Будьте осторожны с использованием свойства outline, т.к. оно не работает в Internet Explorer 8.
Добавление тестовых стилей
Ещё одной хорошей практикой является добавление отступа для каких-то тестовых или временных свойств.
1 .searchform > .searchsubmit {
2 width: 14%;
3 height: 25px;
4 background: transparent url(/images/icon_magnify.png) 0 0 no-repeat;
5 margin: -2px 0 0 0;
6 }
Благодаря данной технике вы сможете сразу же определить, какие свойства временные, а какие нет. Если вы решили, что запись может остаться, просто уберите отступ.
Отключение стилей
Часто при написании CSS кода нам нужно отключать какие-то стили. Мало кто знает, но для этого можно к свойству приписать префикс “x-”:
1 .social a {
2 -moz-transition: opacity 0.3s ease 0s;
3 x-display: block;
4 height: 35px;
5 opacity: 0.4;
6 }
Этот способ быстрее, чем комментирование. Также это может упростить поиск таких спорных селекторов.
Очистка и оптимизация CSS кода
Теперь, когда мы познакомились с несколькими трюками, давайте поговорим о том, как можно очистить наш CSS код. Тут будем идти от большего к меньшему. В первую очередь, рассмотрим, как лучше написать HTML код, а затем, как написать для него эффективный стиль.
Макро-оптимизация
Прежде чем приступить к оптимизации таблиц стилей, нам нужно написать хорошо читабельный HTML и CSS код.
Формирование информации и определение структуры таблицы стилей
Если речь касается разбора таблиц стилей, то я первым делом пишу её содержание. Такая информация, как знание о существующих группах селекторов, их расположении в файле, может быть очень полезна.
В первую очередь, я рекомендую вставлять какую-то информацию о пользователе (имя, …), время последней правки файла. Данный приём может сыграть свою роль, если в будущем возникнут какие-то вопросы, связанные с этими данными.
1 /* информация о таблице стилей для XyZ Corp
2 Файл создан: 09.15.2010
3 Последнее обновление: 06.04.2012
4 Автор: [name]
5 */
Также я рекомендую писать содержание файла, чтоб вы и другие разработчики в случае необходимости смогли быстро сориентироваться.
01 /* Содержание
02 — Стили ссылок
03 — Стили для разных размеров экранов
04 — Действия
05 — Основной макет
06 — Лого
07 — Верхняя навигация
08 — Боковая навигация
09 — Поднавигация
10 */
11 …
12 (а у каждой отдельной секции…)
13 /* =Верхняя навигация */
Знак “=” в последнем выражение используется исключительно для упрощения поиска отдельно взятой секции.
Аннотации и отображение вложенность
Аннотации и отображение вложенности элементов помогают разработчику отследить начало и конец какого-то блока. Таким образом, отдельные кусочки кода будут быстро находиться.
Аннотации формируются с помощью следующих выражений: <!-- #id или .class name --> <!-- /end #id или .class name --> или просто <!-- / #id or .class name -->.
Отображение вложенности элементов может показаться шагом излишним, но он позволяет значительно упростить читабельность кода, сделать элементы визуально понятными, быстро найти проблемные места, включая места с пропущенными закрывающимися тегами, и так далее.
Разницу между хорошо и плохо структурированным кодом, вы можете увидеть в следующих примерах.
До
01 <body>
02 <div id="pagewrap">
03 <div id="header">
04 <h1>Website Title</h1>
05 <ul id="navigation">
06 <li><a href="#">Home</a></li>
07 <li><a href="#">About</a></li>
08 <li><a href="#">Contact</a></li>
09 </ul>
10 <div id="contentwrap">
11 <div id="maincontent">
12 <h2>Main Content Title</h2>
13 <p>Main content, which is so much more
14 important than the secondary content that it
15 makes one teary with emotion.</p>
16 </div>
17 <div id="secondarycontent">
18 <h3>Sidebar Title</h3>
19 <p>Sidebar content, which is not as important
20 as the primary content (which is why it is in
21 the sidebar)</p>
22 </div>
23 <div id="footer">
24 <p>standard copyright and footer
25 information</p>
26 </div>
27 </body>
После
01 <body>
02 <div id="pagewrap">
03 <div id="header">
04 <h1>Website Title</h1>
05 <ul id="navigation">
06 <li><a href="#">Home</a></li>
07 <li><a href="#">About</a></li>
08 <li><a href="#">Contact</a></li>
09 </ul><!-- end #header -->
10 <div>
11 <div id="contentwrap">
12 <div id="maincontent">
13 <h2>Main Content Title</h2>
14 <p>Main content, which is so much more
15 important than the secondary content that it
16 makes one teary with emotion.</p>
17 </div><!-- end #maincontent -->
18
19 <div id="secondarycontent">
20 <h3>Sidebar Title</h3>
21 <p>Sidebar content, which is not as important
22 as the primary content (which is why it is in
23 the sidebar)</p>
24 </div><!-- end #secondarycontent -->
25 </div><!-- end #contentwrap -->
26 <div id="footer">
27 <p>standard copyright and footer
28 information</p>
29 </div><!-- end #footer -->
30 </div><!-- end #pagewrap -->
31 </body>
Микро-оптимизация
Микро-оптимизация направлена на уменьшение размера файла и увеличение скорости загрузки страницы.
Сортирование свойств в алфавитном порядке
Сортировка CSS свойств в алфавитном порядке — это отличный способ сохранять ваш код чистым и избежать лишних проблем. Почему? Потому что нужный фрагмент можно будет быстро найти и исправить.
Пример 1
01 .login {
02 margin-top: 5px;
03 line-height: 1.5em;
04 padding-left: 5px;
05 float: right;
06 list-style-type: none;
07 width: 80px;
08 font-weight: bold;
09 border-left: 1px solid #69824d;
10 }
Пример 2
01 .login {
02 border-left: 1px solid #69824d;
03 float: right;
04 font-weight: bold;
05 line-height: 1.5em;
06 list-style-type: none;
07 margin-top: 5px;
08 padding-left: 5px;
09 width: 80px;
10 }
Увеличение эффективности кода
Длинные селекторы заставляют браузер лишний раз проходиться по DOM-у и искать совпадения. Более конкретизированные названия селекторов позволяют избежать данную проблему.
Перед оптимизацией
1 div#wrapper div#maincontent div#sidebar {
2 background: #fff url(/bg.png) repeat-x 0 0;
3 border: 1px solid #ff0;
4 font: normal 1.33em/1.33 Georgia, serif;
5 margin: 10px 20px;
6 padding: .1em;
7 }
После оптимизации
1 #sidebar {
2 background: #fff url(/bg.png) repeat-x 0 0;
3 border: 1px solid #ff0;
4 font: normal 1.33em/1.33 Georgia, serif;
5 margin: 10px 20px;
6 padding: .1em;
7 }
Пишите просто и кратко
Чем меньше написано кода, тем эффективнее работает страница. Для определения стилей следуйте следующим правилам.
Используйте короткие названия CSS свойств везде, где это возможно;
Пишите сокращённые значения свойств;
Избегайте дублирования CSS свойств.
До
01 #sidebar {
02 background-color: #fff;
03 background-image: (bg.png);
04 background-position: 0 0;
05 background-repeat: repeat-x;
06 border-width: 1px;
07 border-style: solid;
08 border-color: #ffff00;
09 font-family: Georgia, serif;
10 font-size: 1.33em;
11 line-height: 1.33em;
12 font-weight: normal;
13 margin: 10px 20px 10px 20px;
14 padding: .1em;
15 }
После
1 #sidebar {
2 background: #fff url(/bg.png) repeat-x 0 0;
3 border: 1px solid #ff0;
4 font: normal 1.33em/1.33 Georgia, serif;
5 margin: 10px 20px;
6 padding: .1em;
7 }
Сокращайте код
Главное, что вам нужно сделать на финальной стадии работы над стилями, — это убрать все дубликаты строк и различного рода отступы. Для рабочей версии стиля можно также убрать всевозможные комментарии. Также можно воспользоваться инструментами сжатия CSS стилей: CSS Compressor, CSS Drive.