Управление CSS Explosion - PullRequest
       42

Управление CSS Explosion

677 голосов
/ 12 февраля 2010

Я сильно полагаюсь на CSS для веб-сайта, над которым я работаю. Прямо сейчас все стили CSS применяются для каждого тега, и поэтому сейчас я пытаюсь переместить его в более внешний стиль, чтобы помочь с любыми будущими изменениями.

Но теперь проблема в том, что я заметил, что получаю "CSS Explosion". Мне становится трудно решить, как лучше организовать и абстрагировать данные в файле CSS.

Я использую большое количество тегов div на веб-сайте, переходя от веб-сайта с большим количеством таблиц. Поэтому я получаю много CSS-селекторов, которые выглядят так:

div.title {
  background-color: blue;
  color: white;
  text-align: center;
}

div.footer {
  /* Styles Here */
}

div.body {
  /* Styles Here */
}

/* And many more */

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

Моя конечная цель - упростить использование файлов CSS и продемонстрировать их способность увеличивать скорость веб-разработки. Таким образом, другие люди, которые могут работать на этом сайте в будущем, также начнут использовать хорошие методы кодирования, вместо того, чтобы использовать их, как я.

Ответы [ 15 ]

557 голосов
/ 12 февраля 2010

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

Ниже приведены правила, которых я сам стараюсь придерживаться (не то, что мне всегда удается.)

  • Ранний рефакторинг, часто рефакторинг. Часто очищайте CSS-файлы, объединяйте несколько определений одного и того же класса. Удалите устаревшие определения немедленно .

  • При добавлении CSS во время исправления ошибок оставьте комментарий о том, что делает изменение («Это нужно, чтобы окно было выровнено по левому краю в IE <7») </p>

  • Избегайте избыточности, например, определяя то же самое в .classname и .classname:hover.

  • Используйте комментарии /** Head **/ для построения четкой структуры.

  • Используйте инструмент prettifier, который помогает поддерживать постоянный стиль. Я использую Polystyle , которым я вполне доволен (стоит 15 долларов, но хорошо потраченные деньги). Я уверен, что есть и бесплатные (Обновление: как, например, Code Beautifier на основе CSS Tidy , открытый я пока не использовал себя, но выглядит очень интересно.)

  • Создание разумных классов. См. Ниже несколько заметок по этому вопросу.

  • Используйте семантику, избегайте супа DIV - используйте <ul> s для меню, например.

  • Определите все на как можно более низком уровне (например, семейство шрифтов по умолчанию, цвет и размер в body) и используйте inherit, где это возможно

  • Если у вас очень сложный CSS, может быть, прекомпилятор CSS поможет. Я планирую изучить xCSS по той же самой причине в ближайшее время. Вокруг есть еще несколько человек.

  • Если вы работаете в команде, подчеркните необходимость качества и стандартов для CSS-файлов. Все знают стандарты кодирования на своих языках программирования, но мало кто знает, что это необходимо и для CSS.

  • Если вы работаете в команде, do рассмотрите возможность использования контроля версий. Это делает вещи, которые намного легче отслеживать, и редактирование конфликтов, которые намного легче разрешить. Это действительно того стоит, даже если вы «просто» знакомы с HTML и CSS.

  • Не работать с !important. Не только потому, что IE = <7 не может справиться с этим. В сложной структуре использование! Важно часто заманчиво изменить поведение, источник которого не может быть найден, но это <em>яд для долгосрочного обслуживания.

Здание разумных классов

Вот так я люблю строить разумные классы.

Сначала я применяю глобальные настройки:

body { font-family: .... font-size ... color ... }
a { text-decoration: none; }

Затем я идентифицирую основные разделы макета страницы - например, верхняя область, меню, содержимое и нижний колонтитул. Если я напишу хорошую разметку, эти области будут идентичны структуре HTML.

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

div.content ul.table_of_contents 
div.content ul.table_of_contents li 
div.content ul.table_of_contents li h1
div.content ul.table_of_contents li h2
div.content ul.table_of_contents li span.pagenumber

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

Например, допустим, у вас есть три уровня навигационных меню. Эти три меню выглядят по-разному, но они также имеют определенные характеристики. Например, все они <ul>, имеют одинаковый размер шрифта, и все элементы расположены рядом друг с другом (в отличие от стандартного рендеринга ul). Кроме того, ни одно из меню не имеет маркеров (list-style-type).

