Bootstrap nhập văn bản toàn chiều rộng trong mẫu nội tuyến


138

Tôi đang vật lộn để tạo ra một hộp văn bản phù hợp với toàn bộ chiều rộng của khu vực chứa của tôi .

<div class="row">
    <div class="col-md-12">
        <form class="form-inline" role="form">           
                <input type="text" class="form-control input-lg" id="search-church" placeholder="Your location (City, State, ZIP)">
                <button type="submit" class="btn btn-lg">Search</button>            
        </form>
    </div>
</div>

Khi tôi làm như trên, hai yếu tố hình thức là thẳng hàng, như tôi mong đợi, nhưng tốt nhất là không chiếm nhiều hơn một vài cột. Di chuột qua col-md-12div trong firebird cho thấy nó chiếm hết chiều rộng dự kiến. Đó chỉ là kiểu nhập văn bản dường như không điền. Tôi thậm chí đã thử thêm một giá trị độ rộng trong dòng nhưng nó không thay đổi gì cả. Tôi biết điều này nên đơn giản, chỉ cảm thấy thực sự ngu ngốc bây giờ.

Đây là một câu đố: http://jsfiddle.net/52VtD/4119/embedded/result/

BIÊN TẬP:

Câu trả lời được lựa chọn là kỹ lưỡng trong mọi cách và một sự trợ giúp tuyệt vời. Đó là những gì tôi đã sử dụng. Tuy nhiên, tôi nghĩ rằng vấn đề ban đầu của tôi thực sự là một vấn đề với mẫu MVC5 mặc định trong Visual Studio 2013. Nó chứa vấn đề này trong Site.css:

input,
select,
textarea {
    max-width: 280px;
}

Rõ ràng là đã chặn đầu vào văn bản mở rộng một cách thích hợp ... Cảnh báo công bằng cho người dùng mẫu ASP.NET trong tương lai ...


6
Tôi chỉ muốn thứ hai bạn tìm thấy về vấn đề với mẫu MVC5 mặc định. Tôi chỉ dành một giờ để nghiên cứu vấn đề này và (giả vờ) chửi bới tại Bootstrap trước khi tôi tìm thấy một mẫu hoạt động trong jsfiddle khiến tôi bắt đầu lại với một trang HTML sạch và nó hoạt động tốt. Chỉ sau đó tôi mới thấy có vấn đề với mẫu VS2013 và tình cờ thấy bài đăng này. Goodness biết tại sao quyết định cho chiều rộng tối đa, nhưng nó cho thấy bạn phải cẩn thận khi sử dụng mã của người khác. Đó cũng là bằng chứng để quay trở lại vấn đề cơ bản khi bị mắc kẹt với một vấn đề như thế này.
Jason Snelders

2
Cảm ơn, cũng sử dụng mẫu asp.net, nhưng tôi đã đặt chiều rộng tối đa của đầu vào thành không, nhưng nó vẫn không lấy toàn bộ chiều rộng, chỉ khi tôi đặt nó thành 100% theo cách thủ công. Nhưng sau đó nút bên phải của nó đi xuống, và tôi muốn nó ở cùng một dòng.
Ronen Festinger

@Killnine Việc chỉnh sửa trong câu hỏi của bạn đã giải quyết được vấn đề đau đầu của tôi. Thực tế đó là vấn đề, cảm ơn bạn đã chỉnh sửa bài viết của bạn!
Flame_Phoenix

Tôi đã xóa bit CSS đó khỏi tệp site.css của mình và tôi vẫn gặp vấn đề tương tự. Có ý kiến ​​gì không?
dave317

1
Dayuu cựu! Đã đấu tranh với điều này và hóa ra đó là một vấn đề MVC! Thật ngu ngốc khi tôi không kiểm tra các thuộc tính css của hộp văn bản! Cảm ơn đã chỉ ra điều này!
Hajjat

Câu trả lời:


99

Các tài liệu bootstrap nói về điều này :

Yêu cầu độ rộng tùy chỉnh Đầu vào, chọn và textareas rộng 100% theo mặc định trong Bootstrap. Để sử dụng biểu mẫu nội tuyến, bạn sẽ phải đặt chiều rộng cho các điều khiển biểu mẫu được sử dụng trong.

Độ rộng mặc định là 100% vì tất cả các thành phần của biểu mẫu nhận được khi chúng có lớp form-controlkhông áp dụng nếu bạn sử dụng form-inlinelớp trên biểu mẫu của mình.

Bạn có thể xem bootstrap.css (hoặc .less, bất cứ điều gì bạn thích) nơi bạn sẽ tìm thấy phần này:

