2012-06-17 77 views
32

Tôi đã xác định chiều rộng của các vùng chứa theo phần trăm. Tôi muốn thêm một biên giới (3px bên phải của một chiều rộng), vì chiều rộng container là trong% trong khi chiều rộng biên giới là trong px, làm thế nào tôi có thể điều chỉnh chiều rộng của container?CSS: Chiều rộng theo phần trăm và Đường viền

<div class="wrap"> 
    <div class="left">...</div> 
    <div class="right">...</div> 
</div> 

.wrap{ 
    width:100%; 
} 

.left{ 
    width:30%; 
} 

.right{ 
    width:70%; 
} 

Tôi muốn thêm đường viền 3px ở bên phải .left. Ví dụ:

.left{ 
    width:30%; 
    border:3px solid #000; 
} 

Vì tôi đã xác định chiều rộng bằng%, cách tốt nhất để điều chỉnh lại chiều rộng của .left là gì. Tôi có thể giảm chiều rộng xuống 29%, nhưng tôi muốn làm chính xác.

+0

thêm * đệm * để container? Lưu ý rằng bạn nên xóa * width: 100% * rồi. –

+1

Bản sao có thể có của [Làm cách nào để thêm đường viền 1px vào div có chiều rộng là phần trăm?] (Http: // stackoverflow.com/questions/8278523/how-do-i-add-1px-border-to-a-div-có-chiều rộng-là-một phần trăm) – Fractalizer

Trả lời

81

Sử dụng box-sizing: border-box tài sản. Nó thay đổi hành vi của mô hình hộp để xử lý padding và border như một phần của tổng chiều rộng của phần tử (không phải lề). Điều này có nghĩa là chiều rộng hoặc chiều cao của phần tử bao gồm các kích thước được đặt cho phần đệm và đường viền. Trong trường hợp của bạn, điều đó có nghĩa là chiều rộng của phần tử và chiều rộng của đường viền sẽ tiêu thụ 30% không gian có sẵn.

CSS box model

Hỗ trợ cho nó không phải là hoàn hảo, tuy nhiên tiền tố nhà cung cấp sẽ bắt hầu hết nếu không phải tất cả các trình duyệt hiện đại:

.left { 
    width: 30%; 
    border: 3px solid #000; 

    -moz-box-sizing: border-box; 
    -webkit-box-sizing: border-box; 
    -ms-box-sizing: border-box; 
    box-sizing: border-box; 
} 

Thông tin thêm có thể được tìm thấy trên MDNQuirksmode.

According to Quirksmode, sử dụng 3 tiền tố của nhà cung cấp ở trên (-moz-, -webkit--ms-), bạn sẽ nhận được hỗ trợ cho tất cả các trình duyệt, ngay cả IE8.

+18

tại sao trên trái đất này không phải là hành vi mặc định này – magritte

+1

"Tất cả các trình duyệt" đã đề cập ở trên có nghĩa là: http://caniuse.com/#search=border-box - Tức là, không có IE6 và IE7. –

+0

@Emil Chúng không thực sự đáng được hỗ trợ kể từ năm 2014, trừ khi có lý do kinh doanh tốt để làm như vậy – Bojangles

4

Cách trình duyệt chéo dễ nhất là KHÔNG đặt đường viền trên div ngoài và thay vào đó đặt đường viền trên div MỚI trong .left. Đơn giản và hoạt động tốt.

+0

Cảm ơn nó hoạt động, giải pháp sạch nhất. – Alex

1

Chỉ cần thay đổi px để vw như

border-width: 10px; 

để

border-width: 10vw; 

nó làm whats tỷ lệ làm ....

+0

vw và vh không làm những gì tỷ lệ phần trăm làm. Chúng là các đơn vị khung nhìn và chúng dựa trên chiều rộng của khung nhìn, bỏ qua các phần tử trong khung nhìn. – Carlin

Các vấn đề liên quan