Сначала определите общие характеристики в классе с именем menu:

div.navi ul.menu { display: ...; list-style-type: none; list-style-image: none; }
div.navi ul.menu li { float: left }

Затем определите специфические характеристики каждого из трех меню. Уровень 1 - 40 пикселей в высоту; уровни 2 и 3 20 пикселей.

Примечание: вы также можете использовать несколько классов для этого, но Internet Explorer 6 имеет проблемы с несколькими классами , поэтому в этом примере используются id s.

div.navi ul.menu#level1 { height: 40px; }
div.navi ul.menu#level2 { height: 20px; }
div.navi ul.menu#level3 { height: 16px; }

Разметка для меню будет выглядеть так:

<ul id="level1" class="menu"><li> ...... </li></ul>
<ul id="level2" class="menu"><li> ...... </li></ul>
<ul id="level3" class="menu"><li> ...... </li></ul>

Если у вас есть семантически похожие элементы на странице - например, эти три меню - попробуйте сначала выработать общие черты и поместить их в класс; затем определите конкретные свойства и примените их к классам или, если вам нужно поддерживать Internet Explorer 6, идентификаторы.

Разные советы по HTML

Если вы добавите эту семантику в свой HTML-вывод, дизайнеры могут позже настроить внешний вид веб-сайтов и / или приложений, используя чистый CSS, что является большим преимуществом и экономит время.

  • Если возможно, присвойте телу каждой страницы уникальный класс: <body class='contactpage'> это позволяет легко добавлять специфичные для страницы настройки в таблицу стилей:

    body.contactpage div.container ul.mainmenu li { color: green }
    
  • При автоматическом создании меню добавьте как можно больше контекста CSS, чтобы позже можно было использовать расширенные стили. Например:

    <ul class="mainmenu">
     <li class="item_first item_active item_1"> First item </li> 
     <li class="item_2"> Second item </li> 
     <li class="item_3"> Third item </li> 
     <li class="item_last item_4"> Fourth item </li> 
    </ul>
    

    Таким образом, каждый элемент меню доступен для стилизации в соответствии с его семантическим контекстом: будь то первый или последний элемент в списке; Будь то активный элемент в данный момент; и по номеру.

Обратите внимание , что это назначение нескольких классов, как описано в примере выше , не работает должным образом в IE6 . Существует обходной путь , чтобы IE6 мог работать с несколькими классами; Я еще не пробовал, но выглядит очень многообещающе от Дина Эдвардса. До этого вам придется установить наиболее важный для вас класс (номер элемента, активный или первый / последний) или использовать идентификаторы. (Booo IE6!)

88 голосов
/ 12 февраля 2010

Вот только 4 примера:

На все 4 в мой ответ вошли советы по загрузке и прочтению PDF CSS Systems Натали Даун . (В PDF включены тонны заметок, которых нет на слайдах, так что читайте PDF!). Примите к сведению ее предложения по организации.

РЕДАКТИРОВАТЬ (2014/02/05) четыре года спустя, я бы сказал:

  • Используйте препроцессор CSS и управляйте своими файлами как частными (я лично предпочитаю Sass с Compass, но Less тоже неплох, а есть и другие)
  • Ознакомьтесь с такими понятиями, как OOCSS , SMACSS и BEM или getbem .
  • Посмотрите, как структурированы такие популярные CSS-фреймворки, как Bootstrap и Zurb Foundation . И не стоит сбрасывать со счетов менее популярные фреймворки - Inuit интересный, но есть множество других.
  • Объедините / уменьшите ваши файлы с помощью шага сборки на сервере непрерывной интеграции и / или запускающего задачи, такого как Grunt или Gulp.
73 голосов
/ 20 января 2011

Не пишите заголовки в CSS

Просто разбивайте разделы на файлы.Любые комментарии CSS должны быть просто комментариями.

reset.css
base.css
somepage.css
someotherpage.css
some_abstract_component.css

Используйте скрипт, чтобы объединить их в один;если необходимо.Вы даже можете иметь хорошую структуру каталогов и просто рекурсивно сканировать ваш скрипт на наличие .css файлов.

Если вам нужно написать заголовки, укажите в начале файла оглавление

