Повторно используемые классы CSS или их много?

#css #css-selectors

#css #css-селекторы

Вопрос:

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

 .padding5 {padding:5px;} 
.margin10 {margin:10px;} 
.left {float:left;}
.right {float:right;} 
  

Итак, ваш HTML-код выглядит следующим образом

 <div class="padding5 left"> ... </div>
  

Или, скорее, иметь явные классы для каждого элемента. т. е.

 .title-demo {padding:5px; float:left;}
  

с помощью HTML

 <div class="title-demo"> ... </div>
  

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

Просто интересно, что рекомендуют там гуру? Моя идея, по сути, заключается в создании «гибридного» решения, которое позволяет включать общий CSS в качестве «padding5» в сочетании с классами и т.д.?

Ответ №1:

НЕТ! Имена классов Css должны быть описательными и контекстуальными. Вы замыкаетесь в катастрофе сопровождения так, как вы это описываете. Что, если заполнение padding5 станет 10px позже? Представьте класс с именем «blue», цвет которого вы меняете на красный. В итоге у вас будет чертовски сложный веб-сайт для обслуживания.

Я предлагаю использовать именованные части вашего веб-сайта:

  #Agenda {
 }

 #Agenda .Item {
 }

 #Agenda .Item h1 {
 }
  

ОБНОВЛЕНИЕ после всех комментариев:

как насчет присвоения частям вашего сайта, имеющим общие свойства, концептуального имени -> SideBarItem , Acticle , ItemFooter , Widget ,,,,,,,,,,,. И тогда любой элемент вашего сайта получит класс для одной из именованных частей и некоторый дополнительный класс. <div class="Widget WeatherForecast"> и <div class="Widget CurrencyConverter"> класс Widget определяет общие свойства, а другой класс — специфические свойства.

 .Widget {
 padding: 10px;
 float: left;
 margin: 5px;
}

.WeatherForecast {
 background: red;
 color: white;
}

.CurrencyConverter {
 background: blue;
 color: black;
}
  

Комментарии:

1. конечно 🙂 но суть в том, что padding5 не изменится на padding10 ? 🙂 потому что padding10 уже есть ! и т.д. идея в том, что вы можете объединить 2 ? т. Е. Использовать padding5 там, где вам это нужно, без необходимости повторять это в каждом элементе ?

2. @Tom: Следуя этой логике, вы могли бы с таким же успехом просто использовать style атрибуты везде и вообще отказаться от таблицы стилей.

3. @Tom , пожалуйста, сегодня сделайте padding10, который на самом деле состоит из 5 пикселей отступа, в 7 пикселей отступа, и знаете что, пожалуйста, сделайте это в 7em отступа вместо 10 пикселей или 5 пикселей или ….. — Вы поймете мою точку зрения

4. но не совсем? если padding5 является общим элементом для всего сайта. зачем мне тогда повторять 50 раз, включая текст «padding: 5px;» в моем CSS? вместо этого просто добавьте другой HTML-класс к элементу?

5. @Tom, как насчет присвоения частям вашего сайта, имеющим общие свойства, концептуального названия -> SideBarItem, Acticle, ItemFooter, Widget. И тогда любой элемент на вашем веб-сайте получит класс для одной из именованных частей и некоторый дополнительный класс. <div class="Widget WeatherForecast"> и <div class="Widget CurrencyConverter"> класс Wdiget определяет общие свойства, а другой класс — специфические свойства.

Ответ №2:

Определенно позже. класс, подобный .padding5, действительно сводит на нет цель переноса объявлений стилей в таблицу стилей.

Ответ №3:

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

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

Ваше второе предложение — определенно правильный путь.

Ответ №4:

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

Системы CSS grid (например, http://960.gs ) сделайте это, потому что их стили достаточно сложны (особенно с учетом исправлений для Internet Explorer), и они предназначены для применения ко множеству различных элементов.

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

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