Hình thức nội tuyến bên trong một hình thức ngang trong twitter bootstrap?


199

Cách tốt nhất để thiết kế một biểu mẫu trông như thế này (vui lòng xem liên kết bên dưới) trong twitter bootstrap mà không cần bất kỳ lớp học tự chế nào?

Có thể đặt một biểu mẫu nội tuyến bên trong một biểu mẫu ngang như ví dụ dưới đây không:

ảnh chụp màn hình của mục tiêu UI

Câu trả lời:


316

Đừng lồng <form>thẻ, điều đó sẽ không hoạt động. Chỉ cần sử dụng các lớp Bootstrap.

Bootstrap 3

<form class="form-horizontal" role="form">
    <div class="form-group">
      <label for="inputType" class="col-md-2 control-label">Type</label>
      <div class="col-md-3">
          <input type="text" class="form-control" id="inputType" placeholder="Type">
      </div>
    </div>
    <div class="form-group">
        <span class="col-md-2 control-label">Metadata</span>
        <div class="col-md-6">
            <div class="form-group row">
                <label for="inputKey" class="col-md-1 control-label">Key</label>
                <div class="col-md-2">
                    <input type="text" class="form-control" id="inputKey" placeholder="Key">
                </div>
                <label for="inputValue" class="col-md-1 control-label">Value</label>
                <div class="col-md-2">
                    <input type="text" class="form-control" id="inputValue" placeholder="Value">
                </div>
            </div>
        </div>
    </div>
</form>

Bạn có thể đạt được hành vi đó theo nhiều cách, đó chỉ là một ví dụ. Kiểm tra nó trên bootply này

Bootstrap 2

<form class="form-horizontal">
    <div class="control-group">
        <label class="control-label" for="inputType">Type</label>
        <div class="controls">
            <input type="text" id="inputType" placeholder="Type">
        </div>
    </div>
    <div class="control-group">
        <span class="control-label">Metadata</span>
        <div class="controls form-inline">
            <label for="inputKey">Key</label>
            <input type="text" class="input-small" placeholder="Key" id="inputKey">
            <label for="inputValue">Value</label>
            <input type="password" class="input-small" placeholder="Value" id="inputValue">
        </div>
    </div>
</form>

Lưu ý rằng tôi đang sử dụng .form-inlineđể có được kiểu dáng propper bên trong a .controls.
Bạn có thể kiểm tra nó trên jsfiddle này


3
Bạn cũng có thể thêm các lớp biểu mẫu trên div, trong trường hợp của tôi, tôi đã sử dụng lớp biểu mẫu dọc trên div span6 và lớp biểu mẫu ngang trên div
span12

3
Điều này hoạt động cho bootstrap2. Đối với bootstrap 3, hãy truy cập: stackoverflow.com/questions/18429121/
trộm

1
Trong bootstrap 3, nếu có một khoảng trống bên dưới đầu vào, hãy xóa "nhóm biểu mẫu". Nó thêm một khoảng trống 15px ở dưới cùng của mỗi div mà bạn sử dụng nó.
Darkzeach

Bạn không cần kết hợp nhóm biểu mẫu với hàng tại ví dụ Khóa + Giá trị. @ rap-2-h: Bạn có thể sao chép dán mã ví dụ và nhấp vào chạy.
Sebastian

Điều này hoạt động nhưng tôi đã có thể đơn giản hóa nó trong phiên bản Bootstrap 3 hiện tại ... Có vẻ như chìa khóa cho giải pháp này chỉ để đặt bất kỳ điều khiển đầu vào nào trong div, ngoài ra cách bố trí lưới col-xx không hoạt động. Không cần thiết phải lồng nhóm biểu mẫu, col-xx- # cha có thể chia sẻ cùng một div và không cần lớp "hàng" vì biểu mẫu mẹ đã là biểu mẫu nằm ngang (100%).
Tony Wall

92

Đối với bootstrap 3, ví dụ trên hoạt động nhưng quá phức tạp, thay vì sử dụng nhóm biểu mẫu sử dụng biểu mẫu nội tuyến cho các trường bạn muốn nội tuyến.

Ví dụ:

<div class="form-group">
     <label>CVV</label>
     <input type="text" size="4" class="form-control" />
</div>

<div class="form-inline">
      <label>Expiration (MM/YYYY)</label><br>
      <input type="text" size="2" class="form-control" /> / <input type="text" size="4" class="form-control" />
</div>

Nó có thể không hoạt động cho bạn vì lớp điều khiển biểu mẫu đặt "display: block". Nếu bạn ghi đè lên "display: inline-block" thì nó sẽ hoạt động.
Cédric Guillemette

1
Đây không phải là làm việc. Cố gắng làm những gì câu hỏi yêu cầu, điều này là không thể với form-inline.
Sebastian

