text-overflow:ellipsis; só funciona quando o seguinte for verdadeiro:
- A largura do elemento deve estar restrita em
px(pixels). A largura em %(porcentagem) não funcionará.
- O elemento deve ter
overflow:hiddene white-space:nowrapdefinir.
A razão que você está tendo problemas aqui é porque a widthdo seu aelemento não é restrito. Você tem uma widthconfiguração, mas como o elemento está definido como display:inline(por exemplo, o padrão), ele está ignorando e nada mais está restringindo sua largura.
Você pode corrigir isso seguindo um destes procedimentos:
- Defina o elemento como
display:inline-blockou display:block(provavelmente o primeiro, mas depende das suas necessidades de layout).
- Defina um de seus elementos de contêiner para
display:blocke dê a ele um elemento fixo widthou max-width.
- Defina o elemento como
float:leftou float:right(provavelmente o primeiro, mas, novamente, qualquer um deve ter o mesmo efeito no que diz respeito às reticências).
Eu sugiro display:inline-block, pois isso terá o mínimo impacto colateral no seu layout; funciona muito parecido com o display:inlineque está usando atualmente no que diz respeito ao layout, mas fique à vontade para experimentar também os outros pontos; Tentei fornecer o máximo de informações possível para ajudar você a entender como essas coisas interagem; uma grande parte do entendimento de CSS é entender como vários estilos funcionam juntos.
Aqui está um trecho com seu código, com um display:inline-blockadicionado, para mostrar o quão perto você estava.
.app a {
height: 18px;
width: 140px;
padding: 0;
overflow: hidden;
position: relative;
display: inline-block;
margin: 0 5px 0 5px;
text-align: center;
text-decoration: none;
text-overflow: ellipsis;
white-space: nowrap;
color: #000;
}
<div class="app">
<a href="">Test Test Test Test Test Test</a>
</div>
Referências úteis: