Нерабочие margin?
В примере ниже находится блок .block фиксированной высоты, а в нём – прямоугольник .spacer.
При помощи margin-left: 20% и margin-right: 20%, прямоугольник центрирован в родителе по горизонтали. Это работает.
Далее делается попытка при помощи свойств height: 80%, margin-top: 10% и  margin-bottom: 10% расположить прямоугольник в центре по вертикали, чтобы сам элемент занимал 80% высоты родителя, а сверху и снизу был одинаковый отступ.
Однако, как видите, это не получается. Почему? Как поправить?
<style>
  .block {
    height: 150px;
    border: 1px solid #CCC;
    background: #eee;
  }
  .spacer {
    margin-left: 20%;
    margin-right: 20%;
    height: 80%;
    margin-top: 10%;
    margin-bottom: 10%;
    border: 1px solid black;
    background: #FFF;
  }
</style>
<div class="block">
  <div class="spacer"></div>
</div>Ошибка заключается в том, что margin при задании в процентах высчитывается относительно ширины. Так написано в стандарте.
При этом не важно, какой отступ: левый, правый. верхний или нижний. Все они в процентах отсчитываются от ширины. Из-за этого и ошибка.
Ситуацию можно исправить, например, заданием margin-top/margin-bottom в пикселях, если это возможно или, в качестве альтернативы, использовать другие средства, в частности, position или padding-top/padding-bottom на родителе.