Você pode ter visto essa técnica antes de alinhar horizontal e verticalmente um ícone …
.icon {
position: absolute;
top: 50%;
left: 50%;
width: 100px;
height: 100px;
background: #000;
margin-left: -50px;
margin-top: -50px;
}
Essa técnica é adequada, mas usa muitas propriedades que dependem da largura e da altura (ou seja, as margens negativas). Na verdade, isso pode ser evitado mudando a maneira como você o faz …
.icon {
position: absolute;
top: 0; right: 0; bottom: 0; left: 0;
margin: auto;
width: 20px;
height: 20px;
background: #000;
}
Esta é uma opção muito mais limpa, que permitirá abstrair as primeiras 3 linhas para todos os ícones centralizados. Ele funciona estendendo-se até as bordas, então, contanto que haja largura e altura explícitas, ele utilizará a margem automática para centralizar o conteúdo real.
Veja este exemplo se você gosta de: http://codepen.io/joecritch/full/FwftG