2008-10-20 17 views
71

J'ai un div avec overflow:hidden, à l'intérieur duquel je montre un numéro de téléphone que l'utilisateur tape. Le texte à l'intérieur de la div est aligné à droite et les caractères entrants sont ajoutés à droite au fur et à mesure que le texte croît vers la gauche.Débordement à gauche au lieu de droite

Mais une fois que le texte est assez grand pour ne pas tenir dans la div, les derniers caractères du nombre sont automatiquement recadrés et l'utilisateur ne peut pas voir les nouveaux caractères qu'elle tape. Ce que je veux faire est de recadrer les caractères de gauche, comme le div montre le contenu le plus à droite et débordant sur le côté gauche. Comment puis-je créer cet effet?

overflowing phone number to left

Répondre

113

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

direction: rtl; 

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

+14

Attention: cela ne fonctionne pas pour un affichage de la calculatrice avec des caractères spéciaux comme/et *. – Max

+7

Il ne fonctionne pas non plus pour les paramètres régionaux avec un formatage non américain, comme "" pour le séparateur de milliers. Ce n'est pas la bonne solution –

+7

Cette propriété n'est pas destinée à l'alignement, et elle changera également l'ordre des mots à l'intérieur. F.e. '14: 00-15: 00' deviendra' 15: 00-14: 00' dans Firefox. – Andy

5

facilement fait, <span> les chiffres et la position de la durée absolue du droit à 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

5

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

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

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

+0

D'accord. Flottez le parent vers la droite et assurez-vous que les conteneurs intermédiaires ne sont pas masqués. – Lisa

42

J'ai eu le même problème et l'ai résolu en utilisant deux divs. Le div externe fait le clipping sur la gauche et le div interne fait flotter 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 placer n'importe quel contenu à l'intérieur du div interne et le déborder à gauche.

+5

Je voulais voir cela fonctionner, alors j'ai fait [** ce JSFiddle **] (https: // jsfiddle.net/WebWanderer/375fmu1q /) pour le tester et ça marche super! Très bonne réponse! Merci! – WebWanderer

+2

C'est une excellente réponse car la direction rtl a toutes sortes d'effets secondaires. Si vous voulez vous assurer que la div intérieure est alignée à gauche et seulement tronquée vers la gauche si la div est dépassée, définissez le .outer-div sur max-width: 100% et affichez: inline-block. Voir [ici] (https://jsfiddle.net/jew4zfyk/) – Luke

+0

Merci pour le JSFiddle WebWanderer. Je l'ai mis à jour pour utiliser 'overflow: visible' de sorte que le contenu puisse [fuir du côté gauche] (https://jsfiddle.net/375fmu1q/22/). – joeytwiddle

1

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>