Ich habe das folgende CSS- und HTML-Snippet gerendert.
textarea
{
border:1px solid #999999;
width:100%;
margin:5px 0;
padding:3px;
}
<div style="display: block;" id="rulesformitem" class="formitem">
<label for="rules" id="ruleslabel">Rules:</label>
<textarea cols="2" rows="10" id="rules"/>
</div>
Das Problem ist, dass der Textbereich 8 Pixel breiter ist (2 Pixel für Rand + 6 Pixel für Auffüllen) als der übergeordnete Bereich. Gibt es eine Möglichkeit, weiterhin Rahmen und Polster zu verwenden, aber die Gesamtgröße von textarea
auf die Breite des übergeordneten Elements zu beschränken?
html
css
stylesheet
Eric Schoonover
quelle
quelle
Antworten:
Warum nicht die Hacks vergessen und es einfach mit CSS machen?
Eine, die ich häufig benutze:
Siehe Browserunterstützung hier .
quelle
Die Antwort auf viele CSS-Formatierungsprobleme scheint zu sein: "Füge ein weiteres <div> hinzu!"
Haben Sie in diesem Sinne versucht, ein Wrapper-Div hinzuzufügen, auf das der Rand / die Polsterung angewendet wird, und dann den Textbereich mit 100% Breite darin zu platzieren? So etwas wie (ungetestet):
quelle
Betrachten wir die endgültige Ausgabe, die an den Benutzer gerendert wird, was wir erreichen möchten: einen gepolsterten Textbereich mit Rand und Polsterung. Diese Eigenschaften sind, dass durch Klicken der Fokus auf unseren Textbereich übertragen wird, und der Vorteil einer automatischen Breite von 100% typisch für Blockelemente.
Meiner Meinung nach ist es am besten, so weit wie möglich Low-Level-Lösungen zu verwenden, um die maximale Browserunterstützung zu erreichen. In diesem Fall könnte der einzige HTML-Code einwandfrei funktionieren und die Verwendung von Javascript vermeiden (was wir jedenfalls alle lieben).
Das LABEL-Tag wird in unserer Hilfe angezeigt, da es ein solches Verhalten aufweist und die Eingabeelemente enthalten darf, an die es adressieren muss. Der Standardstil ist der eines Inline-Elements. Wenn Sie dem Etikett einen Blockanzeigestil geben, können Sie die automatische Breite von 100% einschließlich Polsterung und Rahmen nutzen, während der innere Textbereich keinen Rand, keine Polsterung und eine Breite von 100% aufweist .
Wenn wir uns die W3C-Besonderheiten ansehen, können wir folgende weitere Vorteile feststellen:
Weitere Informationen finden Sie in den W3C-Spezifikationen .
Einfaches Beispiel:
Das Auffüllen und der Rand der .textareaContainer-Elemente sind diejenigen, die wir dem Textbereich geben möchten. Bearbeiten Sie sie, um sie nach Ihren Wünschen zu gestalten. Ich habe dem .textareaContainer-Element große und sichtbare Auffüllungen und Rahmen gegeben, damit Sie ihr Verhalten beim Klicken sehen können.
quelle
Wenn Sie sich nicht zu sehr um die Breite der Polsterung kümmern, hält diese Lösung die Polsterung auch in Prozent.
Nicht perfekt, aber Sie erhalten etwas Polsterung und die Breite summiert sich auf 100%, also ist alles gut
quelle
Ich bin hier auf eine andere Lösung gestoßen , die so einfach ist: Füge dem Container des Textbereichs ein Auffüllrecht hinzu. Dadurch bleiben Rand, Rand und Polsterung des Textbereichs erhalten, wodurch das Problem vermieden wird, auf das Beck bei der Hervorhebung des Fokus hingewiesen hat, den Chrom und Safari um den Textbereich gelegt haben.
Das Auffüllrecht des Containers sollte die Summe aus dem effektiven Rand, dem Rand und dem Auffüllen auf beiden Seiten des Textbereichs sowie allen Auffüllungen sein, die Sie ansonsten für den Container wünschen. Also für den Fall in der ursprünglichen Frage:
quelle
Dieser Code funktioniert für mich mit IE8 und Firefox
quelle
Sie können die Box-Sizing-Eigenschaft verwenden, die von allen gängigen standardkonformen Browsern und IE8 + unterstützt wird. Sie benötigen jedoch noch eine Problemumgehung für IE7. Lesen Sie hier mehr .
quelle
Nein, das geht mit CSS nicht. Aus diesem Grund hat Microsoft zunächst ein anderes und möglicherweise praktischeres Box-Modell eingeführt . Das Box-Modell, das letztendlich gewonnen hat, macht es unpraktisch, Prozentsätze und Einheiten zu mischen.
Ich denke nicht, dass es in Ordnung ist, Polsterung und Randbreiten auch in Prozent des übergeordneten Elements auszudrücken.
quelle
Ich suchte nach einer Inline-Styling-Lösung anstelle einer CSS-Lösung, und dies ist das Beste, was ich für einen reaktionsschnellen Textbereich tun kann:
quelle
Wenn Sie es wie folgt auffüllen und versetzen:
Die rechte Seite des Textbereichs ist perfekt auf die rechte Seite des Containers ausgerichtet, und der Text im Textbereich ist perfekt auf den Text im Container ausgerichtet ... und die linke Seite des Textbereichs ragt etwas heraus. es ist manchmal schöner.
quelle
Verwenden Sie die Box Sizing-Eigenschaft :
Das wird helfen
quelle
Für Benutzer von Bootstrap kann textarea.form-control ebenfalls zu Problemen bei der Größe von Textbereichen führen. Chrome und Firefox scheinen mit dem folgenden Bootstrap-CSS unterschiedliche Höhen zu verwenden:
quelle
Ich behebe dieses Problem oft mit
calc()
. Sie geben dem Textbereich nur eine Breite von 100% und eine bestimmte Polsterung, aber Sie müssen die gesamte linke und rechte Polsterung von der 100% Breite subtrahieren, die Sie dem Textbereich gegeben haben:Oder wenn Sie dem Textbereich einen Rand geben möchten:
quelle
Wie wäre es mit negativen Margen?
quelle
quelle