CSS có chiều rộng bao gồm phần đệm?


146

Có vẻ như trong IE, chiều rộng bao gồm kích thước đệm. trong khi ở FF, chiều rộng thì không. Làm thế nào tôi có thể làm cho cả hai cư xử giống nhau?

Cảm ơn.


Bạn có thể cần phải kích hoạt chế độ tuân thủ tiêu chuẩn. Tuy nhiên, không thấy một số mã, tôi không thể cung cấp cho bạn bất kỳ hướng dẫn nào nhiều hơn thế.
Jeff Hubbard

Câu trả lời:


307
  • IE đã từng sử dụng mô hình hộp " hộp viền" tiện lợi hơn nhưng không chuẩn . Trong mô hình này, chiều rộng của một phần tử bao gồm phần đệm và đường viền. Ví dụ:
    #foo { width: 10em; padding: 2em; border: 1em; }
    sẽ 10emrộng.

  • Ngược lại, tất cả các trình duyệt sợ tiêu chuẩn mặc định cho mô hình hộp " hộp nội dung" . Trong mô hình này, chiều rộng của một phần tử không bao gồm phần đệm hoặc đường viền. Ví dụ:
    #foo { width: 10em; padding: 2em; border: 1em; }
    sẽ thực sự 16emrộng: 10em+ 2emđệm cho mỗi bên, + 1emviền cho mỗi cạnh.

Nếu bạn sử dụng phiên bản IE hiện đại với đánh dấu hợp lệ , một loại tài liệu tốtcác tiêu đề phù hợp, nó sẽ tuân thủ tiêu chuẩn. Mặt khác, bạn có thể buộc các trình duyệt tuân thủ tiêu chuẩn hiện đại sử dụng "hộp viền" thông qua:

* {
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
}

Tuyên bố đầu tiên là cần thiết cho Opera, thứ hai là cho Firefox, thứ ba là cho Webkit và Chrome.

Đây là một thử nghiệm đơn giản mà tôi đã thực hiện nhiều năm trước để thử nghiệm khai báo kích thước hộp nào mà trình duyệt của bạn hỗ trợ: http://phrogz.net/CSS/boxsizing.html

Lưu ý rằng Webkit (Safari và Chrome) không hỗ trợ padding-boxmô hình hộp thông qua bất kỳ tuyên bố nào.


2
+1 để đề cập đến cả mô hình hộp nội dung và mô hình hộp viền. Có thể muốn giải thích về sự khác biệt mặc dù.
BoltClock

1
@BoltClock Cảm ơn sự thúc đẩy để trả lời chặt chẽ hơn. Cập nhật.
Phrogz

Câu trả lời tốt đẹp; Tôi đã cố gắng nhớ (hoặc tìm) tên của các tùy chọn khác nhau trong một vài ngày nay ... +1 =)
David nói phục hồi Monica

Không ai quan tâm đến opera.
Michael J. Calkins

3
@whitelettersinblankcards Xem lý do tại sao W3Schools hút và sau đó một tài liệu tham khảo tốt hơn nhiều dẫn bạn đến tiêu chuẩn W3C . Đừng theo bất kỳ liên kết nào nữa đến W3Schools. Hơn nữa, thêm "MDN" vào các truy vấn công cụ tìm kiếm của bạn về các tiêu chuẩn web trong tương lai.
Phrogz

27

Một quy tắc đơn giản là cố gắng tránh sử dụng thuộc tính padding / lề và width cho cùng một phần tử. tức là sử dụng một cái gì đó tương tự như thế này

<div class="width-div">
     <div class="padding-div">
     ...........
     ...........
     </div>
 </div>

Tôi sử dụng phương pháp này một cách thường xuyên và không bao giờ có vấn đề về trình duyệt chéo với nó.
Kevin Beal

20

Tôi đã va vào câu hỏi này và mặc dù nó đã vài tuổi, tôi nghĩ tôi có thể thêm câu này trong trường hợp có ai đó va vào chủ đề này.

CSS3 hiện có một thuộc tính kích thước hộp. Nếu bạn đặt, hãy nói,

.bigbox {
    box-sizing: border-box; 
    width: 1000px; 
    border: 5px solid #333;
    padding: 10px;
}

lớp học của bạn sẽ rộng 1000px, thay vì 1030px. Tất nhiên, điều này cực kỳ hữu ích cho bất kỳ ai sử dụng viền có kích thước pixel với div lỏng, bởi vì nó giải quyết vấn đề không hòa tan.

Thậm chí tốt hơn, kích thước hộp được hỗ trợ bởi tất cả các trình duyệt chính trừ IE7 trở xuống. Để bao gồm tất cả các mục trong kích thước chiều rộng hoặc chiều cao, đặt kích thước hộp thành hộp viền. để tổng hợp các mục khác theo chiều rộng và / hoặc chiều cao, là mặc định, bạn có thể đặt kích thước hộp thành "hộp nội dung".

Tôi không chắc về trạng thái hiện tại của cú pháp trình duyệt, nhưng tôi vẫn bao gồm các tiền tố -moz và -webkit:

.bigbox{
    -moz-box-sizing: border-box;
    -webkit-box-sizing: border-box;
    box-sizing: border-box;
}

Vâng, và Paul Irish có một bài viết blog hay về điều này tại đây: paulirish.com/2012/box-sizing-border-box-ftw
Dave Burton

Làm thế nào câu trả lời này có rất nhiều câu trả lời khi câu trả lời giống như câu trả lời được chấp nhận là 3 năm trước?
dippas

1

Bạn có một văn bản khai báo? Khi tôi bắt đầu viết mã html, tôi gặp vấn đề này và đó là do không có tài liệu khai báo. Sở thích của tôi là:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
       "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
...
</html>

1

Đối với những người vẫn gặp sự cố, jQuery đã cung cấp hai thuộc tính outerWidth ()innerWitdh ()để biết chiều rộng của một đối tượng có hoặc không có viền ...

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.