Заголовки в оглавлении должны полностью совпадать с заголовками, которые вы напишете позже.Больно искать заголовки.Чтобы добавить к проблеме, как кто-то должен знать, что у вас есть еще один заголовок после вашего первого?пс.не добавляйте doc-like * (звездочку) в начале каждой строки при написании оглавлений, это только делает более раздражающим выделение текста.

/* Table of Contents
   - - - - - - - - -
   Header stuff
   Body Stuff
   Some other junk
   - - - - - - - - -
 */
...
/* Header Stuff 
 */
...
/* Body Stuff 
 */

Пишите комментарии с правилами или внутри правил, а невне блока

Прежде всего, когда вы редактируете скрипт, есть вероятность 50/50, что вы обратите внимание на то, что находится за пределами блока правил (особенно, если это большой текстовый фрагмент;)).Во-вторых, нет (почти) ни одного случая, когда вам понадобился бы «комментарий» снаружи.Если он находится снаружи, это заголовок заголовка в 99% случаев, поэтому оставьте его таким.

Разделить страницу на компоненты

Компоненты должны иметь position:relative, нет padding инет margin, большую часть времени.Это значительно упрощает правила%, а также позволяет упростить absolute:position 'элементов, поскольку при наличии контейнера с абсолютным позиционированием элемент с абсолютным позиционированием будет использовать контейнер при вычислении top, right, bottomleft свойства.

Большинство DIV в документе HTML5 обычно являются компонентами.

Компонент также является чем-то, что можно считать независимой единицей на странице.С точки зрения непрофессионалов, относитесь к чему-то как к компоненту, если имеет смысл рассматривать что-то вроде черного ящика .

Снова рассмотрим пример страницы QA:

#navigation
#question
#answers
#answers .answer
etc.

Путем разделениястраницы на компоненты, вы разбиваете свою работу на управляемые единицы.

Поместите правила с совокупным эффектом на одной строке.

Например border, margin и padding (но не outline) все добавляют к размерам и размеру элемента, который вы разрабатываете.

position: absolute; top: 10px; right: 10px;

Если они просто не читаются на одной строке, по крайней мере, поместите их в непосредственной близости:

padding: 10px; margin: 20px;
border: 1px solid black;

Используйте сокращение, когда это возможно:

/* the following... */
padding-left: 10px;
padding-right: 10px;
/* can simply be written as */
padding: 0 10px;

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

Если у вас больше экземпляров одного и того же селектора, есть большая вероятность, что вы неизбежно закончитес несколькими экземплярами одних и тех же правил.Например:

#some .selector {
    margin: 0;
    font-size: 11px;
}
...
#some .selector {
    border: 1px solid #000;
    margin: 0;
}

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

Прежде всего, теги DIV и SPAN являются исключением: вы никогда не должны их использовать, никогда!;) Используйте их только для прикрепления класса / идентификатора.

Это ...

div#answers div.answer table.statistics {
    border-collapse: collapsed;
    color: pink;
    border: 1px solid #000;
}
div#answers div.answer table.statistics thead {
    outline: 3px solid #000;
}

Должно быть написано так:

#answers .answer .statistics {
    border-collapse: collapsed;
    color: pink;
    border: 1px solid #000;
}
#answers .answer .statistics thead {
    outline: 3px solid #000;
}

Потому что лишние висячиеDIVs там ничего не добавляют к селектору.Они также вынуждают ненужное правило тега.Если вы измените, например, .answer с div на article, ваш стиль нарушится.

Или, если вы предпочитаете больше ясности:

#answers .answer .statistics {
    color: pink;
    border: 1px solid #000;
}
#answers .answer table.statistics {
    border-collapse: collapsed;
}
#answers .answer .statistics thead {
    outline: 3px solid #000;
}

Причина в том, что свойство border-collapse является специальным свойством, которое имеет смысл только при применении к table.Если .statistics не является table, оно не должно применяться.

Общие правила - это зло!

  • Избегайте написания общих / магических правил, если вы можете
  • если только это не для CSS-сброса / отмены сброса, вся ваша общая магия должна применяться как минимум к одному корневому компоненту

