2012-07-30 36 views
8

Tôi đã tình cờ gặp phải điều gì đó kỳ lạ. Khi áp dụng một đường viền màu trắng tiêu tan đến một yếu tố, các màu sắc của gradient nền xuất hiện ở phía sai của nguyên tố này, như vậy:Tại sao màu đường viền đảo ngược khi áp dụng độ dốc nền?

wrong border colors

Tôi đã thấy điều này trong các phiên bản mới nhất của Firefox, Chrome , Opera và IE10. IE9 có tác dụng có ý định của tôi, tuy nhiên.

css của tôi hiện là:

aside.block { 

    width:     259px; 
    padding:    12px; 
    margin:     15px 0; 

    border:     2px dashed #fff; 

    background-image:  -o-linear-gradient(bottom, rgb(219,203,0) 0%, rgb(255,236,0) 100%); 
    background-image:  -moz-linear-gradient(bottom, rgb(219,203,0) 0%, rgb(255,236,0) 100%); 
    background-image:  -webkit-linear-gradient(bottom, rgb(219,203,0) 0%, rgb(255,236,0) 100%); 
    background-image:  -ms-linear-gradient(bottom, rgb(219,203,0) 0%, rgb(255,236,0) 100%); 
    background-image:  linear-gradient(bottom, rgb(219,203,0) 0%, rgb(255,236,0) 100%); 
    filter:     progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffec00', endColorstr='#dbcb00'); 

} 

Các màu đường viền ở bên mỹ màu trái và phải, nhưng kể từ khi điều này xảy ra ở khá nhiều mọi trình duyệt, tôi sẽ phải thừa nhận đây là sai lầm của tôi, không một lỗi trình duyệt. Tôi đang thiếu gì ở đây?

+1

Đã thêm vào fiddle vì vậy nó dễ dàng hơn để lộn xộn xung quanh: http://jsfiddle.net/LVfqe/5/ – easwee

Trả lời

5

Bạn có thể khắc phục điều này bằng cách đặt background-origin thành border-box.

http://jsfiddle.net/LVfqe/11/

.block{ 
     width:     259px; 
     padding:    12px; 
     background-image:  -o-linear-gradient(bottom, rgb(219,203,0) 0%, rgb(255,236,0) 100%); 
     background-image:  -moz-linear-gradient(bottom, rgb(219,203,0) 0%, rgb(255,236,0) 100%); 
     background-image:  -webkit-linear-gradient(bottom, rgb(219,203,0) 0%, rgb(255,236,0) 100%); 
     background-image:  -ms-linear-gradient(bottom, rgb(219,203,0) 0%, rgb(255,236,0) 100%); 
     background-image:  linear-gradient(bottom, rgb(219,203,0) 0%, rgb(255,236,0) 100%); 
     filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffec00',endColorstr='#dbcb00'); 
border:     2px dashed #fff; 
background-origin:border-box; 
} 
+0

Ah, mà sửa chữa nó. Tôi không nghĩ mình từng sử dụng tài sản gốc nền trước đây. – Lg102

+1

Lý do của hành vi gốc là gì? Cung cấp một biên giới vát? –

+0

@Stefano Borini - ý bạn là gì bởi "đường viền vát". Đó là gì? Vấn đề xảy ra vì nền gốc mặc định là padding-box và background được thiết lập để lặp lại. Gradient bắt đầu lặp lại bên dưới đường viền trừ khi hộp đường viền được đặt - sẽ tính đường viền vào tổng chiều rộng hộp và bắt đầu nền ở đó. Thử đặt chiều rộng đường viền thành 50px và bạn sẽ thấy lý do. – easwee

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