Лучшие практики - CSS Theming - PullRequest
27 голосов
/ 08 сентября 2010

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

  • расположение элементов
  • фоновые изображения контейнеров
  • размер шрифта, цвет

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

Мой список возможных практик приведен ниже:

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

РЕДАКТИРОВАТЬ: в соответствии с отличными ответами, представленными ниже, Я обновил список других возможных решений, добавив в мой список:

  1. Использование SASS , (лучше всего автор Compass @see AndrewVit ) особенно их особенность "Mixins".Это берет CSS и вводит очень СУХОЙ программный подход.Вы можете переопределить существующие классы с ним.- treefrog
  2. Использовать подход OOCSS .- Эндрю Вит
  3. Техника, называемая независимые блоки (статья на русском языке), которая имитирует своего рода пространство имен, используя префикс класса для разделения определенных блоков.- angryobject
  4. Три таблицы стилей на основе.Разделение типографии, позиции и таблицы стилей сброса предоставлено Eric Meyer .- Дэвид Томас
  5. Используйте уже стандартизированные подходы, используемые известными организациями, такими как библиотека Dojo, пользовательский интерфейс jQuery и т. Д.
    - S .Jones

Что было бы лучше в каком возможном случае?Существуют ли другие легко поддерживаемые и гибкие способы?

Лучший ответ на сегодняшний день: использование SASS для создания очень гибких таблиц стилей.Конечно, это подразумевает небольшую кривую обучения, но согласно нескольким обзорам, SASS, кажется, является следующим подходом для динамических таблиц стилей (наряду с HAML ).

Ответы [ 5 ]

8 голосов
/ 08 сентября 2010

Вы должны изучить SASS, в частности, их функцию "Mixins". Это берет CSS и вводит очень СУХОЙ программный подход. С его помощью вы можете переопределить существующие классы, что делает его идеальным для того, что, я думаю, вы пытаетесь сделать.

Ссылка

3 голосов
/ 09 сентября 2010

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

Это может сочетаться с некоторыми другими предложениями. (Я настоятельно рекомендую создавать SASS с Compass !)

2 голосов
/ 08 сентября 2010

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

  • Таблица стилей сброса (обычно Эрик Мейер )
  • Таблица стилей для позиционирования элементов (поля, отступы, поплавки и т. Д.)
  • Типография и цвета

В этом подходе очень много повторений, поэтому ответ @ treefrog вполне может быть лучшим подходом. Единственная изюминка, которую я могу предложить для моего подхода, поэтому он хорошо работает для меня, это то, что легко узнать, где можно изменить шрифт заголовка с Arial на Times New Roman (или любой другой), и где найти Фоновые цвета для страницы. Обычно они хранятся в Wordpress-подобном расположении:

http://www.example.com/css/reset.css http://www.example.com/css/themeName/typography.css http://www.example.com/css/themeName/layout.css

1 голос
/ 08 сентября 2010

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

<code><div class="b-my-block">
<span>some more content</span>
</div>

И стиль для этого блока:

.b-my-block{ width:100%; height:300px; }</p> <p>.b-my-block span{ background:red; }

'b' здесь - префикс для блока. Вы можете иметь разные префиксы для ваших нужд. Возможно, вы захотите использовать префикс «g» для некоторых глобальных классов, которые могут применяться и изменять любые другие элементы.

Затем, если вы хотите расширить этот блок или как-то изменить его, вы можете создать модификацию этого блока с помощью класса 'b-my-block_blue', например:

<code><div class="b-my-block b-my-block_blue">
<span>some more content</span>
</div>

и кусок css:

.b-my-block_blue span{ background:blue; }

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

1 голос
/ 08 сентября 2010

Хороший вопрос. + 1

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

Для более сложных тем, где изображения импортируются как ключевые части макета или темы, лучше полностью вкладывать ресурсы в тему. Вы можете увидеть примеры этого, изучив структуру каталогов пакетов Javascript, таких как Dojo , которые позволяют переключаться между несколькими темами. Если вы посмотрите структуры каталогов «Tundra» или «Soria» в библиотеке Dijit, вы увидите, какие «лучшие практики» они использовали для разделения своих CSS-файлов.

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