Они не экономят ваше время, они заставляют вашу голову взорваться;а также сделать техническое обслуживание кошмаром.Когда вы пишете правило, вы можете знать, где оно применяется, однако это не гарантирует, что ваше правило не будет связываться с вами позже.

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

Вещи, как это ...

.badges {
    width: 100%;
    white-space: nowrap;
}

address {
    padding: 5px 10px;
    border: 1px solid #ccc;
}

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

#question .userinfo .badges {
    width: 100%;
    white-space: nowrap;
}

#answers .answer .userinfo address {
    padding: 5px 10px;
    border: 1px solid #ccc;
}

В основном это звучит как:

components                   target
---------------------------- --------
#answers .answer   .userinfo address
-------- --------- --------- --------
domain   component component selector 

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

Примечание: в идеале, вы должны написать достаточно. Упоминание большего количества компонентов в селекторе, однако, является более прощающей ошибкой по сравнению с упоминанием меньшего количества компонентов.

Предположим, у вас есть компонент pagination. Вы используете его во многих местах на вашем сайте. Это было бы хорошим примером того, когда вы будете писать общее правило. Допустим, вы display:block используете ссылки на отдельные номера страниц и выделяете их темно-серым фоном. Чтобы они были видны, у вас должны быть такие правила:

.pagination .pagelist a {
    color: #fff;
}

Теперь предположим, что вы используете свою нумерацию страниц для списка ответов, вы можете столкнуться с чем-то вроде этого

#answers .header a {
    color: #000;
}
...
.pagination .pagelist a {
    color: #fff;
}

Это сделает ваши белые ссылки черными, чего вы не хотите.

Неправильный способ исправить это:

.pagination .pagelist a {
    color: #fff !important;
}

Правильный способ исправить это:

#answers .header .pagination .pagelist a {
    color: #fff;
}

Сложные "логические" комментарии не работают:)

Если вы напишите что-то вроде: «это значение зависит от бла-бла в сочетании с высотой бла-бла», просто неизбежно, что вы сделаете ошибку, и все упадет, как карточный домик.

Держите ваши комментарии простыми; если вам нужны «логические операции», рассмотрите один из таких языков шаблонов CSS, как SASS или LESS .

Как мне написать цветной поддон?

Оставь это на конец. Есть файл для всего вашего цветового поддона. Без этого файла ваш стиль должен по-прежнему иметь пригодный для использования цветовой палитру в правилах. Ваш цветной поддон должен быть перезаписан. Вы связываете селекторы, используя родительский компонент очень высокого уровня (например, #page), а затем пишете свой стиль как самодостаточный блок правил. Это может быть просто цвет или что-то еще.

например.

#page #header .description,
#page #categories .description,
#page #answers .answer .body
{
    color: #222; background: #fff; 
    border-radius: 10px;
    padding: 1em;
}

Идея проста: ваш цветной поддон является таблицей стилей, не зависящей от базового стиля, в который вы каскад включаете.

Меньше имен, требуется меньше памяти, что облегчает чтение кода

Лучше использовать меньше имен. В идеале используйте очень простые (и короткие!) Слова: текст, тело, заголовок.

Я также считаю, что комбинация простых слов легче понять, чем суп из длинных "подходящих" слов: postbody, posthead, userinfo и т. Д.

Сохраняйте словарный запас небольшим, таким образом, даже если какой-то незнакомец, пришедший, чтобы прочитать ваш суп стиля (как и вы через несколько недель;)), должен понимать только, где используются слова, а не каждый селектор. Например, я использую .this всякий раз, когда элемент считается «выбранным элементом» или «текущим элементом» и т. Д.

Приведи себя в порядок

Написание CSS - это все равно что есть, иногда вы оставляете беспорядок. Убедитесь, что вы убрали этот беспорядок, иначе код мусора просто скопится. Удалите классы / идентификаторы, которые вы не используете. Удалите правила CSS, которые вы не используете. Убедитесь, что все хорошо, и у вас нет противоречивых или дублирующих правил.

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

Вы можете использовать такой инструмент, как расширение Firefox Dust-Me Selectors (совет: наведите указатель на файл sitemap.xml), чтобы помочь вам найти некоторые ненужные файлы, спрятанные в ядерных и карнизовских файлах CSS.

Хранить unsorted.css файл

