Какова наилучшая практика для именования и обрезания многословных CSS-классов и идентификаторов?

Я пытаюсь выяснить, что является лучшей практикой для именования и классов css css и идентификаторов, особенно нескольких имен слов.

Так, например, скажем, у меня есть <div>, который я хочу назвать "навыками персонажа". Кажется, есть 3 варианта: "characterskills", "character_skills" или "character-skills".

Какой из них является отраслевым стандартом для именования классов css и идентификаторов?

Какая наилучшая практика для разделения нескольких слов в именах css?

Также лучше всего использовать все строчные буквы для имен css, потому что они не чувствительны к регистру?

Ответы

Ответ 1

Я также предпочитаю использовать дефисный стиль. В основном я использую этот стиль, поскольку свойства CSS следуют за одним и тем же корпусом. Аналогично, функции и переменные JavaScript имеют тенденцию использовать более низкий случай верблюда. Например, чтобы изменить свойство CSS в JavaScript, введите object.style.textDecoration, но в CSS это свойство будет изменено с помощью text-decoration.

Ответ 2

Я использую lowerCamel для имен классов и UpperCamel для идентификаторов. Это очень важно, и я избиваю этот старый ответ, потому что ИМО дефисный стиль должен быть обескуражен, даже подчеркивание лучше, чем дефис.

Почему? Потому что у каждого другого языка не могут быть имена переносимых переменных. Например, ваша среда IDE может или не может автоматически выполнить автозаполнение. (Моя IDE не может, это VI: P)

CSS, тесно связанный с JavaScript, дефиснозначное имя класса также затрудняет взаимодействие с JavaScript. Рассмотрим следующий (надуманный) jQuery:

// For each of the following class, perform a function
var funcs = 
{
    main: function(){ /* ... */},
    toolbar: function(){ /* ... */ },

    // Oops, need to use a quote because there this hyphenated name
    'customer-info': function(){ /* ... */ }
};

// Woot, a O(n^2) function
for(var className in funcs)
{
    var func = funcs[className];
    // maybe if we named it $('#some-selector')? The hyphen suddenly feels 
    // like some kind of operator to me. Makes me nervous :/
    $('#SomeSelector div').each(function()
    {
        if($(this).hasClass(className)) func();
    });
}

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

Правильный (да?) способ представления пространства - это подчеркивание. Рассмотрим эту фразу "самопринятое письмо", как я могу преобразовать пробелы?

  • a_self-address_letter (правильно, сохраняет исходное значение)
  • a-self-address-letter (ох! если мы его перевернем, мы получим "самопринятое письмо"!)

Также лучше всего использовать все строчные буквы для имен css, потому что они не чувствительны к регистру?

Я думаю, в этом случае лучше всего использовать PascalCasing, потому что это помогает читаемости.

Ответ 3

Я лично использую дефисный стиль (т.е. some-class), но вы должны просто выбрать то, что считаете лучшим, и быть последовательным. Это чисто проблема эстетики.

Ответ 4

Я вижу следующие стили корпуса:

characterSkills, CharacterSkills

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

Ответ 5

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

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

Ответ 6

Я использую lowerCamelCase для классов и UpperCamel для идентификаторов, например:

#HeaderLogo { ... }
.pullQuote { ... }

Но это действительно не имеет никакого значения, пока вы последовательны:) О, и старайтесь придерживаться одноклассных имен классов, где это возможно - вы всегда можете комбинировать классы, например:

.boxout { border: 1px solid; padding: 10px; }
.emphasised { font-weight: bold; }
.subtle { font-size: small; }

.boxout.emphasised { background: yellow; }
.boxout.subtle { color: gray; }

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

Ответ 7

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

  • Используйте дефисы для отображения иерархии, например. #products-MainContent {} или #maincontent-Summary {}. Для меня это означает, что MainContent является дочерним элементом продукта div.
  • Заглавные буквы каждого слова после первого элемента в иерархии для идентификаторов. Используйте все строчные буквы для классов, например. #summary-Statistics (ID) или .summary-statistics (класс)

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