Bootstrap: căn chỉnh đầu vào với nút


299

Tại sao các nút và đầu vào không khớp tốt trong Bootstrap?

Tôi đã thử một cái gì đó đơn giản như:

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

Nút này 5pxthấp hơn đầu vào trong chrome / firefox.

nhập mô tả hình ảnh ở đây

Câu trả lời:


551

Twitter Bootstrap 4

Trong Twitter Bootstrap 4, các đầu vào và nút có thể được căn chỉnh bằng cách sử dụng input-group-prependinput-group-appendcác lớp (xem https://getbootstrap.com/docs/4.0/components/input-group/#button-addons )

Nút nhóm ở bên trái (trả trước)

<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>

Nút nhóm ở bên phải (nối thêm)

<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>

Twitter Bootstrap 3

Như được hiển thị trong câu trả lời của @abimelex, các đầu vào và nút có thể được căn chỉnh bằng cách sử dụng các .input-grouplớp (xem http://getbootstrap.com/components/#input-groups-buttons )

Nút nhóm ở bên trái

<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>

Nút nhóm ở bên phải

<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>

Giải pháp này đã được thêm vào để giữ cho câu trả lời của tôi được cập nhật, nhưng vui lòng dán phiếu bầu lên câu trả lời do @abimelex cung cấp .


Twitter Bootstrap 2

Bootstrap cung cấp một .input-appendlớp, hoạt động như một phần tử trình bao bọc và sửa lỗi này cho bạn:

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

Như @OleksiyKhilkevich đã chỉ ra trong câu trả lời của mình, có một cách thứ hai để căn chỉnh inputbuttonbằng cách sử dụng .form-horizontallớp:

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

Sự khác biệt

Sự khác biệt giữa hai lớp này là .input-appendsẽ đặt phần tử buttonlên trên inputphần tử (để chúng trông giống như chúng được gắn vào), nơi .form-horizontalsẽ đặt một khoảng trắng giữa chúng.

-- Ghi chú --

Để cho phép các phần tử inputbuttoncác phần tử nằm cạnh nhau mà không có khoảng cách, phần tử font-sizeđã được đặt thành 0trong .input-appendlớp (phần này sẽ loại bỏ khoảng cách màu trắng giữa các inline-blockphần tử). Điều này có thể có ảnh hưởng xấu đến kích thước phông chữ trong thành inputphần nếu bạn muốn ghi đè mặc định bằng cách sử dụng emhoặc %phép đo.


5
Cảm ơn câu trả lời của bạn, nhưng tôi cảm thấy có gì đó không ổn ở đây. Chắc chắn tôi không phải là người đầu tiên muốn các thành phần bootstrap xếp hàng với các thành phần biểu mẫu.
pguardiario

@pguardiario - bạn hoàn toàn đúng. Nó có vẻ sai và sau khi tát não tôi, tôi nhớ .input-appendlớp.
Đầu tôi đau

1
Có vẻ lạ khi bạn sẽ cần một lớp bao bọc để làm điều này. Họ không nên xếp hàng theo mặc định?
opsb

2
@opsb nếu họ chiếm cùng một không gian dọc thì có, họ sẽ làm thế. Tuy nhiên, các trường đầu vào trong twitter bootstrap có một margin-bottom: 9pxnhưng các nút không vì vậy chúng không chiếm cùng một không gian dọc. Vì cả hai yếu tố đều có middlesự liên kết dọc, nút được bù do sự khác biệt. Sử dụng .input-appendtrình bao bọc sẽ loại bỏ giá trị dưới lề này.
Đầu tôi đau

Phải, tôi đoán rằng nó sẽ phá vỡ các bố cục biểu mẫu khác nếu chúng có cùng chiều cao theo mặc định.
opsb

187

bạn có thể sử dụng thuộc tính nút nhóm đầu vào để áp dụng nút trực tiếp vào trường đầu vào.

Bootstrap 3 & 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 -->

Hãy xem tài liệu Nhóm đầu vào BS4 để biết thêm nhiều ví dụ.

ví dụ cho nút nhóm đầu vào bs3


3
Những cái khác không làm việc cho tôi, tuy nhiên cái này đã làm theo cách tôi muốn. Cảm ơn bạn.
Colandus

1
Đối với tôi, nó không hoạt động nếu tạo một thẻ span bổ sung để phân bổ lớp, nhưng nó hoạt động nếu tôi thêm lớp đó vào thẻ div:<div class="form-group input-group-btn">
J0ANMM

Câu trả lời này đã lỗi thời đối với BS4, hãy xem câu trả lời của tôi.
Alexander Kim

37

Chỉ cần ngẩng cao đầu, dường như có lớp CSS đặc biệt cho cái này được gọi là form-horizontal

đầu vào-append có một tác dụng phụ khác, đó là giảm kích thước phông chữ xuống 0


1
Điểm tốt +1 - Tôi đã phải xem xét lý do tại sao họ sử dụng font-size: 0và học được điều gì đó mới :) Cảm ơn!
Đầu tôi đau

30

Sử dụng .form-inline = Điều này sẽ căn chỉnh nhãn trái và điều khiển khối nội tuyến cho bố cục nhỏ gọn

Ví dụ: http://jsfiddle.net/hSuy4/292/

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

.form-vertical = Phải căn chỉnh nhãn và thả chúng sang trái để làm cho chúng xuất hiện trên cùng một dòng với các điều khiển tốt hơn cho bố cục biểu mẫu 2 cột.

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

Ví dụ: http://twitter.github.io/bootstrap/base-css.html#forms


2
Tôi có thể xác nhận rằng nó form-inlinehoạt động cho Bootstrap 3. Cảm ơn.
austin

Tuyệt diệu! Chính xác những gì tôi cần cho một hình thức rắc rối!
it_notjack

Có vẻ như .form-inline chỉ hoạt động trong chế độ xem rộng tối thiểu 768px: w3schools.com/bootstrap/bootstrap_forms.asp
anemaria20

16

Tôi đã thử trên tất cả và kết thúc với một vài thay đổi mà tôi muốn chia sẻ. Đây là mã phù hợp với tôi (tìm ảnh chụp màn hình đính kèm):

<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>

nhập mô tả hình ảnh ở đây

Nếu bạn muốn thấy nó hoạt động, chỉ cần sử dụng mã dưới đây trong trình chỉnh sửa của bạn:

<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>

Hi vọng điêu nay co ich.


Phiên bản Bootstrap này dùng để làm gì? Và vấn đề nào gây ra không sử dụng style="width:0;"?
Karl Adler

Nếu bạn không sử dụng chiều rộng: 0 thì điều này sẽ chiếm toàn bộ chiều rộng của trang.
Abhimanyu

cách bootstrap sẽ kết hợp với một yếu tố col như <div class="col-md-4">Không cần chowidth: 0
Karl Adler

tôi đặt vì tôi không muốn các điều khiển đầu vào chiếm toàn bộ chiều rộng của màn hình
Abhimanyu

6

Tôi cũng đang vật lộn với vấn đề tương tự. Các lớp bootstrap tôi sử dụng không hoạt động đối với tôi. Tôi đã đưa ra một cách giải quyết, như sau:

<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>

Về cơ bản, tôi ghi đè lên thuộc tính hiển thị của lớp "điều khiển biểu mẫu" và sử dụng các thuộc tính kiểu khác để sửa kích thước và vị trí.

Sau đây là kết quả:

nhập mô tả hình ảnh ở đây



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

Tôi đã thử tất cả các mã trên và không ai trong số chúng sửa được các vấn đề của tôi. Đây là những gì làm việc cho tôi. Tôi đã sử dụng add-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

Không liên quan trực tiếp, trừ khi bạn có mã tương tự nhưng tôi chỉ nhận thấy một hành vi lạ đối với form-inline, bootstrap 3.3.7

Tôi đã không sử dụng hàng và ô cho việc này vì đây là một dự án máy tính để bàn, nếu thẻ mở nằm dưới bảng (trong trường hợp này):

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

Các yếu tố hình thức sẽ xếp chồng lên nhau.

Chuyển đổi và nó xếp hàng đúng cách.

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

Safari 10.0.2 và Chrome mới nhất không có sự khác biệt nào. Có thể bố cục của tôi đã sai nhưng nó không tha thứ lắm.


1

Lấy một float đầu vào như bên trái. Sau đó lấy nút và thả nó ngay. Bạn có thể xóa lớp tiền tố khi bạn mất nhiều hơn một khoảng cách.

<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"

Sử dụng điều này để thay đổi div của bạn lên hoặc xuống trong hàng của bạn. Công trình kỳ diệu cho tôi.

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.