Bootstrap 3.0: Jak umieścić tekst i dane wejściowe w tej samej linii?

90

Obecnie przechodzę na Bootstrap 3.0. Mam problem z wprowadzaniem formularzy i formatowaniem tekstu. To, co działało w Bootstrap 2, nie działa w Bootstrap 3.

Jak uzyskać tekst w tym samym wierszu przed i po wprowadzeniu formularza? Zawęziłem to do problemu z klasą „form-control” w przykładzie w wersji Bootstrap 3.

Jak zabrać cały tekst i dane wejściowe w jednej linii? Chciałbym, aby przykład bootstrap 3 wyglądał jak przykład bootstrap 2 w pliku jsfiddle.

Przykład skrzypiec JS

<div class="container ">
  <form>
      <h3> Format used to look like this in Bootstrap 2 </h3>
      <div class="row ">
          <label for="return1"><b>Return:</b></label>
          <input id="return1" name='return1' class=" input input-sm" style="width:150px"
                 type="text" value='8/28/2013'>
          <span id='return1' style='color:blue'> +/- 14 Days</span>
      </div>

       <br>   
       <br>   
           <h3> BootStrap 3 Version </h3>

      <div class="row">
          <label for="return2"><b>Return:</b></label>
          <input id="return2" name='return2' class="form-control input input-sm" style="width:150px"
                 type="text" value='8/28/2013'>
          <span id='return2' style='color:blue'> +/- 14 Days</span>
      </div>
  </form>

Aktualizacja: zmieniam kod na taki, który działa, ale mam teraz problemy z wyrównaniem. Jakieś pomysły?

<div class="form-group">
<div class="row">
    <div class="col-xs-3">
        <label for="class_type"><h2><span class=" label label-primary">Class Type</span></h2></label>
    </div>
    <div class="col-xs-2">
        <select name="class_type" id="class_type" class="  form-control input-lg" style="width:200px" autocomplete="off">
            <option >Economy</option>
            <option >Premium Economy</option>
            <option >Club World</option>
            <option >First Class</option>
        </select>
    </div>
 </div>

tłusta fantasma
źródło
Oba są takie same, masz po prostu dodatkową klasę form-controlw przykładzie z bootstrapem 3.
Kyle Needham
1
Spójrz na przykład w dokumentacji bootstrap. Brakuje Ci zajęć na etykiecie getbootstrap.com/css/#forms-horizontal
bumperbox Sierpnia
Przepraszam, ale nadal jestem zdezorientowany. Niższy przykład (BS3) ma klasę „form-control”, która zapewnia lepszy wygląd. Chcę mieć lepszy wygląd ORAZ zachować tekst i dane wejściowe w tej samej linii. czego mi brakuje?
fat fantasma
Pozwólcie, że zadam pytanie w inny sposób. Jak uzyskać tekst i pola wprowadzania w tej samej linii i wyrównane w ładnych kolumnach? Zobacz to skrzypce jsfiddle.net/fatfantasma/QwkpE . Oczywiście chciałbym dodać tekst po prawej stronie w tej samej linii. Jak miałbym to zrobić?
fat fantasma
.input-lgzwiększa wysokość pola wejściowego, ale potrzebujemy klasy, aby dostosować również wysokość i rozmiar etykiety.
Petrus Theron

Odpowiedzi:

39

Umieściłbym każdy element, który chcesz, w wierszu, w oddzielnym col-md- * div w twoim wierszu. Lub wymuś wyświetlanie elementów w tekście. Klasa form-control wyświetla blok, ponieważ jest to sposób, w jaki program bootstrap uważa, że ​​należy to zrobić.

lomteslie
źródło
137

Prosto z dokumentacji http://getbootstrap.com/css/#forms-horizontal .

Użyj predefiniowanych klas siatki Bootstrap, aby wyrównać etykiety i grupy kontrolek formularza w układzie poziomym, dodając .form-horizontaldo formularza (co nie musi być a <form>). Spowoduje to zmianę, .form-groupsaby zachowywać się jak wiersze siatki, więc nie ma potrzeby .row.

Próba:

<form class="form-horizontal">
  <div class="form-group">
    <label for="inputEmail3" class="col-sm-2 control-label">Email</label>
    <div class="col-sm-10">
      <input type="email" class="form-control" id="inputEmail3" placeholder="Email">
    </div>
  </div>
  <div class="form-group">
    <label for="inputPassword3" class="col-sm-2 control-label">Password</label>
    <div class="col-sm-10">
      <input type="password" class="form-control" id="inputPassword3" placeholder="Password">
    </div>
  </div>
  <div class="form-group">
    <div class="col-sm-offset-2 col-sm-10">
      <div class="checkbox">
        <label>
          <input type="checkbox"> Remember me
        </label>
      </div>
    </div>
  </div>
  <div class="form-group">
    <div class="col-sm-offset-2 col-sm-10">
      <button type="submit" class="btn btn-default">Sign in</button>
    </div>
  </div>
