Как мне организовать содержимое моих файлов CSS? - PullRequest
75 голосов
/ 28 сентября 2008

Этот вопрос касается организации самих директив CSS в файле .css. При разработке новой страницы или набора страниц я обычно просто вручную добавляю директивы в файл .css, пытаясь реорганизовать, когда смогу. Через некоторое время у меня появятся сотни (или тысячи) строк, и при настройке макета может быть сложно найти то, что мне нужно.

У кого-нибудь есть советы по организации директив?

  • Должен ли я попытаться организовать сверху вниз, имитируя DOM?
  • Стоит ли организовывать функционально, объединяя директивы для элементов, которые поддерживают одни и те же части пользовательского интерфейса?
  • Должен ли я просто отсортировать все по алфавиту по селектору?
  • Какая комбинация этих подходов?

Кроме того, существует ли ограничение на количество CSS, которое я должен хранить в одном файле, прежде чем можно будет разбить его на отдельные файлы? Скажем, 1000 строк? Или всегда полезно хранить все это в одном месте?

Смежный вопрос: Какой лучший способ организовать правила CSS?

Ответы [ 13 ]

51 голосов
/ 29 сентября 2008

Посмотрите на эти три презентации для слайдшеров, чтобы начать:

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

Если вы хотите разделить ваш CSS на несколько файлов, сделайте это. Оли уже упоминал, что дополнительные HTTP-запросы могут быть дорогими, но вы можете получить лучшее из обоих миров. Используйте какой-нибудь сценарий сборки, чтобы опубликовать свой хорошо документированный модульный CSS в сжатый, единственный файл CSS. YUI Compressor может помочь с компрессией.

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

#content {
    /* css */
}
    #content div {
        /* css */
    }
    #content span {
        /* css */
    }
    #content etc {
        /* css */
    }

#header {
    /* css */
}
    #header etc {
        /* css */
    }

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

Поймите и используйте каскад и специфичность (так что сортировка ваших селекторов по алфавиту правильна).

Разделяю ли я свой CSS на несколько файлов, и в каких файлах зависит размер и сложность сайта и CSS. У меня по крайней мере всегда есть reset.css. Обычно это сопровождается layout.css для общего макета страницы, nav.css, если меню навигации по сайту немного усложняется, и forms.css, если у меня достаточно CSS для стилизации моих форм. Кроме этого, я все еще сам разбираюсь. У меня может быть colors.css и type.css/fonts.css, чтобы отделить цвета / графику и типографику, base.css, чтобы обеспечить полный базовый стиль для всех тегов HTML ...

18 голосов
/ 28 сентября 2008

Я склоняюсь к организации моего CSS следующим образом:

  1. reset.css
  2. base.css: я установил макет для основных разделов страницы
    1. общие стили
    2. Заголовок
    3. Nav
    4. содержание
    5. сноска
  3. extra- [page name] .css: классы, которые используются только на одной странице
9 голосов
/ 28 сентября 2008

Однако вам легче всего читать!

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

Некоторые вещи, которые я скажу, хотя:

  • Разбиение файла CSS на куски помогает вам организовать его в своей голове, но это означает больше запросов от браузеров, что в конечном итоге приводит к более медленной работе сервера (больше запросов) и браузерам для отображения страниц требуется больше времени. Имейте это в виду.
  • Разбивать файл только потому, что это произвольное количество строк, глупо (за исключением того, что у вас ужасный редактор - в таком случае, получить новый)

Лично я кодирую свой CSS следующим образом:

* { /* css */ }
body { /* css */ }
#wrapper { /* css */ }
#innerwrapper { /* css */ }

#content { /* css */ }
#content div { /* css */ }
#content span { /* css */ }
#content etc { /* css */ }

#header { /* css */ }
#header etc { /* css */ }

#footer { /* css */ }
#footer etc { /* css */ }

.class1 { /* css */ }
.class2 { /* css */ }
.class3 { /* css */ }
.classn { /* css */ }

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

8 голосов
/ 09 апреля 2013

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

БЭМ (блок, элемент, модификатор)

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

Блок

Автономная сущность, которая сама по себе значима, например:

header, container, menu, checkbox, input

Элемент

Части блока и не имеют самостоятельного значения. Они семантически привязаны к его блоку:

menu item, list item, checkbox caption, header title

Модификатор

