Làm cách nào để ngăn thuộc tính đệm thay đổi chiều rộng hoặc chiều cao trong CSS?


227

Tôi đang tạo một trang web với DIVs. Mọi thứ đều ổn, trừ khi tôi tạo DIV. Tôi tạo chúng như thế này (ví dụ):

newdiv {
    width: 200px;
    height: 60px;
    padding-left: 20px;
    text-align: left;
}

Khi tôi thêm thuộc padding-lefttính, chiều rộng của các DIVthay đổi thành 220px và tôi muốn nó giữ nguyên ở mức 200px.

Giả sử tôi tạo một DIVtên khác anotherdivgiống hệt như newdivvà đặt nó vào trong newdivnhưng newdivkhông có phần đệm và anotherdivpadding-left: 20px. Tôi nhận được điều tương tự, newdivchiều rộng của nó sẽ là 220px.

Làm thế nào tôi có thể khắc phục vấn đề này?


3
Tôi rất buồn khi nói, nhưng tôi thích cách IE xử lý việc này ... Điều này có ý nghĩa hơn với tôi ...
Nicu Surdu

Câu trả lời:


390

Thêm tài sản:

-webkit-box-sizing: border-box; /* Safari/Chrome, other WebKit */
-moz-box-sizing: border-box;    /* Firefox, other Gecko */
box-sizing: border-box;         /* Opera/IE 8+ */

Lưu ý: Điều này sẽ không hoạt động trong Internet Explorer bên dưới phiên bản 8.


14
Đây là một giải pháp tuyệt vời cho biên giới, nhưng làm thế nào điều này giúp cho đệm?
Kato

6
Đây là ma thuật thuần túy! - Nó sửa mô hình hộp mà tất cả chúng ta đều biết và ghét! tức là làm cho nó làm việc theo cách trực giác cho thấy nó - chứ không phải là thông số kỹ thuật - nhưng như xa như tôi biết không phá vỡ bất kỳ thông số kỹ thuật hoặc: D Bài viết này làm rõ nó cũng ... stackoverflow.com/questions/779434/...
technicalbloke

2
@technicalbloke Liên kết của bạn chỉ quay lại câu hỏi này.
mhenry1384

11
Rất tiếc, sao chép và dán vòi nước lên. Đây là liên kết Tôi có nghĩa là để chia sẻ ... paulirish.com/2012/box-sizing-border-box-ftw
technicalbloke

1
Nhiều bạn nên xem xét độ rộng: tự động lừa dưới đây. Hoạt động trên các trình duyệt, ít mã hơn, v.v.
Ryan Shillington



11

Nếu bạn muốn thụt lề văn bản trong div mà không thay đổi kích thước của div, hãy sử dụng CSS text-indentthay vì padding-left.

.indent {
  text-indent: 1em;
}
.border {
  border-style: solid;
}
<div class="border">
  Non indented
</div>

<br>

<div class="border indent">
  Indented
</div>


1
Đây là giải pháp duy nhất mà tôi thấy có hiệu quả với div chiều rộng cố định của mình. Thật không may, kích thước hộp không ngăn được phần đệm ảnh hưởng đến chiều rộng, vì vậy, cảm ơn rất nhiều vì đã chỉ ra tài sản nhỏ tuyệt vời này.
Stevo

8

chỉ cần thêm box-sizing: border-box;


12
Điều này chỉ đơn giản là chính xác giống như những gì câu trả lời khác đã nói ở đây.
Neil Lunn

1

Khi tôi thêm thuộc tính đệm bên trái, chiều rộng của DIV thay đổi thành 220px

Vâng, đó là chính xác theo các tiêu chuẩn. Đó là cách nó hoạt động.

Giả sử tôi tạo một DIV khác có tên khác giống hệt newdiv và đặt nó vào bên trong newdiv nhưng newdiv không có phần đệm và otherdiv có phần đệm-left: 20px. Tôi nhận được điều tương tự, chiều rộng của newdiv sẽ là 220px;

Không, newdiv sẽ vẫn rộng 200px.


2
Guffa, đó không phải là cách các tiêu chuẩn được cho là hoạt động cả. Đệm chắc chắn không ảnh hưởng đến kích thước của phần tử được áp dụng. Với sự tôn trọng lớn nhất, có thể bạn đang nhầm lẫn giữa 'phần đệm' với 'lề'?
da5id

1
Có, phần đệm chắc chắn được cho là ảnh hưởng đến kích thước của phần tử. Tôi nghĩ rằng chính bạn là người bối rối ... làm thế nào để bạn đề xuất rằng lề sẽ ảnh hưởng đến kích thước của phần tử?
Guffa

Thật ra, bạn biết tôi nghĩ cả hai chúng ta đều đúng. Tôi đã quá quen với việc đối phó với các hiệu ứng mà tôi hoàn toàn quên mất tiêu chuẩn. Tôi tìm thấy một lời giải thích tốt ở đây quirksmode.org/css/box.html
da5id

Vì vậy, tôi xin lỗi ông Guffa. Nhưng với mục đích thực tế (đó là tất cả những gì chúng ta đang nói) lời khuyên của tôi vẫn tốt chứ?
da5id

Chà, bạn đã đúng khi có lỗi mô hình hộp, nhưng nó không áp dụng cho câu hỏi này ... :)
Guffa

-1

chỉ cần thay đổi chiều rộng div của bạn thành 160px nếu bạn có phần đệm 20px, nó tăng thêm 40px cho chiều rộng của div, do đó bạn cần trừ 40px khỏi chiều rộng để giữ cho div của bạn trông bình thường và không bị biến dạng với chiều rộng thêm trên đó và văn bản của bạn tất cả rối tung lên.


2
Điều này giống như câu trả lời được đưa ra bởi @rvarcher.
8bitjunkie
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.