2011-11-16 16 views
10

Tôi nghĩ rằng tôi có thể đã biết câu trả lời cho câu hỏi này nhưng tôi cần kiểm tra sự tỉnh táo!Đường viền pixel và Tỷ lệ phần trăm theo tỷ lệ Pro232ion

Nói rằng tôi có

#gridtest{ 
width:590px; 
} 

tôi có thể thay đổi chiều rộng để một tỷ lệ phần trăm bằng cách sử dụng KẾT QUẢ = MỤC TIÊU/BỐI CẢNH. Trong trường hợp này bối cảnh là một container với max-width thiết lập để 1000px vì vậy tôi có thể làm điều này:

#gridtestpercent{ 
width:59%; /*590/1000*/ 
} 

Nếu tôi được thu nhỏ cửa sổ xuống div sẽ luôn luôn được theo tỷ lệ container của nó. Nhưng điều gì sẽ xảy ra nếu tôi muốn thực hiện

#gridtest{ 
width:570px; 
border:10px solid red; 
} 

Tôi có thể làm việc chiều rộng dựa trên mục tiêu hiện tại là 570 nhưng khi cửa sổ bị thu hẹp, tất cả các tỷ lệ đều không đồng bộ.

#gridtestpercentnoborder{ 
width:57%; /*570/1000*/ 
border:10px solid red; 
} 

Tôi không thể sử dụng tỷ lệ phần trăm. Tôi không muốn sử dụng JS để tiếp tục kiểm tra ngữ cảnh và tôi không thể sử dụng khai báo đường viền hộp CSS3.

Nếu tôi muốn sử dụng kỹ thuật được mô tả trong thiết kế web đáp ứng bởi Ethan Marcotte, nơi mọi thứ co lại liên quan đến nhau, tôi sẽ không may mắn nếu sử dụng đường viền?

Chúc mừng!

Trả lời

5

Thật không may, có, bạn đã hết may mắn. Một cách hacky để giải quyết vấn đề này là với một wrapper div mà bạn sử dụng để tạo đường viền của mình. Vì vậy, bên ngoài div sẽ là 57% (trong ví dụ của bạn) với một nền là màu sắc của biên giới mong muốn của bạn. Sau đó, bên trong div sẽ có chiều rộng 96% hoặc hơn (chơi với số chính xác để tìm đường viền phù hợp với thiết kế của bạn).

+0

Cám ơn này - Tôi thực sự muốn tránh làm điều đó nhưng ít nhất có một sửa chữa nếu tôi chạy vào nó. Cách hơi khó hiểu khác sẽ là nhiều hình ảnh nền cho biên giới nhưng đó không phải là rất nhiều trình duyệt tại thời điểm này. – user1010892

+0

Vâng, nhiều hình nền sẽ không hoạt động trong các trình duyệt cũ hơn; Tuy nhiên, nó sẽ không phá vỡ bất cứ điều gì giống như sử dụng hộp biên giới sẽ. Vì vậy, có lẽ đó là một lựa chọn tốt để giảm độ tinh xảo. –

+0

yep đó là một điểm tốt – user1010892

8

Bạn có thể sử dụng một hình chữ nhật hộp bóng thay vì một biên giới:

box-shadow: 0px 0px 0px 10px red inset; 

Chỉ cần pad bên trong container để bù đắp.

Chỉnh sửa: Tôi viết "pad" nhưng tất nhiên nếu bạn sử dụng đệm, nó sẽ loại bỏ kích thước hộp. Thay vào đó hãy thay thế nội dung bên trong.

+0

hộp bóng có chi phí hiệu năng và nên được sử dụng ít - đặc biệt là trên thiết bị di động và kết thúc thấp – Ruskin

12

Bạn có thể sử dụng CSS3 calc() chức năng,

.selector{ 
    border: 5px solid black; 
    width: -moz-calc(50% - 10px); 
    width: -webkit-calc(50% - 10px); 
    width: calc(50% - 10px); 
} 

Sass mixin

@mixin calc($property, $expression) { 
    #{$property}: -moz-calc(#{$expression}); 
    #{$property}: -webkit-calc(#{$expression}); 
    #{$property}: calc(#{$expression}); 
} 
article { 
    border: 1px solid red; 
    @include calc(width, '100% - 2px') 
} 
+0

Điều này thật tuyệt vời! Cảm ơn bạn đã gợi ý! – mXX

0

Nếu có thể, tùy thuộc vào thiết kế của bạn, những gì tôi muốn làm là đặt đường viền như một div tuyệt đối với chiều rộng là 3px (ví dụ) và chiều cao cao hơn div mẹ của nó. Sau đó tôi đặt overflow hidden trên div cha.

6

Câu trả lời được chấp nhận không chính xác. Bạn thực sự có 2 lựa chọn:

Sử dụng box-sizing tài sản, vì vậy tất cả các miếng đệm và biên giới được coi là một phần của kích thước:

.column { 
    width: 16%; 
    float: left; 
    margin: 0 2% 0 2%; 
    background: #03a8d2; 
    border: 2px solid black; 
    padding: 15px; 
    font-size: 13px; 

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

Hoặc, sử dụng tài sản outline thay vì tài sản biên giới. Bạn sẽ vẫn gặp vấn đề với các paddings, nhưng nó dễ dàng hơn để thêm vào. Ví dụ:

.column { 
    width: 16%; 
    float: left; 
    margin: 0 2% 0 2%; 
    background: #03a8d2; 

    outline: 2px solid black; 
} 

Full giải thích: http://designshack.net/articles/css/beating-borders-the-bane-of-responsive-layout/

+0

Điều này hoạt động hoàn hảo cho những gì tôi đang làm - làm việc trên các vùng chứa dựa trên phần trăm cho thiết kế đáp ứng trên chế độ xem di động. Trong khi tôi thường không sử dụng kích thước hộp vì nó không phải là tài sản được hỗ trợ nhiều nhất - nó hoạt động đủ tốt cho các thùng chứa chất lỏng trên nền tảng mà tôi cần điều này để làm việc. Hoàn hảo! –

2

Trong CSS3 bạn cũng có thể sử dụng thuộc tính box-sizing mới để bao gồm các pixel và đệm đếm vào width của nguyên tố này:

box-sizing: border-box;