Соглашения CSS / Модели макета кода

Были ли попытки создания формализованного метода организации кода CSS? Прежде чем я пойду и придумываю свою собственную стратегию по обеспечению читабельности, мне интересно, что еще там есть. Google не очень помог, так как я не совсем уверен, по каким терминам искать.

Я больше думаю о строках отступов / интервалов, о том, когда использовать новые строки, соглашениях об именах и т. Д.

Любые идеи?


person Wilco    schedule 21.11.2008    source источник


Ответы (5)


Натали Даун, известная как ClearLeft, создала действительно отличное слайд-шоу, охватывающее эту тему и многое другое http://natbat.net/2008/Sep/28/css-systems/

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

person Andy Ford    schedule 21.11.2008
comment
Мне это нравится. Натали, по сути, изложила то, чего я пытался достичь годами. Большая проблема - заставить коллег согласиться с этим ... - person Ryan Kinal; 01.10.2010
comment

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

Метод, который я выбрал, - использовать все строчные классы и идентификаторы с подчеркиванием, разделяющим слова (например, #page_container). Сначала я объявляю все свои стили тегов (html, body, ul и т. Д.), А затем все классы и идентификаторы, отсортированные по алфавиту. Кроме того, все стили, определенные в каждом классе, идентификаторе или теге, также определены в алфавитном порядке. Использование этого соглашения упрощает отслеживание определенного стиля.

Для форматирования я всегда сжимаю его как можно меньше, но все же разборчиво. Я помещаю все в одну строку с соответствующим белым пространством. Если у вас есть Visual Studio, вы можете указать этот формат, и он будет автоматически отформатирован для вас (для стиля выберите Компактные правила в разделе Инструменты, Параметры, Текстовый редактор, CSS, Формат ).

Соглашения об именах здесь чрезвычайно субъективны, но следует помнить о том, чтобы называть элементы по их прямому назначению, а не по их стилизованному значению. Например, если у вас есть слоган компании, который вы хотите использовать большим красным шрифтом, назовите id #slogan вместо #red_bold.

Вот полный пример, чтобы дать вам представление:

body { background-color: #fff; color: #999; font-family: verdana, arial, helvetica, sans-serif; font-size: 76%; padding: 0; margin: 0; }
a { color: #2c5eb4; text-decoration: none; }
a:hover { text-decoration: underline; }
h1, h2, h3, h4, h5, h6 { color: #f70; font-family: helvetica, verdana, arial, serif; font-weight: bold; margin: 1.2em 0; }
h1 { font-size: 2.4em; line-height: 1.2em;  margin-bottom: 0em; margin-top: 0em; }
h2 { font-size: 1.7em; }
h3 { font-size: 1.4em; }
h4 { font-size: 1.2em; font-weight: bold; }
h5 { font-size: 1.0em; font-weight: bold; }
h6 { font-size: 0.8em; font-weight: bold; }
img { border: 0; }
li, ol, ul { font-size: 1.0em; line-height: 1.8em; list-style-position: inside; margin-bottom: 0.1em; margin-left: 0; margin-top: 0.2em; }
#content { clear: both; margin: 0; margin-top: -4em; }
#columns { height: 36em; }
#column1, #column2, #column3, #column4 { border-right: 1px solid #dbdbdb; float: left; width: 18%; margin: 0 0.5em; padding: 0 1em; height: 100%; }
#column1 { width: 28%; }
#column1 input { float: right; }
#column1 label { color: #999; float: left; }
#column2 a, #column3 a { font-weight: bold; }
#column4 { border-right: 0; }
#form { margin: 0 2em; }
.help_button { float: right; text-align: right; width: 30px; }
person cowgod    schedule 21.11.2008
comment
Чтобы не оскорблять ваш стиль программирования - он работает на вас, а это главное, - но я всегда ненавидел стиль "все на одной линии". Я нахожу это действительно нечитаемым. В программировании существует соглашение, согласно которому одна строка кода должна делать одно - сделать вещи удобочитаемыми. Что лежит в основе стиля "все на одной линии"? - person Paul D. Waite; 12.02.2010
comment
@Paul D. Waite Наличие всех стилей в одной строке позволяет уменьшить размер файла, но при этом достаточно разборчиво, чтобы работать с ним, когда это необходимо. В идеале у вас должен быть некоторый процесс сборки, который еще больше сжимает его при производстве, но этот метод является хорошим балансом между двумя методами (полностью сжатый по сравнению с одним свойством стиля на строку). - person cowgod; 15.02.2010
comment
О боже, да, процесс сборки. Компьютеры существуют для того, чтобы люди выполняли меньше работы, а не больше. YUI Compressor делает ваши файлы без gzip как можно меньше, а сжатие gzip (которое ваш сервер, вероятно, уже делает) само по себе в 3 или 4 раза эффективнее, чем YUI Compressor. Сделать ваш код менее читабельным - неправильный способ уменьшить размер файлов, доставляемых конечному пользователю. - person Paul D. Waite; 16.02.2010

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

el {
    display:;
    float:;
    clear:;
    visibility:;
    position:;
    top:;
    right:;
    bottom:;
    left:;
    z-index:;
    width:;
    min-width:;
    height:;
    min-height:;
    overflow:;
    margin:;
    padding:;
    border:;
    border-top:;
    border-right:;
    border-bottom:;
    border-left:;
    border-width:;
    border-top-width:;
    border-right-width:;
    border-bottom-width:;
    border-left-width:;
    border-color:;
    border-top-color:;
    border-right-color:;
    border-bottom-color:;
    border-left-color:;
    border-style:;
    border-top-style:;
    border-right-style:;
    border-bottom-style:;
    border-left-style:;
    border-collapse:;
    border-spacing:;
    outline:;
    list-style:;
    font:;
    font-family:;
    font-size:;
    line-height:;
    font-weight:;
    text-align:;
    text-indent:;
    text-transform:;
    text-decoration:;
    white-space:;
    vertical-align:;
    color:;
    opacity:;
    background:;
    background-color:;
    background-image:;
    background-position:;
    background-repeat:;
    cursor:;
    }

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

Я использовал табуляцию отступов объявлений css, чтобы максимально соответствовать моим отношениям родитель / потомок html, но я больше этого не делаю. Функция группировки в CSSEdit помогает значительно снизить искушение сделать это.

В CSS действительно нет какого-либо предписанного соглашения о структуре кода. Итак, все сводится к тому, что лучше всего подходит для вас.

person Andy Ford    schedule 21.11.2008
comment
Я тоже в значительной степени использую этот порядок, хотя я кладу background-color и color рядом друг с другом и помещаю их сразу после заполнения. Забавные привычки, которые у тебя есть. Я слышал, что поддержание последовательного порядка в таблице стилей может помочь сжатию gzip, которое ищет повторяющиеся строки. Если в разных местах используются одни и те же стили, следите за тем же порядком, это означает, что они лучше сжимаются с помощью gzip. - person Paul D. Waite; 12.02.2010

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

person Tsundoku    schedule 21.11.2008

Файлы должны быть модульными, чтобы вы могли использовать @imports. Обычно у меня есть файл base.css для базовых классов (таких как типографика и цвета). В зависимости от структуры вашего сайта может быть полезно также иметь другие «частичные элементы» CSS для повторного использования во всех таблицах стилей, ориентированных на пользователя. Эти дочерние таблицы стилей могут расширять базовые стили с большей степенью детализации по мере необходимости (например, .warn {color:red;} может быть расширен на p.warn {font-style:italic;} или h1.warn {border:5px solid red;}), что является отличным шаблоном проектирования для реализации так называемого объектно-ориентированный CSS.

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

В сложных селекторах я перечисляю каждый селектор в алфавитном порядке.

Если по какой-то причине я не могу использовать Sass, я могу имитировать его шаблон вложения (я Я все еще не уверен, работает это или нет), вот так:

@import url('/css/base.css');

a {
  color:#369;
  font-family: Helvetica, sans-serif;
  font-weight: bold;
  text-decoration: underscore; }
  a img {
    border: 0; }

blockquote, .nav, p {
  margin-bottom: 10px; }
blockquote {
  background: #eee;
  padding: 10px; }

h1, h2, h3, h4 {
  font-family: Georgia, serif; }
h1.warning {
  border: 5px solid red; }

.nav a {
  font-size: 150%;
  padding: 10px; }
.nav li {
  display: inline-block; }

p.warning {
  font-style: italic; }
  p.warning a {
    background: #fff;
    border-bottom: 2px solid #000;
    padding: 5px; }
  p.warning .keyword {
    text-decoration: underline; }

К сожалению, вы можете искать запас для p и не осознавать, что это часть blockquote, .nav, p. Это тоже не очень «объектно-ориентированный» дизайн, но он, возможно, лучше, чем помещать строки классов практически в каждый элемент, требующий стилизации.

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

person David Rivers    schedule 01.10.2010