Vấn đề duy nhất với điều này là khu vực phụ không được mở rộng thành toàn bộ chiều rộng và mọi nỗ lực sử dụng kích thước lưới sẽ bị đè bẹp so với chiều rộng nội dung tối thiểu được yêu cầu. Giải pháp khác tốt hơn là không có quá nhiều div (xem bình luận của tôi ở đó).
Tony Wall

3
Bạn phải bọc tất cả các nhóm biểu mẫu trong lớp biểu mẫu
ymakux

jsfiddle.net/9637fywb Điều này dường như không hoạt động như mong muốn - sử dụng CDN bootstrap mới nhất hiện tại (3.3.5). Ví dụ này cũng không chiếm hai nhãn bên trong phần "nội tuyến". Có lẽ fiddle đang thiếu một trình bao bọc nào đó, nhưng có vẻ như điều đó nên được đưa vào câu trả lời, nếu vậy.
emragins

14

Điều này sử dụng twitter bootstrap 3.x với một lớp css để có được các nhãn để ngồi trên đầu vào. Đây là một liên kết tuyệt vời , đảm bảo mở rộng bảng kết quả đủ rộng để thấy hiệu quả.

HTML:

  <div class="row myform">
     <div class="col-md-12">
        <form name="myform" role="form" novalidate>
           <div class="form-group">
              <label class="control-label" for="fullName">Address Line</label>
              <input required type="text" name="addr" id="addr" class="form-control" placeholder="Address"/>
           </div>

           <div class="form-inline">
              <div class="form-group">
                 <label>State</label>
                 <input required type="text" name="state" id="state" class="form-control" placeholder="State"/>
              </div>

              <div class="form-group">
                 <label>ZIP</label>
                 <input required type="text" name="zip" id="zip" class="form-control" placeholder="Zip"/>
              </div>
           </div>

           <div class="form-group">
              <label class="control-label" for="country">Country</label>
              <input required type="text" name="country" id="country" class="form-control" placeholder="country"/>
           </div>
        </form>
     </div>
  </div>

CSS:

.myform input.form-control {
   display: block;  /* allows labels to sit on input when inline */
   margin-bottom: 15px; /* gives padding to bottom of inline inputs */
}

2

Vì bootstrap 4 sử dụng div class = "form-row" kết hợp với div class = "form-group col-X". X là chiều rộng bạn cần. Bạn sẽ nhận được các cột nội tuyến tốt đẹp. Xem fiddle .

<form class="form-horizontal" name="FORMNAME" method="post" action="ACTION" enctype="multipart/form-data">
    <div class="form-group">
        <label class="control-label col-sm-2" for="naam">Naam:&nbsp;*</label>
        <div class="col-sm-10">
            <input type="text" require class="form-control" id="naam" name="Naam" placeholder="Uw naam" value="{--NAAM--}" >
            <div id="naamx" class="form-error form-hidden">Wat is uw naam?</div>
        </div>
    </div>

    <div class="form-row">

        <div class="form-group col-5">
            <label class="control-label col-sm-4" for="telefoon">Telefoon:&nbsp;*</label>
            <div class="col-sm-12">
                <input type="tel" require class="form-control" id="telefoon" name="Telefoon" placeholder="Telefoon nummer" value="{--TELEFOON--}" >
                <div id="telefoonx" class="form-error form-hidden">Wat is uw telefoonnummer?</div>
            </div>
        </div>

        <div class="form-group col-5">
            <label class="control-label col-sm-4" for="email">E-mail: </label>
            <div class="col-sm-12">
                <input type="email" require class="form-control" id="email" name="E-mail" placeholder="E-mail adres" value="{--E-MAIL--}" >
                <div id="emailx" class="form-error form-hidden">Wat is uw e-mail adres?</div>
                    </div>
                </div>

        </div>

    <div class="form-group">
        <label class="control-label col-sm-2" for="titel">Titel:&nbsp;*</label>
        <div class="col-sm-10">
            <input type="text" require class="form-control" id="titel" name="Titel" placeholder="Titel van uw vraag of aanbod" value="{--TITEL--}" >
            <div id="titelx" class="form-error form-hidden">Wat is de titel van uw vraag of aanbod?</div>
        </div>
    </div>
<from>

1

Tôi biết đây là một câu trả lời cũ nhưng đây là những gì tôi thường làm:

CSS:

.form-control-inline {
   width: auto;
   float:left;
   margin-right: 5px;
}

Sau đó bọc các trường bạn muốn được nội tuyến trong div và thêm .form-control-inline vào đầu vào, ví dụ:

HTML

<label class="control-label">Date of birth:</label>
<div>
<select class="form-control form-control-inline" name="year"> ... </select>
<select class="form-control form-control-inline" name="month"> ... </select>
<select class="form-control form-control-inline" name="day"> ... </select>
</div>

1

để làm cho nó đơn giản, chỉ cần thêm một class="form-inline"trước khi đầu vào.

thí dụ:

<div class="col-md-4 form-inline"> //add the class here...
     <label>Lot Size:</label>
     <input type="text" value="" name="" class="form-control" >
 </div>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.