Скажем, вы разрабатываете сайт QA, и у вас уже есть таблица стилей для "страницы ответов", которую мы назовем answers.css. Если вам теперь нужно добавить много нового CSS, добавьте его в таблицу стилей unsorted.css, а затем выполните рефакторинг в таблицу стилей answers.css.

Несколько причин для этого:

  • быстрее выполнить рефакторинг после того, как вы закончите, а затем искать правила (которые, вероятно, не существуют) и вводить код
  • вы будете писать то, что удаляете, добавление кода только усложняет удаление этого кода
  • добавление к исходному файлу легко приводит к дублированию правила / селектора
55 голосов
/ 08 августа 2010

Посмотрите на 1. SASS 2. Компас

31 голосов
/ 27 января 2011

Лучший способ противодействовать вздутию CSS - это использование объектно-ориентированных принципов CSS.

Есть даже OOCSS фреймворк, который довольно хорош.

Некоторые из идеологий противоречат многим из того, что было сказано здесь в ответах, но как только вы поймете, как проектировать CSS объектно-ориентированным способом, вы увидите, что на самом деле он работает для поддержания кода в худшем и среднем состоянии.

Ключевым моментом здесь является идентификация «объектов» или шаблонов строительных блоков на вашем сайте и разработка с их помощью.

Facebook нанял создателя OOCSS, Николь Салливан , чтобы получить большую экономию в своем коде переднего плана (HTML / CSS). Да, вы действительно можете сэкономить не только в своем CSS, но и в своем HTML, что, на первый взгляд, очень возможно для вас, поскольку вы упоминаете преобразование макета на основе table во множество div '

Еще один отличный подход в некоторых аспектах аналогичен OOCSS, заключается в том, чтобы с самого начала планировать и писать свой CSS, чтобы он был масштабируемым и модульным. Джонатан Снук сделал блестящую статью и книгу / книгу о SMACSS - Масштабируемая и модульная архитектура для CSS

Позвольте мне связать вас с некоторыми ссылками:
5 ошибок массивного CSS - (Видео)
5 ошибок массивного CSS - (Слайды)
CSS Bloat - (слайды)

16 голосов
/ 12 февраля 2010

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

Я заметил, что вы используете только идентификаторы классов (div.title). Знаете ли вы, что вы также можете использовать идентификаторы и что идентификатор имеет больший вес, чем класс?

Например,

#page1 div.title, #page1 ul, #page1 span {
  // rules
}

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

Что касается веса, помните, что оси CSS перемещаются от самых общих / самых легких к наиболее конкретным / самым тяжелым. То есть в селекторе CSS спецификатор элемента отменяется спецификатором класса, а спецификатор идентификатора. Числа учитываются, поэтому селектор с двумя спецификаторами элементов (ul li) будет иметь больший вес, чем селектор с одним спецификатором (li).

Думайте об этом как о цифрах. Число 9 в столбце единиц по-прежнему меньше единицы в столбце десятков. Селектор с идентификатором идентификатора, спецификатором класса и двумя спецификаторами элемента будет иметь больший вес, чем селектор без идентификатора, 500 спецификаторов класса и 1000 спецификаторов элемента. Это абсурдный пример, конечно, но вы поняли идею. Дело в том, что применение этой концепции поможет вам очистить CSS.

Кстати, добавление спецификатора элемента в класс (div.title) не требуется, если вы не столкнетесь с конфликтами с другими элементами, которые имеют class = "title". Не добавляйте ненужный вес, потому что вам может понадобиться использовать этот вес позже.

13 голосов
/ 07 апреля 2011

Могу ли я предложить Меньше CSS Dynamic Framework

Это похоже на SASS, как упоминалось ранее.

Это помогает поддерживать CSS для родительского класса.

1009 * Е.Г. *

 #parent{     
  width: 100%;

    #child1
    {    
     background: #E1E8F2;    
     padding: 5px;    
    }

    #child2
   {
     background: #F1F8E2;
     padding: 15px
   }
 }

Что это делает: Применяет ширину: 100% к # child1 и # child2.

Кроме того, CSS для # child1 принадлежит # parent.

Это приведет к

#parent #child1
{
 width: 100%;
 background: #E1E8F2;
 padding: 5px;
}

#parent #child2
{
 width: 100%;
 background: #F1F8E2;
 padding: 15px;
}
12 голосов
/ 12 февраля 2010

