So fügen Sie eine Schaltfläche in einer Eingabe hinzu [closed]
Lesezeit: 7 Minuten
Vlad Otrokol
Wie platziere ich eine Schaltfläche wie unten gezeigt visuell in einem Eingabeelement?
Der Benutzer sollte in der Lage sein, wie gewohnt mit der Eingabe zu interagieren. Der Text sollte nicht hinter den Button gehen, auch wenn er lang ist. Der Fokus sollte korrekt funktionieren. Das Formular sollte barrierefrei sein und in Screenreadern korrekt funktionieren. Die gesamte Komponente sollte mit CSS gestaltbar sein und in der Lage sein, die Größe einfach an den verfügbaren Platz anzupassen.
So mache ich es, aber ich kann nicht herausfinden, wie ich verhindern kann, dass der Text die Schaltfläche “Senden” überlappt.
– Benutzer1078385
11. Oktober 2013 um 10:16 Uhr
Es sollte nicht passieren, wenn Sie die gleiche Breite für verwenden padding-right Und margin-left
– Sonne
12. September 2014 um 14:44 Uhr
+1 zum Auffüllen der Eingabe nach rechts. Behebt alle Probleme mit Standard-Browser (IE10, iOS usw.) Eingabe-Clear-Schaltflächen, die sich mit der Suchschaltfläche überschneiden.
– Liam Gray
11. September 2015 um 13:25 Uhr
Dies beantwortet die Frage nicht. Die Frage ist, wie man es in die Eingabe einfügt. Ich bin hierher gekommen, um nach einer Möglichkeit zu suchen, es im Inneren zu haben und die Sichtbarkeit der Schaltfläche basierend auf der Wertänderung umzuschalten.
– Johan Tiden
20. Oktober 2016 um 8:19 Uhr
@JohanTidén Es beantwortet die Frage. Für einen Benutzer befindet sich die Schaltfläche innerhalb des Felds. Da wir Programmierer sind, können wir natürlich sagen, dass es nicht wirklich drin ist … aber das ist nebensächlich. Es geht darum, einem Benutzer ein angenehmes Erlebnis zu bieten.
– Sami Fouad
5. Februar 2017 um 13:20 Uhr
superluminary
Verwenden Sie eine Flexbox und legen Sie den Rahmen auf das Formular.
Das geht jetzt (2022) am besten mit einer Flexbox.
Setzen Sie den Rahmen auf das enthaltende Element (in diesem Fall habe ich das Formular verwendet, aber Sie könnten ein div verwenden).
Verwenden Sie ein Flexbox-Layout, um die Eingabe und die Schaltfläche nebeneinander anzuordnen. Lassen Sie zu, dass sich die Eingabe ausdehnt, um den gesamten verfügbaren Platz einzunehmen.
Blenden Sie nun die Eingabe aus, indem Sie ihren Rand entfernen.
Führen Sie das Snippet unten aus, um zu sehen, was Sie erhalten.
form {
/* This bit sets up the horizontal layout */
display:flex;
flex-direction:row;
/* This bit draws the box around it */
border:1px solid grey;
/* I've used padding so you can see the edges of the elements. */
padding:1px;
}
input {
/* Tell the input to use all the available space */
flex-grow:2;
/* And hide the input's outline, so the form looks like the outline */
border:none;
}
/* remove the input focus blue box, it will be in the wrong place. */
input:focus {
outline: none;
}
/* Add the focus effect to the form so it contains the button */
form:focus-within {
outline: 1px solid blue
}
button {
/* Just a little styling to make it pretty */
border:1px solid blue;
background:blue;
color:white;
}
<form>
<input />
<button>Go</button>
</form>
Warum das gut ist
Es dehnt sich auf jede Breite aus.
Der Knopf wird immer genau so groß sein, wie er sein muss. Es wird sich nicht dehnen, wenn der Bildschirm breit ist, oder schrumpfen, wenn der Bildschirm schmal ist.
Der eingegebene Text geht nicht hinter die Schaltfläche.
Vorbehalte und Browserunterstützung
Es gibt eine eingeschränkte Flexbox-Unterstützung in IE9, daher befindet sich die Schaltfläche nicht auf der rechten Seite des Formulars. IE9 wird seit einigen Jahren nicht mehr von Microsoft unterstützt, daher fühle ich mich persönlich damit recht wohl.
Ich habe hier minimales Styling verwendet. Ich habe in der Polsterung gelassen, um die Kanten der Dinge zu zeigen. Sie können dieses Aussehen natürlich so gestalten, wie Sie es möchten, mit abgerundeten Ecken, Schlagschatten usw.
Was weist die Schaltfläche an, rechts ausgerichtet zu werden?
– Christiaan Westerbeek
1. November 2018 um 9:48 Uhr
@Neowizard Sie sollten das OP fragen, indem Sie seiner Frage einen Kommentar hinzufügen. Sie können die akzeptierte Antwort auch ablehnen (als kleiner Beitrag, um die Dinge klarzustellen).
– Christiaan Westerbeek
1. November 2018 um 9:51 Uhr
Diese Lösung zeigt im Fokus keinen blauen Rand um das äußere Element. Sehen Sie hier, wie Sie das erreichen: stackoverflow.com/questions/38644773/…
– Roy Prins
16. August 2019 um 12:18 Uhr
@ RoyPrins – guter Punkt. Verwendung der :focus-within Pseudoklasse auf dem Formular würde es Ihnen ermöglichen, das blaue Fokusfeld wiederherzustellen, wenn Sie dies wünschen.
Mit CSS sollte das gehen, was hast du probiert?
– Nick Pickering
9. März 2013 um 18:35 Uhr
Das könnte Ihnen schnell helfen – geeksforgeeks.org/…
– Tushar Walzade
17. Mai 2022 um 14:57 Uhr