Например у меня есть кнопка и я получается должен присвоить три класса, первый - это внешний вид, второй - это размеры(блока или элемента), третий это отступы?
Вы не верно поняли БЭМ. Должно быть иначе.
Допустим, у вас есть блок с формой (например, с классом "form"), у блока есть дочерний элемент в виде кнопки. Тогда по БЭМ, у кнопки будет класс "form__button" (блок__элемент).
Допустим, в форме несколько кнопок, стандартные и "большие". Тогда для "большой" кнопки добавляем класс "form__button--large" (блок__элемент--модификатор). А в селекторе "form__button--large" пишем нужные свойства.
Сама кнопка будет иметь уже два класса, типа
<button class="form__button form__button--large"></button>
Допустим, у больших и стандартных кнопок часть будут "зелеными". Тогда для "зеленых" кнопок добавляем класс "form__button--green".
В таком случае часть стандартных кнопок будут иметь такой вид
<button class="form__button form__button--green"></button>
а часть "больших" будет выглядеть так
<button class="form__button form__button--large form__button--green"></button>
В Модификаторе можно прописывать любое свойство Элемента (размер, цвет, позиция и т.д.), но только когда нам нужно модифицировать какой-то уже имеющийся элемет. Специально разбивать свойства на разные селекторы (как в вашем примере) не имеет смысла, тем более если элемент один.