Um ein Element in einem anderen Element zu horizontal zu zentrieren kann man, sofern man die Breite angeben kann, margin: 0 auto; oder margin: auto; verwenden.

Um das Element horizontal zu zentrieren wird schon schwieriger.

 

Noch schwieriger wird es wenn die Breite und oder die Höhe dynamisch ist. 

Mit einem Ghost:before Element fuktioniert das perfekt:

/* This parent can be any width and height */
.parent {
  text-align: center;
  /* May want to do this if there is risk the container may be narrower than the element inside */
  white-space: nowrap;
}
/* The ghost, 4 perfect centering */
.parent:before {
  content: '';
  display: inline-block;
  height: 100%;
  vertical-align: middle;
  margin-right: -0.25em; /* Adjusts for spacing */
}
/* The element to be centered, can also be of any width and height */
.centered {
  display: inline-block;
  vertical-align: middle;
  /* width: 300px; */
}