Bootstrap: wyrównaj dane z przyciskiem


299

Dlaczego przyciski i wejścia nie są dobrze dopasowane w Bootstrap?

Próbowałem czegoś prostego, takiego jak:

<input type="text"/><button class="btn">button</button>

Przycisk jest 5pxmniej więcej niż wejście w chrome / firefox.

wprowadź opis zdjęcia tutaj

Odpowiedzi:


551

Bootstrap na Twitterze 4

W Twitterze Bootstrap 4 dane wejściowe i przyciski można wyrównać za pomocą klas input-group-prependi input-group-append(patrz https://getbootstrap.com/docs/4.0/components/input-group/#button-addons )

Przycisk grupy po lewej stronie (prepend)

<div class="input-group mb-3">
  <div class="input-group-prepend">
    <button class="btn btn-outline-secondary" type="button">Button</button>
  </div>
  <input type="text" class="form-control">
</div>

Przycisk grupy po prawej stronie (dołącz)

<div class="input-group mb-3">
  <div class="input-group-append">
    <button class="btn btn-outline-secondary" type="button">Button</button>
  </div>
  <input type="text" class="form-control">
</div>

Bootstrap na Twitterze 3

Jak pokazano w odpowiedzi @abimelex, dane wejściowe i przyciski można wyrównać za pomocą .input-groupklas (patrz http://getbootstrap.com/components/#input-groups-buttons )

Przycisk grupy po lewej stronie

<div class="input-group">
  <span class="input-group-btn">
    <button class="btn btn-default" type="button">Go!</button>
  </span>
  <input type="text" class="form-control">
</div>

Przycisk grupy po prawej stronie

<div class="input-group">
   <input type="text" class="form-control">
   <span class="input-group-btn">
        <button class="btn btn-default" type="button">Go!</button>
   </span>
</div>

To rozwiązanie zostało dodane, aby moja odpowiedź była aktualna, ale proszę o głosowanie na odpowiedź udzieloną przez @abimelex .


Twitter Bootstrap 2

Bootstrap oferuje .input-appendklasę, która działa jako element otoki i koryguje to dla ciebie:

<div class="input-append">
    <input name="search" id="search"/>
    <button class="btn">button</button>
</div>

Jak zauważył @OleksiyKhilkevich w swojej odpowiedzi, istnieje drugi sposób na wyrównanie inputi buttonużycie .form-horizontalklasy:

<div class="form-horizontal">
    <input name="search" id="search"/>
    <button class="btn">button</button>
</div>

Różnice

Różnica między tymi dwiema klasami polega na tym, .input-appendże umieści buttonsię na inputelemencie (tak, aby wyglądały, jakby były przymocowane), gdzie .form-horizontalumieści między nimi przestrzeń.

-- Uwaga --

Aby elementy inputi buttonmogły być obok siebie bez odstępów, font-sizeustawiono opcję 0w .input-appendklasie (usuwa to białe odstępy między inline-blockelementami). Może to mieć niekorzystny wpływ na rozmiary czcionek w inputelemencie, jeśli chcesz zastąpić wartości domyślne za pomocą emlub %pomiarów.


5
Dziękuję za odpowiedź, ale wydaje mi się, że coś tu nie idzie. Z pewnością nie jestem pierwszą osobą, która życzy sobie, aby komponenty bootstrap były zgodne z elementami form.
— pguardiario

@pguardiario - masz całkowitą rację. Wydawało się to złe i po uderzeniu w mózg przypomniałem sobie .input-appendklasę.
— Moja głowa boli

1
Dziwne wydaje się, że potrzebujesz do tego klasy opakowania. Czy nie powinny domyślnie ustawiać się w szeregu?
— opsb

2
@opsb, jeśli zajmą tyle samo miejsca w pionie, to tak, zrobią to. Jednak pola wejściowe w margin-bottom: 9pxpasku startowym Twittera mają, ale przyciski nie, więc nie zajmują tej samej przestrzeni pionowej. Ponieważ oba elementy mają middlewyrównanie w pionie, przycisk jest przesunięty z powodu różnicy. Użycie .input-appendopakowania usuwa tę dolną wartość marginesu.
— Moja głowa boli

Zgaduję, że zepsułoby to inne układy formularzy, gdyby miały domyślnie tę samą wysokość pionową.
— opsb

187

możesz użyć właściwości przycisku grupy wejściowej, aby zastosować przycisk bezpośrednio w polu wejściowym.

Bootstrap 3 i 4

<div class="input-group">
  <input type="text" class="form-control">
  <span class="input-group-btn">
    <button class="btn btn-default" type="button">Go!</button>
  </span>
</div><!-- /input-group -->

Zapoznaj się z dokumentem BS4 Input-Group, aby uzyskać więcej przykładów.

przykład przycisku grupy wejść bs3


3
Inne nie działały dla mnie, jednak tak, jak chciałem. Dziękuję Ci.
— Colandus

1
Dla mnie nie działało, jeśli utworzyłem dodatkowy znacznik zakresu, aby przydzielić klasę, ale działało, jeśli dodałem tę klasę do znacznika div:<div class="form-group input-group-btn">
— J0ANMM,

Ta odpowiedź jest nieaktualna dla BS4, spójrz na moją odpowiedź.
— Alexander Kim

37

Tylko heads-up, wydaje się, że istnieje specjalna klasa CSS do tego tzw form-horizontal

input-append ma inny efekt uboczny, polegający na tym, że rozmiar czcionki spada do zera


1
+1 dobre miejsce - musiałem sprawdzić, dlaczego wykorzystali font-size: 0i nauczyli się czegoś nowego :) Dzięki!
— Moja głowa boli

30

Użyj .form-inline = Spowoduje to wyrównanie do lewej etykiet i elementów sterujących bloku w wierszu dla kompaktowego układu

Przykład: http://jsfiddle.net/hSuy4/292/

<div class="form-inline">
<input type="text">
<input type="button" class="btn" value="submit">
</div>

.form-horizontal = Wyrównaj etykiety do prawej i przesuń je w lewo, aby pojawiały się w tym samym wierszu co formanty, co jest lepsze dla układu formularza z 2 kolumnami.

(e.g. 
Label 1: [textbox]
Label 2: [textbox]
     : [button]
)

Przykłady: http://twitter.github.io/bootstrap/base-css.html#forms


2
Mogę potwierdzić, że form-inlinedziała dla Bootstrap 3. Dzięki.
— austin

Fantastyczny! Dokładnie to, czego potrzebowałem do kłopotliwej formy!
— its_notjack

Wydaje .form-inline działa tylko w obrębie rzutni przynajmniej 768px szerokości: w3schools.com/bootstrap/bootstrap_forms.asp
— anemaria20

16

Próbowałem przede wszystkim i skończyłem z kilkoma zmianami, którymi chciałbym się podzielić. Oto kod, który działa dla mnie (znajdź załączony zrzut ekranu):

<div class="input-group">
    <input type="text" class="form-control" placeholder="Search text">
    <span class="input-group-btn" style="width:0;">
        <button class="btn btn-default" type="button">Go!</button>
    </span>
</div>

wprowadź opis zdjęcia tutaj

Jeśli chcesz, aby działało, po prostu użyj poniższego kodu w swoim edytorze:

<html>
    <head>
        <link type='text/css' rel='stylesheet' href='https://maxcdn.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css' />
    </head>
    <body>
        <div class="container body-content">
            <div class="form-horizontal">
              <div class="input-group">
                  <input type="text" class="form-control" placeholder="Search text">
                  <span class="input-group-btn" style="width:0;">
                      <button class="btn btn-default" type="button">Go!</button>
                  </span>
              </div>
            </div>
        </div>
    </body>
</html>

Mam nadzieję że to pomoże.


Dla której wersji Bootstrap to jest? A z jakiego problemu nie korzysta style="width:0;"?
— Karl Adler,

Jeśli nie użyjesz szerokości: 0, zajmie to pełną szerokość strony.
— Abhimanyu

sposób bootstrap byłby owinięty elementem typu col, takim jak <div class="col-md-4">No need forwidth: 0
— Karl Adler

ustawiłem, ponieważ nie chcę, aby formanty wprowadzania danych zajmowały całą szerokość ekranu
— Abhimanyu

6

Walczyłem również z tym samym problemem. Klasy bootstrap, których używam, nie działają dla mnie. Wymyśliłem obejście, jak poniżej:

<form action='...' method='POST' class='form-group'>
  <div class="form-horizontal">
    <input type="text" name="..." 
        class="form-control" 
        placeholder="Search People..."
        style="width:280px;max-width:280px;display:inline-block"/>

    <button type="submit" 
        class="btn btn-primary" 
        style="margin-left:-8px;margin-top:-2px;min-height:36px;">
      <i class="glyphicon glyphicon-search"></i>
     </button>
  </div>
</form>

Zasadniczo przesłoniłem właściwość display klasy „form-control” i użyłem innych właściwości stylu do korekcji rozmiaru i położenia.

Oto wynik:

wprowadź opis zdjęcia tutaj



4
<form class="form-inline">
  <div class="form-group">
    <label class="sr-only" for="exampleInputEmail3">Email address</label>
    <input type="email" class="form-control" id="exampleInputEmail3" placeholder="Email">
  </div>
  <button type="submit" class="btn btn-default">Sign in</button>
</form>

3

Wypróbowałem wszystkie powyższe kody i żaden z nich nie naprawił moich problemów. Oto, co zadziałało dla mnie. Użyłem addon-group-addon.

<div class = "input-group">
  <span class = "input-group-addon">Go</span>
  <input type = "text" class = "form-control" placeholder="you are the man!">
</div>

1

Nie ma bezpośredniego związku, chyba że masz podobny kod, ale zauważyłem dziwne zachowanie w stosunku do form-inline, bootstrap 3.3.7

Nie użyłem do tego wiersza i komórek, ponieważ jest to projekt pulpitu, jeśli znacznik otwierający znajdował się pod tabelą (w tym przypadku):

<table class="form-inline"> 
<form> 
<tr>

Elementy formularza będą się układać.

Przełącznik i jest prawidłowo ustawiony.

<form>
<table class="form-inline">
<tr>

Safari 10.0.2 i najnowszy Chrome nie wprowadziły żadnych różnic. Może mój układ był zły, ale nie jest zbyt wybaczający.


1

Weź zmiennoprzecinkowe wejście w lewo. Następnie weź przycisk i ustaw go w prawo. Możesz wyczyścić klasę, jeśli pokonujesz więcej niż jedną odległość.

<input style="width:65%;float:left"class="btn btn-primary" type="text" name="name"> 
<div style="width:8%;float:left">&nbsp;</div>
<button class="btn btn-default" type="button">Go!</button>
<div class="clearfix" style="margin-bottom:10px"> </div>

-1
style="padding-top: 8px"

Użyj tego, aby przesunąć div w górę lub w dół w swoim rzędzie. Działa dla mnie cuda.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.