2008-10-20 20 views
71

Tengo un div con overflow:hidden, dentro del cual muestro un número de teléfono a medida que el usuario lo escribe. El texto dentro del div se alinea a la derecha y los caracteres entrantes se agregan a la derecha a medida que el texto crece a la izquierda.Desbordamiento a la izquierda en lugar de a la derecha

Pero una vez que el texto es lo suficientemente grande como para no caber en el div, los últimos caracteres del número se recortan automáticamente y el usuario no puede ver los nuevos caracteres que escribe.

Lo que quiero hacer es recortar los caracteres de la izquierda, como que el div muestra el extremo derecho de su contenido y se desborda hacia el lado izquierdo. ¿Cómo puedo crear este efecto?

overflowing phone number to left

Respuesta

113

¿Ha intentado utilizar el siguiente:

direction: rtl; 

Para obtener más información, véase
http://www.w3schools.com/cssref/pr_text_direction.asp

+14

Advertencia: esto no funciona para una pantalla de la calculadora con caracteres especiales como/y *. – Max

+7

Tampoco funciona para configuraciones regionales con formato de número que no sea de EE. UU., Como "" para separador de miles. Esta no es la solución correcta –

+7

Esta propiedad no está pensada para la alineación, y también cambiará el orden de las palabras en el interior. F.e. '14: 00-15: 00' cambiará a' 15: 00-14: 00' en Firefox. – Andy

5

fácil de hacer, <span> el número y la posición de la duración absoluta a la derecha dentro de una elemento con desbordamiento oculto.

<div style="width: 65px; height: 20px; 
      overflow: hidden; position: relative; background: #66FF66;"> 
    <span style="position: absolute; right: 0;">05451234567</span> 
</div> 

:)

rgrds Jake

5

Usted puede hacer float:right y va a desbordar por la izquierda, pero en mi caso tengo que centrar la div si la ventana es más grande que el elemento , pero se desborda hacia la izquierda si la ventana es más pequeña. ¿Alguna idea sobre eso?

He intentado jugar con direction:rtl pero eso no parece cambiar el desbordamiento de los elementos del bloque.

Creo que la única respuesta es flotar bien, con un div a la derecha del mismo que también está flotado a la derecha, luego establecer el ancho del div a la derecha a la mitad del espacio de la ventana restante con jquery.

+0

De acuerdo. Haga flotar a los padres a la derecha y asegúrese de que ningún contenedor intermedio tenga el desbordamiento establecido en oculto. – Lisa

42

Tuve el mismo problema y lo resolví usando dos divs. El div externo hace el recorte a la izquierda y el div interno lo hace a la derecha.

.outer-div { 
    width:70%; 
    margin-left:auto; 
    margin-right:auto; 
    text-align:right; 
    overflow:hidden; 
    white-space: nowrap; 
} 

.inner-div { 
    float:right; 
} 

: 

<div class="outer-div"> 
    <div class="inner-div">  
    <p>A very long line that should be trimmed on the left</p> 
    </div> 
</div> 

Debería poder colocar cualquier contenido dentro del div interno y desbordarlo a la izquierda.

+5

Quería ver que esto funcionara, así que hice [** este JSFiddle **] (https: // jsfiddle.net/WebWanderer/375fmu1q /) para probarlo y funciona muy bien! ¡Gran respuesta! ¡Gracias! – WebWanderer

+2

Esta es una gran respuesta ya que la dirección rtl tiene todo tipo de efectos secundarios. Si desea asegurarse de que el div interno se alinea a la izquierda y solo se trunca a la izquierda si se excede el div, configure el .outer-div en max-width: 100% y muestre: inline-block. Ver [aquí] (https://jsfiddle.net/jew4zfyk/) – Luke

+0

Gracias por JSFiddle WebWanderer. Lo actualicé para usar 'overflow: visible' para que el contenido pueda [filtrarse fuera del lado izquierdo] (https://jsfiddle.net/375fmu1q/22/). – joeytwiddle

1

Esto funcionó como un encanto:

<div style="direction: rtl;"> 
    <span style="white-space: nowrap; direction: ltr; display: inline-block;">your short or long comment<span> 
</div> 
Cuestiones relacionadas