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:hidden
e white-space:nowrap
definir.
A razão que você está tendo problemas aqui é porque a width
do seu a
elemento não é restrito. Você tem uma width
configuraçã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-block
ou display:block
(provavelmente o primeiro, mas depende das suas necessidades de layout).
- Defina um de seus elementos de contêiner para
display:block
e dê a ele um elemento fixo width
ou max-width
.
- Defina o elemento como
float:left
ou 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:inline
que 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-block
adicionado, 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: