Как мне организовать содержимое моего файла (ов) CSS?

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

Есть ли у кого-нибудь совет, как организовать директивы?

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

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

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

отличный вопрос, дал отличные ответы. Нашел много полезного. Спасибо.

Sebastien 15.11.2013 18:04

К вашему сведению - я задал <a href="stackoverflow.com/questions/72911/… тот же вопрос</a>, на случай, если вы хотите прочитать больше ответов.

Nathan Long 06.10.2008 18:17
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
CSS: FlexBox
CSS: FlexBox
Ранее разработчики использовали макеты с помощью Position и Float. После появления flexbox сценарий полностью изменился.
82
2
36 562
13
Перейти к ответу Данный вопрос помечен как решенный

Ответы 13

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

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

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

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

На днях ... Два года назад =)

Oli 28.09.2008 19:48

ха! действительно, да - интересно :) Должно быть, он связался с этим из недавней статьи. а может я просто сумасшедший.

Nick Sergeant 28.09.2008 19:50

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

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

Но кое-что я скажу:

  • Разбиение файла 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 */ }

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

Создание одного большого файла CSS (или любого другого) для целей разработки - совершенно плохая практика. Вы когда-нибудь работали, например, с CSS или JavaScript файлы длиной более 5000 строк? Возможно нет. Однако существуют инструменты, которые минимизируют и объединяют весь CSS в большой для prod environemtn (и других файлов), чтобы сделать эту работу за вас, без таких проблем на этапе разработки.

forsberg 25.02.2017 15:44

Обратите внимание, этому ответу 9 лет. Инструменты, которые существовали тогда, на самом деле были далеко не такими продвинутыми, как те, которые вы бы использовали сегодня (например, препроцессоры LESS / SASS). Но, в любом случае, тогда «one-big-таблицы стилей» не были редкостью ... Отсюда и стиль в ответе. Если бы они не были встроенными, они бы были бы длиной 10 000 строк. В настоящее время я делаю все по-другому, но у меня есть другие инструменты, и у нас есть такие вещи, как HTTP2, чтобы минимизировать задержку между загрузками.

Oli 25.02.2017 17:43

Поскольку фактический порядок является важной частью того, как применяется ваш CSS, кажется немного глупым предлагать «алфавитный» вариант.

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

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

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

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

Я использую такой порядок:

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

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

Я склонен согласиться с этим, с небольшими вариациями в том, как я бы это описал ... 1) Глобальные правила (такие же, как вы описали, но влияют почти на все на сайте), 2) Правила главной страницы (это будет для верхний колонтитул, нижний колонтитул, область содержимого и боковые панели, если таковые имеются, которые представляют собой одну большую часть или все страницы, и 3) правила отдельных страниц по мере необходимости, разделенные на файлы для соответствующих страниц. Были сделаны некоторые комментарии о том, что такое разделение таблиц стилей приводит к слишком большому количеству запросов, но на самом деле это всего два запроса, и это гарантирует, что ненужные стили не будут загружены на каждую страницу.

MQuiggGeorgia 20.04.2018 00:06

Этому оригинальному ответу 10 лет, и его никоим образом нельзя считать современным.

Jonathan Arkell 25.05.2018 00:15

Не буду редактировать, просто добавлю отказ от ответственности, учитывая, сколько ему лет. Это все.

Jonathan Arkell 08.06.2018 01:06

Я обычно организовываю свой CSS следующим образом:

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

Если вы собираетесь добавить CSS, который используется только на одной странице, почему бы просто не разместить CSS на этой странице без использования файла CSS?

timetofly 13.02.2013 22:30

О боже, почему я не подумал об этом?

Sebastien 15.11.2013 18:01

@ user371699 Некоторые утверждают, что использование <link> более эффективно, чем загромождение HTML-файла тегом <style>.

DylRicho 30.01.2014 12:35

@Sebastien Вы можете легко переключаться между разными стилями, если сохраняете свой CSS в файлах CSS. С тегом <style> придется все переписать.

reinaldoluckman 19.09.2014 18:49

