Этот вопрос касается организации самих директив CSS в файле .css. При разработке новой страницы или набора страниц я обычно просто вручную добавляю директивы в файл .css, пытаясь выполнить рефакторинг, когда это возможно. Через некоторое время у меня есть сотни (или тысячи) строк, и мне может быть трудно найти то, что мне нужно, при настройке макета.
Есть ли у кого-нибудь совет, как организовать директивы?
Кроме того, есть ли ограничение на количество CSS, которое я должен хранить в одном файле, прежде чем может быть хорошей идеей разбить его на отдельные файлы? Скажем, 1000 строк? Или всегда полезно хранить все в одном месте?
Связанный вопрос: Как лучше всего организовать правила CSS?
К вашему сведению - я задал <a href="stackoverflow.com/questions/72911/… тот же вопрос</a>, на случай, если вы хотите прочитать больше ответов.






Я пробовал кучу разных стратегий и всегда возвращаюсь к этому стилю:
.class {border: 1px solid #000; padding: 0; margin: 0;}
Это самый дружелюбный, когда речь идет о большом количестве объявлений.
Об этом мистер Снук писал почти четыре года назад :).
На днях ... Два года назад =)
ха! действительно, да - интересно :) Должно быть, он связался с этим из недавней статьи. а может я просто сумасшедший.
Однако вам легче всего читать!
Серьезно, вы получите миллиард и пять предложений, но вам понравятся только несколько методов.
Но кое-что я скажу:
Лично я кодирую свой 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 (и других файлов), чтобы сделать эту работу за вас, без таких проблем на этапе разработки.
Обратите внимание, этому ответу 9 лет. Инструменты, которые существовали тогда, на самом деле были далеко не такими продвинутыми, как те, которые вы бы использовали сегодня (например, препроцессоры LESS / SASS). Но, в любом случае, тогда «one-big-таблицы стилей» не были редкостью ... Отсюда и стиль в ответе. Если бы они не были встроенными, они бы были бы длиной 10 000 строк. В настоящее время я делаю все по-другому, но у меня есть другие инструменты, и у нас есть такие вещи, как HTTP2, чтобы минимизировать задержку между загрузками.
Поскольку фактический порядок является важной частью того, как применяется ваш CSS, кажется немного глупым предлагать «алфавитный» вариант.
Как правило, вы хотите сгруппировать элементы по области страницы, на которую они влияют. Например. Сначала идут основные стили, которые влияют на все, затем стили верхнего и нижнего колонтитула, затем стили навигации, затем основные стили содержимого, затем вторичные стили содержимого.
На этом этапе я бы не стал разбивать файлы на несколько файлов, так как их будет сложнее поддерживать. (Очень сложно удерживать в голове порядок каскадов, когда у вас открыто шесть файлов CSS). Однако я бы определенно начал перемещать стили в разные файлы, если они применяются только к подмножеству страниц, например. стили форм связываются со страницей только тогда, когда страница действительно содержит форму.
Выделите общие стили. Не стили, которые просто совпадают, стили, которые являются предназначена, будут одинаковыми - где изменение стиля для одного селектора, вероятно, будет означать, что вы захотите изменить и другой. Я поместил пример этого стиля в другой пост: Создайте переменную в файле CSS для использования в этом файле CSS..
Кроме того, сгруппируйте связанные правила вместе. И разделите свои правила на несколько файлов ... если на странице каждый действительно не требуется правило каждый.
Я использую такой порядок:
Для любого из правил стиля, которые применяются к отдельной странице или к небольшой группировке страниц, я установлю в теле идентификатор и класс, что упростит нацеливание на определенные страницы. Идентификатор - это базовое имя файла, а класс - это имя каталога, в котором он находится.
Я склонен согласиться с этим, с небольшими вариациями в том, как я бы это описал ... 1) Глобальные правила (такие же, как вы описали, но влияют почти на все на сайте), 2) Правила главной страницы (это будет для верхний колонтитул, нижний колонтитул, область содержимого и боковые панели, если таковые имеются, которые представляют собой одну большую часть или все страницы, и 3) правила отдельных страниц по мере необходимости, разделенные на файлы для соответствующих страниц. Были сделаны некоторые комментарии о том, что такое разделение таблиц стилей приводит к слишком большому количеству запросов, но на самом деле это всего два запроса, и это гарантирует, что ненужные стили не будут загружены на каждую страницу.
Этому оригинальному ответу 10 лет, и его никоим образом нельзя считать современным.
Не буду редактировать, просто добавлю отказ от ответственности, учитывая, сколько ему лет. Это все.
Я обычно организовываю свой CSS следующим образом:
Если вы собираетесь добавить CSS, который используется только на одной странице, почему бы просто не разместить CSS на этой странице без использования файла CSS?
О боже, почему я не подумал об этом?
@ user371699 Некоторые утверждают, что использование <link> более эффективно, чем загромождение HTML-файла тегом <style>.
@Sebastien Вы можете легко переключаться между разными стилями, если сохраняете свой CSS в файлах CSS. С тегом <style> придется все переписать.
@DylRicho, вы имеете в виду более эффективный или более удобный в обслуживании? Если весь CSS содержится в соответствующем HTML-файле, тогда клиентский браузер должен загрузить с веб-сайта только 1 файл, а не 2 или более. Следовательно, может показаться, что сохранение всего CSS в одном файле с использованием тегов <style> было бы более предпочтительным вариантом эффективный.
@AlexLeung Более удобен в обслуживании. Плохой выбор слов с моей стороны!
@AjaxLeung Судя по тому, что мне сказал "убийца разработчиков", он также более эффективен. Это одна из причин, по которой CDN играют важную роль в ускорении загрузки файлов - тогда все подключения к разным серверам выполняются одновременно.
Файлы 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
ссылка намного эффективнее, чем @import. Yahoo YSlow правило # 13
Для начала взгляните на эти три слайд-шоу:
Во-первых, и самое главное, задокументируйте свой 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 стал мертвым звеном
@BradenBest, спасибо, ссылки YUI обновлены. Не уверен, что ссылка на reset.css по-прежнему содержит ту же информацию, что и изначально. И YUI больше не поддерживается, так что вам, вероятно, лучше погуглить.
Раньше я постоянно об этом беспокоился, но на помощь пришел 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
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 основан на двух основных принципах:
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.
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 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 и т. д.
Тема Содержит любые стили, связанные с тематикой.
Здесь слишком много подробностей, но обратите внимание на и другие:
Гарри Робертс (CSS Wizardry)
Определяет глобальное пространство имен и каскад и помогает поддерживать низкую специфичность селекторов.
Состав
Первые два применимы только в том случае, если вы используете препроцессор.
Обычно я делаю так:
<link rel = "stylesheet" href = "css/style.css">В style.css я @import:
@import url(colors.css);
@import url(grid.css);
@import url(custom.css); + some more files (if needed)
В colors.css я @import следующее (при использовании настраиваемых свойств CSS):
@import url(root/variable.css);
Все в порядке и легко получить любую часть кода для редактирования. Буду рад, если это как-то поможет.
отличный вопрос, дал отличные ответы. Нашел много полезного. Спасибо.