Нужно ли давать каждому блоку display: flex;?
flexbox.help
Экспериментируйте.
Для выравнивания есть свойства justify-content и align-items.
Для дочерних элементов используются flex-grow, align-self, order
Назначать flex дочернему блоку нужно только тогда, когда он сам будет flex-контейнером.
>Если мне нужно выровнять лого и меню по flex я даю header display: flex; ?
Это не понял. А на последние два вопроса - да, плюс justify-content и align-items.