Đã sửa các nút chiều rộng bằng Bootstrap


182

Bootstrap có hỗ trợ các nút chiều rộng cố định không? Hiện tại nếu tôi có 2 nút, "Lưu" và "Tải xuống", kích thước nút thay đổi dựa trên nội dung.

Ngoài ra cách mở rộng Bootstrap đúng là gì?


Theo chiều rộng cố định, bạn có nghĩa là nó không phát triển với nội dung bên trong nó? Các nút chỉ bị giới hạn bởi văn bản bên trong.
Andres Ilich

@AndresIlich Hiện tại Nếu tôi có 2 nút "Lưu" và "Tải xuống" thay đổi kích thước nút dựa trên nội dung
aWebDeveloper

Vì vậy, bạn muốn hai nút có cùng chiều rộng chính xác?
Andres Ilich

Câu trả lời:


318

Bạn cũng có thể sử dụng .btn-blocklớp trên nút, để nó mở rộng theo chiều rộng của cha mẹ.

Nếu cha là phần tử chiều rộng cố định, nút sẽ mở rộng để lấy toàn bộ chiều rộng. Bạn có thể áp dụng đánh dấu hiện có vào thùng chứa để đảm bảo các nút cố định / chất lỏng chỉ chiếm không gian cần thiết.

<div class="span2">
<p><button class="btn btn-primary btn-block">Save</button></p>
<p><button class="btn btn-success btn-block">Download</button></p>
</div>


71

Để làm điều này, bạn có thể tạo ra một chiều rộng mà bạn cảm thấy ổn cho cả hai nút và sau đó tạo một lớp tùy chỉnh với chiều rộng và thêm nó vào các nút của bạn như sau:

CSS

.custom {
    width: 78px !important;
}

Sau đó tôi có thể sử dụng lớp này và thêm nó vào các nút như vậy:

<p><button href="#" class="btn btn-primary custom">Save</button></p>
<p><button href="#" class="btn btn-success custom">Download</button></p>

Bản trình diễn: http://jsfiddle.net/yNsxU/

Bạn có thể lấy lớp tùy chỉnh mà bạn tạo và đặt nó bên trong biểu định kiểu của riêng bạn, mà bạn tải sau biểu định kiểu bootstrap. Chúng tôi làm điều này bởi vì bất kỳ thay đổi nào bạn đặt bên trong biểu định kiểu bootstrap có thể vô tình bị mất khi bạn cập nhật khung, chúng tôi cũng muốn các thay đổi của bạn được ưu tiên hơn các giá trị mặc định.


2
sử dụng emđơn vị thay vì pixel, chúng giúp bạn đặt chiều rộng theo độ dài ký tự
svarog

2
@DanDascalescu ~ 2 năm sau tôi không đồng ý. Tác giả có thể không phải là sau khi làm cho các nút mở rộng để lấp đầy toàn bộ cha mẹ, có thể là một nửa trang cho một nút có nội dung 'lưu'. Tôi muốn giới thiệu một cái gì đó như thế này nhưng với các truy vấn phương tiện nếu cần. Luôn có javascript để làm cho nó lớn như nút lớn nhất, đây thường là con đường tôi tránh xa
Jacob McKay

38

Nếu bạn đặt các nút của mình bên trong div với lớp "btn-group", các nút bên trong sẽ kéo dài cùng kích thước với nút lớn nhất.

ví dụ:

<div class="btn-group">
  <button type="button" class="btn btn-default">Left</button>
  <button type="button" class="btn btn-default">Middle</button>
  <button type="button" class="btn btn-default">Right</button>
</div> 

Nhóm nút Bootstrap


@tonjo: bạn có thể mở rộng lý do tại sao nó không hoạt động? Tôi thấy rằng trên thực tế nó có - ví dụ, xem biến thể dọc .
Dan Dascalescu

2
Tôi đang cố gắng để đạt được chức năng tương tự và mã ở trên cũng không hoạt động với tôi. @DanDascalescu bạn có tìm được cách khác không?
GelatinFox 30/03/2015

1
Các nút cũng phải là lớp btn-block để nó hoạt động, ít nhất là đối với tôi.
Gabriel

5
Không, điều này không hoạt động - các nút không cùng kích thước.
Antoniossss

Tôi đã thêm một lề trái vì tôi muốn các nút được tách ra. Làm việc hoàn hảo. Tất cả cùng chiều rộng.
Tomas Gonzalez

13

Đối với các nút của bạn, bạn có thể tạo một bộ chọn CSS khác cho các lớp nút đặc biệt đó với chiều rộng tối thiểu và chiều rộng tối đa được chỉ định. Vì vậy, nếu nút của bạn là

<button class="save_button">Save</button>

Trong tệp CSS Bootstrap của bạn, bạn có thể tạo một cái gì đó như

.save_button {
    min-width: 80px;
    max-width: 80px;
}

Bằng cách này, nó sẽ luôn duy trì 80px ngay cả khi bạn có thiết kế đáp ứng.

Theo đúng cách mở rộng Bootstrap, hãy xem chủ đề này:

Mở rộng Bootstrap


4

