Débordement vers la gauche au lieu de la droite

105

J'ai un div avec overflow:hidden , à l'intérieur duquel j'affiche un numéro de téléphone au fur et à mesure que l'utilisateur le tape. Le texte à l'intérieur du div est aligné à droite et les caractères entrants sont ajoutés à droite à mesure que le texte se développe vers la gauche.

Mais une fois que le texte est assez grand pour ne pas tenir dans le div, les derniers caractères du nombre sont automatiquement rognés et l'utilisateur ne peut pas voir les nouveaux caractères qu'il tape.

Ce que je veux faire, c'est recadrer les caractères de gauche, comme si le div affiche le plus à droite de son contenu et déborde sur le côté gauche. Comment créer cet effet?

numéro de téléphone débordant à gauche

Serhat Ozgel
la source
Pour tous ceux qui essaient de faire en sorte que le texte soit aligné de haut en bas et aligné à droite, consultez stackoverflow.com/a/53576895/4418836
Jordan

Réponses:

149

Avez-vous essayé d'utiliser les éléments suivants:

direction: rtl;

Pour plus d'informations, consultez
http://www.w3schools.com/cssref/pr_text_direction.asp

Rob Bell
la source
22
Attention: cela ne fonctionne pas pour un affichage de calculatrice avec des caractères spéciaux comme / et *.
Max
11
Cela ne fonctionne pas non plus pour les paramètres régionaux avec un formatage numérique non américain, comme "" pour séparateur de milliers. Ce n'est pas la bonne solution
Robert Slaney
12
Cette propriété n'est pas destinée à l'alignement, et elle modifiera également l'ordre des mots à l'intérieur. Fe 14:00–15:00se tournera vers 15:00–14:00Firefox.
Andy
3
Cela n'inverse-t-il pas aussi l'ordre des personnages?
evolutionxbox
7
Oui, vous devez envelopper les éléments contenus dans un autre élément avec une direction: ltrrègle pour inverser l'effet.
Óscar Gómez Alcañiz
56

J'ai eu le même problème et je l'ai résolu en utilisant deux divs. La division externe effectue le découpage sur la gauche et la division interne fait le flottement vers la droite.

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

Vous devriez pouvoir mettre n'importe quel contenu à l'intérieur de la div interne et le déborder sur la gauche.

Abe
la source
8
Je voulais voir cela fonctionner, alors j'ai fait ce JSFiddle pour le tester et cela fonctionne très bien! Très bonne réponse! Merci!
WebWanderer
4
C'est une excellente réponse car la direction rtl a toutes sortes d'effets secondaires. Si vous voulez vous assurer que le div interne est aligné à gauche et tronqué uniquement vers la gauche si le div est dépassé, définissez le .outer-div sur max-width: 100% et affichez: inline-block. Voir ici
Luke
2
Merci pour le JSFiddle WebWanderer. Je l'ai mis à jour pour l'utiliser overflow: visibleafin que le contenu puisse s'échapper du côté gauche .
joeytwiddle
8

Tu peux faire float:right et il débordera vers la gauche, mais dans mon cas, je dois centrer le div si la fenêtre est plus grande que l'élément, mais déborder vers la gauche si la fenêtre est plus petite. Des pensées à ce sujet?

J'ai essayé de jouer avec direction:rtlmais cela ne semble pas changer le débordement d'éléments de bloc.

Je pense que la seule réponse est de le faire flotter à droite, avec un div à droite qui flotte également à droite, puis de définir la largeur du div à droite à la moitié de l'espace de fenêtre restant avec jquery.

catdotgif
la source
Se mettre d'accord. Faites flotter le parent vers la droite et assurez-vous qu'aucun conteneur intermédiaire n'a le dépassement de capacité défini sur masqué.
Lisa
8

facile à faire, <span>les nombres et la position de la travée absolue à droite à l'intérieur d'un élément avec débordement caché.

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

:)

rgrds jake

Esko
la source
5

Cela a fonctionné comme un charme:

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

Modification du balisage HTML et ajout de javascript à la solution jsFiddle de 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;
Subramanian Narasimhan
la source