2016-07-01 3 views
8

Ok, so fand ich heraus, dass der Text in einem <input> Tag noch abgeschnitten wird, obwohl das <input> Tag bereits eine Auffüllung hat. Sie werden es bemerken, wenn Sie Ihren Schriftstil auf etwas Kursives einstellen.Warum wird der Text in einem -Tag abgeschnitten, auch wenn bereits ein Padding vorhanden ist?

Werfen Sie einen Blick auf diesem Bild:

Das erste Textfeld in dem Screenshot ein Eingang vom Typ = Text und das zweiten Textfeld ist nur ein div. Das Eingabetextfeld schneidet den Schwanz des Zeichens 'j' ab, während das Textfeld 'div' dies nicht tut.

HTML:

<input type="text" value="juvenescent" /> 
<div>juvenescent</div> 

CSS:

input, div { 
    font-family: cursive; 
    font-size: 2em; 
    padding: 15px 20px; 
    margin-bottom: 10px; 
    width: 300px; 
    border: 1px solid black; 
} 

div { 
    background-color: white; 
} 

Hier ist ein Link auf die jsfiddle: https://jsfiddle.net/9eLzqszx

Was die Abhilfe hier sein würde? Offensichtlich möchte ich das Padding der Eingabetextbox NICHT den Text darin schneiden.

+1

Sie werden die Schriftarten enthalten müssen in deiner Geige. – Shaggy

+0

Fragen, die Code-Hilfe suchen, müssen den kürzesten Code enthalten, der für die Reproduktion ** in der Frage selbst erforderlich ist **. Obwohl Sie einen [** Link zu einem Beispiel oder einer Site ** angegeben haben] (http://meta.stackoverflow.com/questions/254428/something-in-my-web-site-or-project-doesnt-work- can-i-just-einfügen-a-link-to-it), sollte die Verknüpfung ungültig werden, würde Ihre Frage keinen Wert für andere zukünftige SO-Benutzer mit dem gleichen Problem haben. –

+1

Ich vermute, dass dies ein 'font-style: italic' Problem ist, bei dem die Schriftart nicht ** tatsächlich ** kursiv sondern eher faux-italisch ist. Wir haben das schon früher gesehen, da bin ich mir sicher. –

Antwort

10

Es sieht so aus, als ob die Kurve des J über die linke Seite des Browsers hinausgeht, was der Browser als die Kante des Buchstabens ansieht. Verwenden Sie anstelle von Padding für beide Seiten Padding für oben/rechts/unten und stattdessen Text-Einzug für die linke Seite, sollte es den Trick tun!

input { 
    font-family: cursive; 
    font-size: 2em; 
    padding: 15px 20px 15px 0; 
    font-style:italic; 
    margin-bottom: 10px; 
    width: 300px; 
    border: 1px solid black; 
    text-indent: 20px; 
} 

https://jsfiddle.net/will0220/pxrs321f/3/

+0

Ich würde 'text-indent' keinen so großen Wert hinzufügen, denn wenn der Benutzer einen großen Text schreibt, bleibt der Text auf der linken Seite. –

+1

Ich persönlich mag es, dass der Text mit dieser Lösung nicht vor der Kante abgeschnitten wird, aber es ist wirklich nur eine Frage der Präferenz! – will

+0

Danke! Texteinzug löst es. – jaye

-1

Sie könnten versuchen, Ihre Zeilenhöheneigenschaft zu erhöhen. Das würde den sichtbaren Bereich für die Buchstaben einschränken, die dazu führen, dass sie abgeschnitten werden. Allerdings ist das wahrscheinlich ein beschissener Hack, wenn du möchtest, dass er die gleiche Größe wie dein div hat.

+0

Das Problem ist das horizontale Padding, nicht das vertikale Padding. – cpburnz

2

Ein Eingabeelement ist ein spezielles Element, wie es geschnitten werden muss und dem Benutzer ermöglichen, durch seinen Text zu navigieren. Die aktive Textzone wird nicht durch das Padding vergrößert, und deshalb sehen Sie dieses Verhalten. Firefox scheint schlauer zu sein als der Haufen, da es den Text nicht vertikal schneidet, wenn die Breite des Textes kleiner ist als die aktive Textzone des Eingangs.

würde Eine Abhilfe sein text-indent hinzufügen und padding-left verringern:

text-indent: 5px; 
padding-left: 15px; /* Originally 20px */ 

Sie es in einer Geige over here sehen können.

+0

Danke! Texteinzug löst es. – jaye

-2

hinzufügen height: auto; zu Ihrem input type = text Flexibilität zu halten, und die Polsterung ändern, um die ursprüngliche Wirkung, wie diese Polsterung zu bekommen: 14px 20px;

+0

Das Problem ist die horizontale Auffüllung, nicht vertikale Auffüllung. – cpburnz

Verwandte Themen