Overflow a sinistra invece che a destra


105

Ho un div con overflow:hidden, all'interno del quale mostro un numero di telefono mentre l'utente lo digita. Il testo all'interno del div è allineato a destra e i caratteri in arrivo vengono aggiunti a destra man mano che il testo cresce a sinistra.

Ma una volta che il testo è abbastanza grande da non rientrare nel div, gli ultimi caratteri del numero vengono automaticamente ritagliati e l'utente non può vedere i nuovi caratteri che digita.

Quello che voglio fare è ritagliare i caratteri di sinistra, come se il div mostrasse il contenuto più a destra e traboccasse sul lato sinistro. Come posso creare questo effetto?

numero di telefono traboccante a sinistra


Per chiunque cerchi di far scorrere il testo dall'alto in basso e allineato a destra, controlla stackoverflow.com/a/53576895/4418836
Jordan

Risposte:


149

Hai provato a utilizzare quanto segue:

direction: rtl;

Per ulteriori informazioni, vedere
http://www.w3schools.com/cssref/pr_text_direction.asp


22
Attenzione: questo non funziona per il display di una calcolatrice con caratteri speciali come / e *.
Max

11
Inoltre non funziona per le impostazioni locali con formattazione numerica non statunitense, come "" per mille separatori. Questa non è la soluzione corretta
Robert Slaney

12
Questa proprietà non è pensata per l'allineamento e cambierà anche l'ordine delle parole all'interno. Fe 14:00–15:00si rivolgerà a 15:00–14:00in Firefox.
Andy

3
Anche questo non inverte l'ordine dei personaggi?
evolutionxbox

7
Sì, è necessario avvolgere gli elementi contenuti in un altro elemento con direction: ltrregola per invertire l'effetto.
Óscar Gómez Alcañiz

56

Ho avuto lo stesso problema e l'ho risolto utilizzando due div. Il div esterno esegue il ritaglio a sinistra e il div interno esegue il galleggiamento a destra.

.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>

Dovresti essere in grado di inserire qualsiasi contenuto all'interno del div interno e riempirlo a sinistra.


8
Volevo vederlo funzionare, quindi ho creato questo JSFiddle per testarlo e funziona alla grande! Bella risposta! Grazie!
WebWanderer

4
Questa è un'ottima risposta in quanto la direzione rtl ha tutti i tipi di effetti collaterali. Se vuoi assicurarti che il div interno sia allineato a sinistra e troncato a sinistra solo se il div viene superato, imposta .outer-div su max-width: 100% e visualizza: inline-block. Vedi qui
Luca

2
Grazie per il JSFiddle WebWanderer. L'ho aggiornato in overflow: visiblemodo che il contenuto possa fuoriuscire dal lato sinistro .
joeytwiddle

8

Puoi farlo float:righte andrà in overflow a sinistra, ma nel mio caso ho bisogno di centrare il div se la finestra è più grande dell'elemento, ma overflow a sinistra se la finestra è più piccola. Qualche idea su questo?

Ho provato a giocarci direction:rtlma questo non sembra cambiare l'overflow degli elementi del blocco.

Penso che l'unica risposta sia fluttuare a destra, con un div a destra che è anche fluttuato a destra, quindi impostare la larghezza del div a destra a metà dello spazio rimanente della finestra con jquery.


Essere d'accordo. Muovi il genitore a destra e assicurati che nessun contenitore intermedio abbia overflow impostato su nascosto.
Lisa

8

Facilissimo, <span>i numeri e posizionano lo span assoluto a destra all'interno di un elemento con overflow nascosto.

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

:)

rgrds jake


5

Questo ha funzionato come un fascino:

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

0

Markup HTML modificato e aggiunto un po 'di javascript alla soluzione jsFiddle di WebWanderer.

https://jsfiddle.net/urulai/bfzqgreo/3/

HTML:

<div id="outer-div">

    <p>ipsum dolor amet bacon venison porchetta spare ribs, tongue turducken alcatra doner leberkas t-bone rump ball tip hamburger drumstick. Shoulder strip steak ribeye, kielbasa fatback pig kevin drumstick biltong pork short loin rump. Biltong doner ribeye, alcatra landjaeger tenderloin drumstick t-bone pastrami andouille. Sirloin spare ribs fatback, bresaola strip steak alcatra landjaeger kielbasa cupim doner. </p>

</div>

CSS:

#outer-div {
  width:100%;
  margin-left:auto;
  margin-right:auto;
  text-align:right;
  overflow:hidden;
  white-space: nowrap;
  border:1px solid black;
}

JS:

let outer = document.getElementById("outer-div");
outer.scrollLeft += outer.scrollWidth;
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.