Với BS 4, bạn cũng có thể sử dụng kích thước và áp dụng w-100 để nút có thể chiếm toàn bộ chiều rộng của thùng chứa cha.


3

Mở rộng câu trả lời @ kravits88:

Điều này sẽ kéo dài các nút để phù hợp với toàn bộ chiều rộng:

<div className="btn-group-justified">
<div className="btn-group">
  <button type="button" className="btn btn-primary">SAVE MY DEAR!</button>
</div>
<div className="btn-group">
  <button type="button" className="btn btn-default">CANCEL</button>
</div>
</div>

Đây là câu trả lời đúng cho Bootstrap 3.3. btn-group-justifiedlà lớp chính. Xem tài liệu tại đây: getbootstrap.com/docs/3.3/components/ trộm
CXJ

3

btn-group-justified và btn-group chỉ hoạt động cho nội dung tĩnh nhưng không hoạt động trên các nút được tạo động và việc cố định bằng nút trong css là không thực tế vì nó vẫn ở cùng độ rộng, thậm chí tất cả nội dung đều ngắn.

Giải pháp của tôi: đặt cùng một lớp vào nhóm các nút sau đó lặp lại cho tất cả chúng, lấy chiều rộng của nút dài nhất và áp dụng nó cho tất cả

var bwidth=0
$("button.btnGroup").each(function(i,v){
    if($(v).width()>bwidth) bwidth=$(v).width();
});
$("button.btnGroup").width(bwidth);

Sản lượng mẫu tại đây


1

Nút chiều rộng khối có thể dễ dàng trở thành nút phản hồi nếu thùng chứa phụ phản hồi. Tôi nghĩ rằng việc sử dụng kết hợp chiều rộng cố định và đường dẫn chọn chi tiết hơn thay vì! Quan trọng vì:

1) Nó không phải là hack (thiết lập chiều rộng tối thiểu và chiều rộng tối đa giống nhau là hack)

2) Không sử dụng thẻ quan trọng! Đó là thông lệ xấu

3) Sử dụng chiều rộng nên sẽ rất dễ đọc và bất cứ ai hiểu cách hoạt động xếp tầng trong CSS sẽ thấy những gì đang diễn ra (có thể để lại nhận xét CSS cho việc này?)

4) Kết hợp các bộ chọn của bạn áp dụng cho nút được nhắm mục tiêu của bạn để tăng độ chính xác

.parent_element .btn.btn-primary.save-button {
    width: 80px;
}

0

Chỉ cần có cùng một nhu cầu và không được bão hòa với việc xác định chiều rộng cố định.

Nó cũng vậy với jquery:

    var max = Math.max ($("#share_cancel").width (), $("#share_commit").width ());
    $("#share_cancel").width (max);
    $("#share_commit").width (max); 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

    <button type="button" class="btn btn-secondary" id="share_cancel">SHORT</button>
    <button type="button" class="btn btn-success" id="share_commit">LOOOOOOOOONG</button>


0

Cách tốt nhất để giải quyết vấn đề của bạn là sử dụng khối btn-block với độ rộng cột mong muốn.

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js"></script>
    <link href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" rel="stylesheet"/>


    <div class="col-md-12">
      <button class="btn btn-primary btn-block">Save</button>
    </div>
    <div class="col-md-12">
        <button class="btn btn-success btn-block">Download</button>
    </div>


0

Ở đây tôi tìm thấy một giải pháp bằng cách so sánh các nút trong thành phần nhóm nút. Giải pháp đơn giản là lấy cái có chiều rộng lớn nhất và đặt chiều rộng cho các nút khác. Vì vậy, chúng có thể có chiều rộng bằng nhau.

    function EqualizeButtons(parentElementId) {

    var longest = 0; 
    var element = $(parentElementId);

    element.find(".btn:not(.button-controlled)").each(function () {
        $(this).addClass('button-controlled');
        var width = $(this).width();
        if (longest < width) longest = width;

    }).promise().done(function () {
        $('.button-controlled').width(longest);
    });
}

Nó làm việc như một say mê.


-4

Đây có thể là một giải pháp ngớ ngẩn, nhưng tôi đã tìm kiếm một giải pháp cho vấn đề này và đã lười biếng.

Dù sao, sử dụng input class = "btn ..." ... thay vì nút và đệm thuộc tính value = với khoảng trắng để tất cả chúng có cùng chiều rộng hoạt động khá tốt.

ví dụ :

<input type="submit" class="btn btn-primary" value="   Calculate   "/>    
<input type="reset" class="btn btn-primary"value="     Reset       "/>

Tôi đã không sử dụng bootstrap lâu như vậy và có lẽ có một lý do chính đáng để không sử dụng phương pháp này, nhưng nghĩ rằng tôi cũng có thể chia sẻ


Nếu bạn sử dụng <button>thẻ thì bạn cần sử dụng &nbsp;, ví dụ : <button type="button" class="btn btn-default">&nbsp;Edit&nbsp;</button>.
Endy Tjahjono

Điều này sẽ không hoạt động trong trường hợp của tôi <a class="btn btn-default btn-sm" href="read.php?id='.$row['id'[.'"> Chỉnh sửa </a>
Mina Gabriel
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.