</form>
Denis Besic
źródło
15
+1. To powinna być akceptowana odpowiedź, ponieważ łączy oficjalną dokumentację
EProgrammerNotFound.
jest to odpowiedź zawierająca tylko link i nie powinna być akceptowana bez przykładu, na wypadek zmiany lub usunięcia strony, do której istnieje odwołanie.
NDM
dlaczego prawidłowa odpowiedź jest poprawną odpowiedzią? to powinna być prawidłowa odpowiedź! @fat fantasma
JMASTER B
Powinien zapakować je w statyczny format kontrolny, zobacz odpowiedzi poniżej
rmcsharry
2
@Whitecat, czyli z założenia na responsywnym układzie - aby to działało również na urządzeniach mobilnych, użyj col-xs- * zamiast col-sm- *
niico
23

Potrzebujesz .form-inlineklasy. Musisz jednak uważać, w nowej .form.inlineklasie musisz określić szerokość każdej kontrolki.

Spójrz na to

Reza Shirazian
źródło
to powinno być lepszą odpowiedzią niż class, form-horizontalponieważ nie wymusiło to div z form-grouppokazami klas w bloku.
shawmzhu
Dotyczy to tylko formularzy w rzutniach o szerokości co najmniej 768 pikseli.
rmcsharry
13

Żadne z nich nie działało dla mnie, musiałem używać .form-control-staticklasy.

http://getbootstrap.com/css/#forms-controls-static

hakunin
źródło
1
To naprawdę pomogło. Bez tego tekst etykiety i tekst wejściowy nie byłyby wyrównane z col- -
Brendan Cody-Kenny
To powinna być prawidłowa odpowiedź, zwłaszcza jeśli chcesz, aby twój formularz był poprawnie zawijany na mniejszych urządzeniach
rmcsharry
Tak, to działa też dla mnie. Inne rozwiązania zawodzą dla kolumn col-xs- *. Używanie „form-control-static text-right” działało dla mnie na BS 3.3.7.
Neutrino
10

Możesz to zrobić w ten sposób:

<form class="form-horizontal" role="form">
    <div class="form-group">
        <label for="inputType" class="col-sm-2 control-label">Label</label>
        <div class="col-sm-4">
            <input type="text" class="form-control" id="input" placeholder="Input text">
        </div>
    </div>
</form>

Skrzypce

Paulo Fidalgo
źródło
4

po prostu podaj matkę div "class =" col-lg-12 ""

<div class="form-group">
<div class="row">
    <div class="col-xs-3">
        <label for="class_type"><h2><span class=" label label-primary">Class Type</span></h2></label>
    </div>
    <div class="col-xs-2">
        <select name="class_type" id="class_type" class="  form-control input-lg" style="width:200px" autocomplete="off">
            <option >Economy</option>
            <option >Premium Economy</option>
            <option >Club World</option>
            <option >First Class</option>
        </select>
    </div>
 </div>

To będzie

<div class="form-group">
<div class="col-lg-12">
  <div class="row">
    <div class="col-xs-3">
        <label for="class_type"><h2><span class=" label label-primary">Class Type</span></h2></label>
    </div>
    <div class="col-xs-2">
        <select name="class_type" id="class_type" class="  form-control input-lg" style="width:200px" autocomplete="off">
            <option >Economy</option>
            <option >Premium Economy</option>
            <option >Club World</option>
            <option >First Class</option>
        </select>
    </div>
</div>
</div>
welboy
źródło
3

Sposób, w jaki to rozwiązałem, polegał po prostu na dodaniu nadpisania dla wszystkich moich pól tekstowych w głównym css mojej witryny, tak jak to:

.form-control {
    display:initial !important;
}
Hugo Nava Kopp
źródło
2
Co to robi?
AgilePro,
1

wszystkie, sprawdź zaktualizowany kod, którego musimy użyć

 form-control-static not only form-control

http://jsfiddle.net/tusharD/58LCQ/34/

Dziękuję i pozdrawiam

Tushar Dhingra
źródło
0

W Bootstrap 4 for Horizontal element można używać .rowz .col-*-*klasami do określania szerokości etykiet i kontrolek. zobacz ten link .

Jeśli chcesz wyświetlić serię etykiet, kontrolek formularzy i przycisków w jednym poziomym wierszu, możesz użyć .form-inlinetego łącza, aby uzyskać więcej informacji

Shojaeddin
źródło
Pytanie konkretnie dotyczy Bootstrap 3.
blupointmedia
1
Miałem te same problemy z bootstrapem 4 i opublikowałem go, aby pomóc komuś innemu
Shojaeddin
-2