Я считаю, что сложно перевести требуемый дизайн сайта в ряд правил.Если дизайн сайта понятен и основан на правилах, то из этого могут исходить имена ваших классов и структура CSS.Но если люди со временем случайным образом добавляют на сайт небольшие кусочки, которые не имеют особого смысла, вы мало что можете сделать с этим в CSS.

Я склонен упорядочивать свои файлы CSS примернокак это:

  1. Сброс CSS, на основе Эрик Мейер .(Потому что в противном случае я обнаружил, что для большинства элементов у меня есть по крайней мере одно или два правила, которые просто сбрасывают стили браузера по умолчанию - большинство моих списков, например, не выглядят как стиль HTML по умолчанию для списков.)

  2. Сетка системы CSS, если сайт требует этого.(Я использую 960.gs )

  3. Стили для компонентов, отображаемых на каждой странице (верхние и нижние колонтитулы и т. Д.)

  4. Стили для компонентов, которые используются в различных местах на сайте

  5. Стили, которые имеют отношение только к отдельным страницам

Как выКак видите, многое из этого зависит от дизайна сайта.Если дизайн понятен и организован, ваш CSS может быть.Если нет, то ты облажался.

7 голосов
/ 12 февраля 2010

Мой ответ на высоком уровне, чтобы ответить на проблемы высокого уровня, которые вы подняли в своем вопросе. Могут быть организационные уловки низкого уровня и настройки, которые вы можете сделать, чтобы сделать их красивее, но ни один из них не может исправить методологические недостатки. Есть несколько вещей, которые влияют на взрыв CSS. Очевидно, общая сложность сайта, а также такие вещи, как семантика имен, производительность CSS, организация файлов CSS и тестируемость / приемлемость.

Вы, кажется, находитесь на правильном пути с семантикой именования, но это может быть сделано еще дальше. Разделы HTML, которые многократно появляются на сайте без структурной модификации (известные как «модули»), могут рассматриваться как корни селектора, и оттуда вы можете настроить внутреннюю компоновку относительно этого корня. Это основной принцип объектно-ориентированного CSS , и вы можете прочитать / посмотреть больше об этом в этом выступлении инженера Yahoo .

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

Наконец, у вас будет один файл CSS для всего сайта или несколько файлов (один базовый файл, используемый с файлами на странице или в разделе)? Один файл лучше для производительности, но может быть труднее понять / поддерживать с несколькими членами команды, и может быть сложнее для тестирования. Для тестирования я рекомендую иметь единственную страницу CSS-теста , которая включает каждый поддерживаемый модуль CSS для тестирования коллизий и непреднамеренного каскадирования.

В качестве альтернативы вы можете использовать многофайловый подход , чтобы распространить правила CSS на страницу или раздел. Это требует от браузера загружать несколько файлов, что является проблемой производительности. Вы можете использовать программирование на стороне сервера для динамического определения и объединения (и минимизации) файлов CSS в один файл. Но так как эти файлы являются отдельными и тестирование для них будет отдельным, вы вводите возможность несовместимого внешнего вида на страницах / разделах. Таким образом, тестирование становится сложнее.

Вы должны проанализировать конкретные потребности клиента и соответствующим образом сбалансировать эти проблемы.

5 голосов
/ 28 января 2011

Как сказал до меня: войти в OOCSS. Sass / Less / Compass заманчиво использовать, но пока ванильный CSS не будет использоваться правильно, Sass / Less / Compass будет только усугублять ситуацию.

Прежде всего, прочитайте об эффективных css. Попробуйте Google Page Speed ​​и прочитайте, что Соудерс написал об эффективном CSS.

Затем введите OOCSS.

  • Научитесь работать с каскадом. (В конце концов, мы называем это Cascading Stylesheets).
  • Узнайте, как правильно настроить гранулярность (снизу вверх, а не сверху вниз)
  • Узнайте, как разделить структуру и скин (что является уникальным и каковы вариации этих объектов?)
  • Узнайте, как разделить контейнер и контент.
  • Учитесь любить сетки.

Это будет революционизировать каждый бит о написании CSS. Я полностью обновлен и люблю это.

ОБНОВЛЕНИЕ: SMACSS похож на OOCSS, но в целом проще для адаптации.

...