.form-inline {

  // Kick in the inline
  @media (min-width: @screen-sm-min) {
    // Inline-block all the things for "inline"
    .form-group {
      display: inline-block;
      margin-bottom: 0;
      vertical-align: middle;
    }

    // In navbar-form, allow folks to *not* use `.form-group`
    .form-control {
      display: inline-block;
      width: auto; // Prevent labels from stacking above inputs in `.form-group`
      vertical-align: middle;
    }
    // Input groups need that 100% width though
    .input-group > .form-control {
      width: 100%;
    }

    [...]
  }
}

Có lẽ bạn nên xem các nhóm đầu vào , vì tôi đoán họ có chính xác đánh dấu bạn muốn sử dụng (làm việc ở đây ):

<div class="row">
   <div class="col-lg-12">
    <div class="input-group input-group-lg">
      <input type="text" class="form-control input-lg" id="search-church" placeholder="Your location (City, State, ZIP)">
      <span class="input-group-btn">
        <button class="btn btn-default btn-lg" type="submit">Search</button>
      </span>
    </div>
  </div>
</div>

3
Xem chỉnh sửa của tôi ở trên. Tôi nghĩ rằng Site.css trong mẫu ASP.NET có thể đã đưa tôi đến cái này. Tuy nhiên, đây là một câu trả lời tuyệt vời và rất hữu ích để tham khảo trong tương lai.
Killnine

5
nhóm đầu vào là cách để đi về điều này. Cá nhân, tôi điều chỉnh kiểu nhóm đầu vào giống với biểu mẫu nội tuyến khi tôi không muốn nút ngay bên cạnh đầu vào. Bản demo hoạt động với Bootstrap LESS bao gồm: jsfiddle.net/silb3r/gwxc5c75
cfx

1
đẹp! Tôi biết câu hỏi là dành riêng cho bootstrap, nhưng nếu có ai muốn thả nó vào một trang web bootstrareach (không phải bootstrap LESS;) tôi đã trích xuất các kiểu có liên quan ở đây: stackoverflow.com/a/27413796/1241736
henry

Liên kết Bootstrap trong Fiddle bị hỏng. Có lẽ nó đang trỏ đến một phiên bản mới của Bootstrap và Fiddle không còn hoạt động.
Chloe

@Chloe Bạn nói đúng, fiddle đã sử dụng tệp css bootstrap không còn tồn tại. Tôi vừa cập nhật fiddle, nó hoạt động trở lại.
morten.c

32

có một cái nhìn như thế này:

<form role="form">  
    <div class="row">
      <div class="col-xs-12">
        <div class="input-group input-group-lg">
            <input type="text" class="form-control" />
          <div class="input-group-btn">
            <button type="submit" class="btn">Search</button>
          </div><!-- /btn-group -->
        </div><!-- /input-group -->
      </div><!-- /.col-xs-12 -->
    </div><!-- /.row -->
</form>

http://jsfiddle.net/n6c7v/1/


10

Như đã nêu trong một câu hỏi tương tự , hãy thử loại bỏ các thể hiện của input-grouplớp và xem nếu điều đó có ích.

tham chiếu đến bootstrap:

Điều khiển biểu mẫu cá nhân tự động nhận được một số kiểu dáng toàn cầu. Tất cả văn bản và các thành phần có kiểm soát .form được đặt thành chiều rộng: 100%; theo mặc định Bọc nhãn và điều khiển trong nhóm .form để có khoảng cách tối ưu.


Mỗi cái này không áp dụng cho các hình thức nội tuyến. Do đó, bạn cần nhóm đầu vào để buộc nó phải là 100%
user441058

3

Hãy thử một cái gì đó như dưới đây để đạt được kết quả mong muốn của bạn

input {
    max-width: 100%;
}

1

Với Bootstrap> 4.1, đây chỉ là trường hợp sử dụng các lớp tiện ích flexbox. Chỉ cần có một hộp chứa flexbox bên trong cột của bạn, và sau đó cung cấp cho tất cả các thành phần trong đó lớp "flex-fill". Như với các biểu mẫu nội tuyến, bạn sẽ cần phải tự thiết lập lề / phần đệm cho các phần tử.

.prop-label {
    margin: .25rem 0 !important;
}

.prop-field {
    margin-left: 1rem;
}
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" rel="stylesheet"/>
<div class="row">
	<div class="col-12">
		<div class="d-flex">
			<label class="flex-fill prop-label">Label:</label>
			<input type="text" class="flex-fill form-control prop-field">
		</div>
	</div>
</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.