Lub możesz to zrobić:

<table>
  <tr>
    <td><b>Return:</b></td>
    <td><input id="return1" name='return1' 
              class=" input input-sm" style="width:150px"
              type="text" value='8/28/2013'></td>
  </tr>
</table>

Wypróbowałem każdą z powyższych sugestii i żadna z nich nie działała. Nie chcę wybierać stałej liczby kolumn w siatce 12 kolumn. Chcę, aby monit i dane wejściowe zaraz po nim, a kolumny były rozciągane w razie potrzeby.

Tak, wiem, o to właśnie chodzi w bootstrapie. I NIGDY nie powinieneś używać stołu. Ponieważ DIV jest o wiele lepszy niż tabele. Problem w tym, że tabele, wiersze i komórki faktycznie DZIAŁAJĄ.

TAK - NAPRAWDĘ WIEM, że są fanatycy CSS, a odruchowa reakcja nigdy nie polega na używaniu TABLE, TR i TD. Tak, wiem, że DIV class = "table" z DIV class = "row" i DIV class = "cell" jest dużo lepsze. Z wyjątkiem sytuacji, gdy to nie działa i jest wiele przypadków. Nie uważam, że ludzie powinni ślepo ignorować takie sytuacje. Czasami TABLE / TR / TD będzie działać dobrze i nie ma powodu, aby stosować bardziej skomplikowane i delikatniejsze podejście tylko dlatego, że jest uważane za bardziej eleganckie. Deweloper powinien zrozumieć, jakie są zalety różnych podejść i kompromisy, i nie ma absolutnej zasady, że DIV są lepsze.

"Przykład - na podstawie tej dyskusji przekonwertowałem kilka istniejących tds i trs na div. 45 minut majstrowania przy tym, próbując ustawić wszystko obok siebie i poddałem się. TD z powrotem za 10 sekund później - działa - od razu - we wszystkich przeglądarkach, nic więcej do zrobienia. Proszę, postaraj się, abym zrozumiał - jakie masz uzasadnienie, że chcę, żebym zrobił to w inny sposób! ” Zobacz [ https://stackoverflow.com/a/4278073/1758051]

I to: "

Układ powinien być łatwy. Fakt, że są artykuły napisane o tym, jak osiągnąć dynamiczny układ trzech kolumn z nagłówkiem i stopką w CSS, pokazuje, że jest to kiepski system układu. Oczywiście możesz go uruchomić, ale w Internecie są dosłownie setki artykułów o tym, jak to zrobić. Prawie nie ma takich artykułów dla podobnego układu z tabelami, ponieważ jest to oczywiste. Bez względu na to, co powiesz przeciwko tabelom i na korzyść CSS, ten jeden fakt odwraca wszystko: podstawowy układ trzech kolumn w CSS jest często nazywany „Świętym Graalem”. [ Https://stackoverflow.com/a/4964107/ 1758051]

Nie widziałem jeszcze sposobu, aby zmusić DIV, aby zawsze ustawiali się w kolumnie we wszystkich sytuacjach. Ciągle pokazywane są trywialne przykłady, które tak naprawdę nie napotykają problemów. „Responsywność” polega na zapewnieniu sposobu, w jaki nie zawsze będą ustawiać się w jednej kolumnie. Jeśli jednak naprawdę chcesz mieć kolumnę, możesz marnować godziny, próbując zmusić DIV do pracy. Czasami musisz użyć odpowiedniej technologii bez względu na to, co mówią zeloci.

AgilePro
źródło
2
Tabele nie są responsywne.
Pedro Moreira,
Wszyscy wiedzą, że tabele nie przekształcają się w nie-tabele. Ale jeśli potrzebujesz wiersza, który ZAWSZE pozostaje wierszem. Po prostu nie możesz tego wymusić za pomocą tagów DIV. Ludzie zachowują się tak, jakbyś zawsze chciał reagować, ale to, co robisz, jest mylone „przez większość czasu” z „przez cały czas”. W chwili pisania tego tekstu ta odpowiedź miała dwa głosy przeciw. Jeśli zgadzasz się z moim punktem tutaj, że czasami potrzebujesz po prostu TR, daj znać innym.
AgilePro,
Masz prawo do własnej opinii, ale myślę, że ogólny konsensus jest taki, że nigdy nie powinieneś używać tabel do niczego innego, co pokazuje dane tabelaryczne. Tabele są po prostu zbyt ograniczone pod względem tego, co mogą zrobić i jak można je dostosowywać. Jeśli nadal potrzebujesz umożliwić elementom div przepływ jak wiersze i kolumny tabeli, spójrz na flex: css-tricks.com/snippets/css/a-guide-to-flexbox
Pedro Moreira