Как выровнять текст по вертикали?
Не слушай никого. Типичные вещи CSS Не знают.div:before {
    content: "";
    padding-top: 100%;
    display: inline-block;
    vertical-align: middle;
}
Для родительского блока:display:table;
Для вложенного блока: display:table-cell; 
vertical-align:middle;
text-align:center;
Есть еще такая крутая вещь, как Flexbox, почитайте о ней.