Warum Textbereich 'Spalten' und Eingabe Text 'Größe' ergeben unterschiedliche Elementbreiten

8

Ich versuche, das Verhalten der Attribute cols und size für textarea und Eingabetext respektvoll zu verstehen. Obwohl es etwas geradlinig sein sollte, kann ich nicht herausfinden, warum haben sie unterschiedliche Breiten, wenn die Spalten- und Größenwerte gleich sind?

Laut der Dokumentation sollten beide Attribute die Elemente so dimensionieren, dass eine bestimmte Anzahl von Zeichen darin passen kann:

  

... size Attribut gibt die sichtbare Breite in Zeichen an   ein Eingabeelement [source - w3schools]

     

Beachten Sie, dass die Spalten und die Zeilenattribute (...) angeben, wie viele Spalten groß und Zeilen breit sein sollen   der Textbereich. Die Werte sind in Zeichen   . [source - w3]

Wenn ich jedoch versuche, beiden Elementen den gleichen Wert zuzuweisen, haben sie unterschiedliche Breiten. Das Eingabefeld ist ein bisschen zu klein, um die gegebene Anzahl von Zeichen und die Textfläche aufzunehmen - zu breit. Am wichtigsten ist, beide haben unterschiedliche Breite.

Zum Beispiel:

%Vor%

erzeugt:

siehe hier - Ссылка

Ich habe das sowohl in Chrome 29 als auch in Firefox 24 versucht.

Ich verstehe, dass die Breite von den Schriftstilen abhängt, aber sollten nicht beide Elemente immer die gleiche Breite haben? Sind interne Margen des Elements oder etwas anderes, das diesen Unterschied verursacht?

AKTUALISIEREN

Es scheint, dass die beiden Elemente unterschiedliche Schriftstile haben, aber die Zuweisung der gleichen Schriftfamilie und Schriftgröße erzeugt immer noch unterschiedliche Breiten:

udpated fiddle

    
ılǝ 20.09.2013, 02:41
quelle

2 Antworten

6

"Sichtbare Breite in Zeichen" ist ein vager Ausdruck, da in den meisten Schriftarten die Breite der Zeichen variiert. Sie können also nicht erwarten, ein Steuerelement zu erhalten, das eine genaue Anzahl von Zeichen enthält, es sei denn, Sie verwenden eine Monospace-Schriftart.

Es gibt zwei grundlegende Dinge, die dazu führen, dass sich die Breiten von input und textarea unterscheiden. Erstens sind die Standardschriftarten unterschiedlich: eine Monospace-Schriftart für textarea , eine Sans-Serif-Schriftart für input , in den meisten Browsern. Dies führt zu unterschiedlichen Breiten, sogar für die gleiche Schriftgröße. Zweitens enthält ein Widget textarea rechts einen kleinen Bereich, der bei Bedarf für die vertikale Bildlaufleiste verwendet wird. effektiv, das Element hat overflow: auto standardmäßig. Sie könnten es mit overflow: hidden entfernen, aber dann wird es ein großes Problem geben, wenn der Benutzer mehr Zeilen eingibt, die in den Bereich passen.

Wenn Sie die Elemente wirklich gleich breit machen möchten (ich glaube nicht, dass Sie das sollten), können Sie die Schriftart und die Breite explizit festlegen, z. B.

%Vor%     
Jukka K. Korpela 20.09.2013, 06:12
quelle
1

Setze beide Elemente auf font-family und es wird korrekt angezeigt.

Hier ist ein Beispiel jsFiddle

    
skmasq 20.09.2013 03:01
quelle

Tags und Links

Django: Verwenden von Annotate, Count und Distinct in einem Queryset ___ answer12823453 ___
  

Da dies die meiste Zeit gut funktioniert, muss ich annehmen, dass zwischen onCreate und den geladenen Ressourcen eine Art Race-Bedingung besteht.

Wenn die gleiche APK-Datei - keine Neukompilierung, keine Neuinstallation usw. - den Fehler nicht konsistent erzeugt, dann könnte es eine Art Race Condition sein, obwohl mich das überraschen würde.

Wenn die same APK-Datei konsistent fehlschlägt, dann ist dies eine größere Vielfalt an Ressourcen, die nicht mit dem Rest des Code-Problems synchronisiert sind, und das Säubern der Projekt wird es aufräumen.

  

Gibt es einen besseren Ort, um einen Dienst zu initialisieren, wenn die Anwendung gestartet wird?

Meiner Meinung nach ist die Anzahl der Apps, die einen Dienst beim Start der Anwendung initialisieren müssen, extrem niedrig, und ich kann mir kein Szenario ausdenken, wo dies ein guter Plan wäre. Das soll nicht heißen, dass du kein solches Szenario hast, aber es ist ein ernsthafter Code-Geruch in meinem Buch ohne eine Erklärung.

    
___ answer12823602 ___

Ich habe festgestellt, dass in Fällen, in denen viele Ressourcen verwendet werden (und in R.java generiert werden), das Bereinigen der Anwendung vor der Ausführung diese Probleme behebt. Ich würde also annehmen, dass dies keine Race Condition ist - aber ein Problem mit Eclipse oder dem Android SDK mit nicht erfrischenden Ressourcen. Was die Platzierung des Codes betrifft - es ist meiner Meinung nach so gut wie jede andere Option.

    
___ tag123android ___ Android ist das mobile Betriebssystem von Google, das zum Programmieren oder Entwickeln von digitalen Geräten (Smartphones, Tablets, Automobile, Fernseher, Wear, Glass, IoT) verwendet wird. Verwenden Sie für Themen rund um Android Android-spezifische Tags wie android-intent, nicht intent, android-activity, nicht activity, android-adapter, nicht adapter usw. Bei anderen Fragen als der Entwicklung oder Programmierung, aber im Zusammenhang mit Android Framework, verwenden Sie Der Link: https://android.stackexchange.com. ___ ___ qstnhdr Race Condition zwischen Anwendung onCreate und Ressourcen geladen? ___ qstntxt ___

Ich habe die folgende Anwendungsklasse für meine App. Wenn die Anwendung gestartet wird, möchte ich einige Einstellungen aus den Einstellungen abrufen und einen Hintergrunddienst starten.

%Vor%

Das funktioniert normalerweise gut, aber gelegentlich, wenn ich mein Programm von Eclipse "Run" starte, erhalte ich diesen Fehler:

%Vor%

Diese ID stammt von meinem R.java:

%Vor%

Da dies die meiste Zeit gut funktioniert, muss ich davon ausgehen, dass zwischen onCreate und den geladenen Ressourcen eine Art Wettlaufsituation besteht.

Wenn das der Fall ist, wird empfohlen, Ressourcen in der Anwendung onCreate nicht zu lesen?

Wenn ja, gibt es einen besseren Ort, um einen Dienst beim Start der Anwendung zu initialisieren?

    
___