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

Управление 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 ]

4 голосов
/ 26 октября 2015

Основные принципы разумного CSS, извлеченные из Рефакторинг CSS: от дополнения до модульного CSS

Напишите в SASS. Вы бы сошли с ума, отказавшись от преимуществ переменных, миксинов и т. Д.

Никогда не используйте HTML ID для стилизации; всегда используйте классы . HTML-идентификаторы при правильном использовании появляются только один раз на всей странице, что является полная противоположность повторного использования - один из самых основных товаров в разумная инженерия. Кроме того, действительно трудно переопределить селекторы содержащие идентификаторы, и часто единственным способом преодолеть один HTML-идентификатор является создать другой идентификатор, в результате чего идентификаторы будут распространяться в кодовой базе, как это вредители Лучше оставить идентификаторы HTML для неизменного Javascript или интеграционные тестовые зацепы.

Назовите ваши классы CSS по их визуальной функции, а не по их специфической для приложения функции. Например, скажите «.highlight-box» вместо ".bundle-product-discount-box". Кодирование таким способом означает что вы можете повторно использовать существующие таблицы стилей, когда вы разыгрываете побочные предприятия. Например, мы начали продавать юридические заметки, но недавно перешел в преподаватели юриспруденции. У наших старых CSS-классов были такие имена, как ".download_document_box", имя класса, которое имеет смысл при разговоре о цифровых документах, но будет только путать применительно к новым домен частных репетиторов. Лучшее название, которое подходит как для существующих услуги - и любые будущие - будут ".pretty_callout_box".

Избегайте именования классов CSS после конкретной информации о сетке. В сообществах CSS был (и есть) ужасный анти-паттерн, из-за чего дизайнеры и создатели CSS-фреймворков (кашель Twitter Bootstrap ) считаю, что "span-2" или "cols-8" являются разумными именами для CSS классы. Смысл CSS в том, чтобы дать вам возможность изменить Ваш дизайн, не влияя на разметку (много). Жесткое кодирование сеток размеры в HTML мешает достижению этой цели, поэтому рекомендуется в любом Ожидается, что проект продлится дольше выходных. Подробнее о том, как мы избежали классы сетки позже.

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

Минимизация вложенности. Введение новых классов вместо вложенных селекторов. Тот факт, что SASS снимает боль повторяющихся селекторов когда вложение не означает, что вы должны вложить пять уровней вглубь. Никогда не преувеличивайте селектор (например, не используйте "ul.nav", где ".nav" может сделать ту же работу.) И не указывайте элементы HTML рядом с пользовательское имя класса (например, "h2.highlight"). Вместо этого просто используйте класс одно имя и отбросьте базовый селектор (например, предыдущий пример должно быть ".highlight"). Сверхквалификационные селекторы не добавляют значение.

Создавайте стили для элементов HTML (например, "h1") только при стилизации базовых компонентов, которые должны быть согласованы во всем приложении. Избегайте широких селекторов, таких как "заголовок ул", потому что, вероятно, вы все равно придется их переопределить в некоторых местах. Как мы постоянно говорим, большинство времени, когда вы хотите использовать определенный, хорошо названный класс, когда вы хочу особый стиль.

Охватите основы Block-Element-Modifier. Вы можете прочитать об этом, например, здесь. Мы использовали это довольно легко, но все же это помогло нас много в организации стилей CSS.

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

Часто я вижу, как люди разбивают файл на разделы с заголовком комментария между разделами.

Что-то вроде

/* Headings and General Text */

.... stuff here for H1, etc..

/* Main page layout */

.... stuff here for layout page setup etc.

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

1 голос
/ 23 июля 2015

Вы должны посмотреть на БЭМ .

Theory

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

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

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

BEM хорошо работает с SASS, чтобы привнести в CSS почти объектно-ориентированный стиль. Вы можете создавать модульные файлы, которые обрабатывают отображение одного элемента пользовательского интерфейса и содержат переменные, такие как цвета и «методы», например, как обрабатываются внутренние элементы. Хотя хардкорный ОО-программист может отказаться от этой идеи, на самом деле, применяемые концепции привносят множество более приятных частей ОО-структур, таких как модульность, слабая связь и тесная связь, а также возможность повторного использования без контекста. Вы даже можете создать способ, который выглядит как инкапсулированный объект, используя Sass и & operato r.

Более подробную статью из журнала Smashing Magazine можно найти здесь ; и один из Гарри Робертса из CCS Wizardry (который должен прочитать каждый, кто связан с css) здесь .

На практике

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

Когда я использую БЭМ в реальном мире, я дополняю технику парой дополнительных принципов. Я использую служебные классы - хороший пример - класс-оболочка:

.page-section {
    width: 100%;
}
@media screen and (min-width: 1200px) {
    margin: 0 auto;
    width: 1200px;
}

И я также несколько полагаюсь на каскад и специфику. Здесь модуль БЭМ будет .primary-box, а .header будет контекстом для конкретной перегрузки

.header {
  .primary-box {
    color: #000;
  }
}

(я изо всех сил стараюсь сделать все как можно более универсальным и контекстно-свободным, что означает хороший проект, почти все в модулях, которые можно использовать повторно)

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

  • проекты усложняются, поэтому важно заложить хорошую основу, включая css
  • даже проект, который кажется простым, потому что он построен на WordPress с небольшим JavaScript, все еще может быть очень сложным в CSS - ОК, вам не нужно делать никакого кодирования на стороне сервера, так что эта часть проста, но брошюра У фронтэнда Wear есть двадцать модулей и три варианта каждого: у вас там очень сложный CSS!

Веб-компоненты

В 2015 году мы начинаем изучать веб-компоненты. Я пока не знаю об этом огромном количестве, но они стремятся объединить все функциональные возможности внешнего интерфейса в автономные модули, эффективно пытаясь применить принципы BEM к внешнему интерфейсу в целом и разбросать компоненты, но полностью связанные друг с другом такие элементы, как фрагменты DOM, Js (MVC) и CSS, которые создают один и тот же виджет пользовательского интерфейса.

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

Здесь есть дальнейшее чтение здесь , а также каркас Полимер здесь , который стоит посмотреть

Наконец

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

0 голосов
/ 17 апреля 2012

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

таким образом вы получаете лучшее из обоих миров, повышаете производительность (меньше запросов HTTP запрашивается из браузера) и разделяете проблемы кода при разработке.

0 голосов
/ 16 февраля 2011

Я бы порекомендовал вам взглянуть на "Компас Стиль" CSS рамки .

...