@DylRicho, вы имеете в виду более эффективный или более удобный в обслуживании? Если весь CSS содержится в соответствующем HTML-файле, тогда клиентский браузер должен загрузить с веб-сайта только 1 файл, а не 2 или более. Следовательно, может показаться, что сохранение всего CSS в одном файле с использованием тегов <style> было бы более предпочтительным вариантом эффективный.

AjaxLeung 05.04.2016 00:36

@AlexLeung Более удобен в обслуживании. Плохой выбор слов с моей стороны!

DylRicho 05.04.2016 20:31

@AjaxLeung Судя по тому, что мне сказал "убийца разработчиков", он также более эффективен. Это одна из причин, по которой CDN играют важную роль в ускорении загрузки файлов - тогда все подключения к разным серверам выполняются одновременно.

forsberg 25.02.2017 15:42

Файлы 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; }

Вот что я делаю. У меня есть индексная страница 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/>, которые определяют макет, верхний колонтитул, нижний колонтитул, количество столбцов, где они подходят и т. д. Теги html определяют <body/>, <h1/>, <p/>, т и т. д. Затем идут определенные разделы сайта .

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

А это значит, что браузеры должны сделать 9 запросов к серверу, прежде чем они смогут начать рендеринг страницы! Помните, что большинство браузеров не разрешают более двух подключений к серверу одновременно! Это нормально для разработчиков, но вы хотите сжать это в один файл для производства! То же самое и с JS

Oli 29.09.2008 02:41

ссылка намного эффективнее, чем @import. Yahoo YSlow правило # 13

scunliffe 29.09.2008 05:58
Ответ принят как подходящий

Для начала взгляните на эти три слайд-шоу:

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

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

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

#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 ...

Примечание: reset.css стал мертвым звеном

Braden Best 20.05.2017 09:06

@BradenBest, спасибо, ссылки YUI обновлены. Не уверен, что ссылка на reset.css по-прежнему содержит ту же информацию, что и изначально. И YUI больше не поддерживается, так что вам, вероятно, лучше погуглить.

mercator 22.05.2017 13:11

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

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

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

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

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

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

Блокировать

Автономная сущность, имеющая смысл сама по себе, например:

header, container, menu, checkbox, input

Элемент

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

menu item, list item, checkbox caption, header title

Модификатор

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

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

OOCSS

The purpose of OOCSS is to encourage code reuse and, ultimately, faster and more efficient stylesheets that are easier to add to and maintain.

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

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

This means to define repeating visual features (like background and border styles) as separate “skins” that you can mix-and-match with your various objects to achieve a large amount of visual variety without much code. See the module object and its skins.

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

Essentially, this means “rarely use location-dependent styles”. An object should look the same no matter where you put it. So instead of styling a specific with .myObject h2 {...}, create and apply a class that describes the in question, like . This gives you the assurance that: (1) all unclassed s will look the same; (2) all elements with the category class (called a mixin) will look the same; and 3) you won’t need to create an override style for the case when you actually do want .myObject h2 to look like the normal .


SMACSS

SMACSS is a way to examine your design process and as a way to fit those rigid frameworks into a flexible thought process. It is an attempt to document a consistent approach to site development when using CSS.

At the very core of SMACSS is categorization. By categorizing CSS rules, we begin to see patterns and can define better practices around each of these patterns.

Есть пять типов категорий:

/* Base */

/* Layout */

/* Modules */

/* State */

/* Theme */

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

Макет Будет содержать всю навигацию, панировочные сухари, карты сайта и т. д. И т. Д.

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

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

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


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

ITCSS

Гарри Робертс (CSS Wizardry)

Определяет глобальное пространство имен и каскад и помогает поддерживать низкую специфичность селекторов.

Состав

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

  1. (Настройки)
  2. (Инструменты)
  3. Дженерики
  4. Элементы
  5. Объекты
  6. Составные части
  7. Козыри

Обычно я делаю так:

  1. <link rel = "stylesheet" href = "css/style.css">
  2. В style.css я @import:

    @import url(colors.css);
    @import url(grid.css);
    @import url(custom.css); + some more files (if needed)
    
  3. В colors.css я @import следующее (при использовании настраиваемых свойств CSS):

    @import url(root/variable.css);
    

Все в порядке и легко получить любую часть кода для редактирования. Буду рад, если это как-то поможет.

Другие вопросы по теме