Флаги на блоках или элементах. Используйте их, чтобы изменить внешний вид или поведение:

disabled, highlighted, checked, fixed, size big, color yellow

OOCSS

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

OOCSS основывается на двух основных принципах:

  1. Отделение структуры от кожи

Это означает определять повторяющиеся визуальные элементы (например, стили фона и границ) как отдельные «скины», которые можно смешивать и сочетать с различными объектами, чтобы получить большое количество визуального разнообразия без большого количества кода. См. Объект модуля и его скины.

  1. Разделение контейнеров и содержимого

По сути, это означает «редко использовать стили, зависящие от местоположения». Объект должен выглядеть одинаково, независимо от того, где вы его положили. Поэтому вместо того, чтобы стилизовать конкретное с помощью .myObject h2 {...}, создайте и примените класс, описывающий рассматриваемый вопрос, например. Это дает вам уверенность в том, что: (1) все не классифицированные s будут выглядеть тот же самый; (2) все элементы с классом категории (называется миксин) будет выглядеть так же; и 3) вам не нужно создавать стиль переопределения для случая, когда вы действительно хотите, чтобы .myObject h2 выглядел как нормальный.


SMACSS

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

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

Существует пять типов категорий:

/* Base */

/* Layout */

/* Modules */

/* State */

/* Theme */

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

Компоновка Содержит всю навигацию, хлебные крошки, карты сайта и т. Д. И т. Д.

Модули Содержит специфичные для области стили, такие как стили контактной формы, плитки домашней страницы, перечень товаров и т. Д. И т. Д. И т. Д.

Состояние Содержит классы состояний, такие как isSelected, isActive, hasError, wasSuccessful и т. Д. И т. Д.

Тема Содержит все стили, связанные с тематикой.


Здесь слишком много подробностей, но взгляните и на эти другие:

4 голосов
/ 28 сентября 2008

Я иду с этим заказом:

  1. Общие правила стиля, обычно применяемые к элементам без обозначения (a, ul, ol и т. Д.), Но они также могут быть общими классами (.button, .error)
  2. Правила макета страницы, применяемые к большинству / всем страницам
  3. Индивидуальные правила оформления страницы

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

4 голосов
/ 28 сентября 2008

Я испробовал несколько разных стратегий и всегда возвращаюсь к этому стилю:

.class {border: 1px solid #000; padding: 0; margin: 0;}

Это самое дружелюбное, когда речь идет о большом количестве объявлений.

г. Снук писал об этом почти четыре года назад:) .

2 голосов
/ 28 сентября 2008

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

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

1 голос
/ 30 сентября 2008

Раньше я постоянно беспокоился об этом, но Firebug пришел на помощь.

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

Конечно, обязательно убедитесь, что есть разумная структура, которая объединяет связанные стили, но не переусердствуйте. Firebug значительно упрощает отслеживание, поэтому вам не нужно беспокоиться о создании идеальной структуры CSS.

1 голос
/ 28 сентября 2008

Вот что я делаю. У меня есть индексная страница CSS без директив, которая вызывает разные файлы. Вот краткий пример:

@import url("stylesheet-name/complete-reset.css");
@import url("stylesheet-name/colors.css");
@import url("stylesheet-name/structure.css");
@import url("stylesheet-name/html-tags.css");
@import url("stylesheet-name/menu-items.css");
@import url("stylesheet-name/portfolio.css");
@import url("stylesheet-name/error-messages.css");

Начинается с полного сброса. Следующий файл определяет цветовую палитру для удобства. Затем я стилизую основные <div/> s, которые определяют макет, верхний и нижний колонтитулы, количество столбцов, где они помещаются и т. Д. ... HTML-теги определяют <body/>, <h1/>, <p/>, т и т. Далее идут конкретные разделы сайта.

Это очень масштабно и очень ясно. Гораздо удобнее найти код для изменения и новые разделы дд.

1 голос
/ 28 сентября 2008

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

Например: reset.css, design.css, text.css и так далее. Когда я выпускаю конечный продукт, я объединяю все стили в один файл.

Еще один полезный совет - сфокусировать читабельность на правилах, а не на стилях.

В то время как:

ul li
{
    margin-left: 10px;
    padding: 0;
}

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

Вместо этого я использую этот формат:

rule { property: value; property: value; }

rule { property: value; property: value; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...