Лучше создать набор CSS классов для сетки или стилизовать каждый блок сайта отдельно?
Тут нет однозначного ответа, оба варианта возможны в зависимости от ситуации.
Практика показывает, что первый вариант чаще подходит к сайтам, которые собираются из множества кирпичей как конструктор и вариаций сочетаний этих кирпичей очень много (например, админки).
Для сайтов с более-менее уникальным дизайном чаще лучше второй подход, потому что ну не бывает сложных дизайнов, которые полностью можно было бы описать 12-ю равными колонками. Хотя под капотом там всё равно обычно присутствуют некоторые элементы первого подхода, только в виде миксинов.
Для глобальной сетки (взаиморасположение крупных блоков верхнего уровня) можно создать свой блок .container, который будет центровщиком, а в разметке его примиксовывать или делать блоком оберткой (когда есть фон на 100%):<div class="features  container">
    Some content
</div>

<div class="features">
    <div class="container">
      <section class="features__element">
          some content
      </section>
      <section class="features__element">
          some content
      </section>
    </div>
</div>
Затем, блокам сетки задать правила для адаптивности. Например…// Каскад от Мобильных к Десктопам

.container {
	width: 280px;
	padding: 0 20px; 
}

@media (min-width: 768px) {
	.container {
		width: 640px; 
		padding: 0 60px; 
	}
}

@media (min-width: 1200px) {
	.container {
		width: 960px; 
		padding: 0 100px; 
	}
}
Более мелкие блоки сетки — колонки, можно прописывать в файле конкретного блока, а если расположение колонок часто повторяется, то как элемент блока сетки.