Làm thế nào để có được chiều rộng bằng nhau của đầu vào và các trường chọn


109

Trên biểu mẫu, tôi có một lựa chọn và hai trường nhập. Các phần tử này được căn chỉnh theo chiều dọc. Thật không may, tôi không thể có được chiều rộng bằng nhau của các phần tử này.

Đây là mã của tôi:

<select name="name1" style="width:198px">
  <option>value1</option>
  <option>value2</option>
</select><br/>
<input type="text" name="id1" style="width:193px"><br/>
<input type="text" name="id2" style="width:193px">

Ví dụ trên, chiều rộng tốt nhất cho phần tử được chọn là 198 hoặc 199 px (tất nhiên tôi đã thử 193px, nhưng sự khác biệt là lớn). Tôi nghĩ, nó phụ thuộc vào độ phân giải, trên các máy tính và trình duyệt khác nhau vì các phần tử này không có chiều rộng bằng nhau (đôi khi tôi nghĩ rằng sự khác biệt là khoảng 1 hoặc 2 px). Tôi đã cố gắng đặt các phần tử này trong các hàng div hoặc bảng, nhưng không giúp được gì.

Hỏi: Làm cách nào để tôi có được chiều rộng chính xác bằng nhau của các phần tử này?


1
Câu hỏi tương tự được hỏi ở đây: stackoverflow.com/questions/895904/…
BlaM

Câu trả lời:


134

Cập nhật câu trả lời

Đây là cách thay đổi mô hình hộp được sử dụng bởi các phần tử input / textarea / select để chúng đều hoạt động theo cùng một cách. Bạn cần sử dụng thuộc box-sizingtính được triển khai với tiền tố cho mỗi trình duyệt

-ms-box-sizing:content-box;
-moz-box-sizing:content-box;
-webkit-box-sizing:content-box; 
box-sizing:content-box;

Điều này có nghĩa là sự khác biệt 2px mà chúng tôi đã đề cập trước đó không tồn tại ..

ví dụ tại http://www.jsfiddle.net/gaby/WaxTS/5/

lưu ý: Trên IE, nó hoạt động từ phiên bản 8 trở lên ..


Nguyên

nếu bạn đặt lại đường viền của chúng thì selectphần tử sẽ luôn nhỏ hơn 2 pixel so với inputphần tử ..

ví dụ: http://www.jsfiddle.net/gaby/WaxTS/2/


Cảm ơn đã trả lời. Và nếu tôi đặt đường viền cho 2px, sẽ có 4 pixel giữa các trường nhập và chọn, cho đường viền 3px - 6px ...?
luk4443

1
@luk, không. Nếu cả hai đầu vào và chọn có chiều rộng biên giới cùng thì sự khác biệt sẽ vẫn đến 2 pixel ..
Gabriele Petrioli

Cảm ơn. Tôi cố gắng mã của bạn trong các trình duyệt khác nhau và trong Firefox mọi thứ đều ổn, nhưng nó không làm việc trong IE 8 và Opera (có sự khác biệt beetwen đầu vào và chọn chiều rộng) :(
luk4443

1
Có lẽ bạn muốn chỉ định kích thước hộp: viền-hộp? Tôi nghĩ đó là những gì bạn muốn nói. Hộp nội dung là mặc định nơi đệm + lề thêm vào chiều rộng.
O'Rooney

1
Nó thực sự phải là: -ms-box-sizing: content-box; -moz-box-sizing: content-box; -webkit-box-sizing: content-box; box-sizing: content-box; Cú pháp tiêu chuẩn nên đi sau cùng để tuân theo phương pháp luận nâng cao tiến bộ để trong tương lai khi tiêu chuẩn được triển khai rộng rãi, các tác nhân người dùng sẽ mặc định sử dụng cú pháp tiêu chuẩn và bạn có thể xóa các phiên bản có tiền tố.
user1739635,

118

Tôi đã thử câu trả lời của Gaby (+1) ở trên nhưng nó chỉ giải quyết được một phần vấn đề của tôi. Thay vào đó, tôi đã sử dụng CSS sau, trong đó hộp nội dung được thay đổi thành hộp viền:

input, select {
    -webkit-box-sizing: border-box;
       -moz-box-sizing: border-box;
            box-sizing: border-box;
}

Đúng vậy, có vẻ như các trường biểu mẫu, ví dụ: textarea, các trường đầu vào luôn hoạt động tốt với mô hình hộp có viền. nút, hộp kiểm, radio, gửi, đặt lại và đầu vào tìm kiếm là các hộp có đường viền theo mặc định.
Vennsoh

2
Đây là một lý lẽbox-sizing: border-box tốt cho lý do tại sao bạn nên sử dụng . Để triển khai toàn diện tốt, hãy cân nhắc đặt trên phần tử html cấp cao nhất và sau đó kế thừa xuống để có thể dễ dàng ghi đè.
KyleMit

content-box không làm gì trong trường hợp của tôi. Tôi cần hộp viền để chúng có cùng chiều rộng. Hộp viền chắc chắn là giải pháp tốt hơn, cảm ơn.
Manuel Hoffmann

5

Thêm mã này trong css:

 select, input[type="text"]{
      width:100%;
      box-sizing:border-box;
    }

-4

tạo một lớp khác và tăng kích thước với ví dụ 2px

.enquiry_fld_normal{
width:278px !important; 
}

.enquiry_fld_normal_select{
width:280px !important; 
 }
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.