2011-11-08 45 views
5

Tôi đang cố tạo hiệu ứng nền mát (với độ trong suốt alpha và góc tròn) cho menu thả xuống với một mục nhập CSS duy nhất.Lặp lại nền giới hạn CSS (nhiều hình nền)

Tôi có một giới hạn hàng đầu (180 x 4 px), nắp dưới (180 x 20px) và trung bình lặp lại (180 x 2px).

Dưới đây là CSS liên quan của tôi hiện có:

background-image: url('images/drop_top.png'), url('images/drop_bottom.png'), url('images/drop_middle.png'); 
background-position:left top, left bottom, 0px 10px; 
background-repeat:no-repeat, no-repeat, repeat-y; 

Vấn đề là phần giữa mà cần phải được mở rộng/tilable là lặp đi lặp lại tất cả các cách dưới mũ trên và dưới - chẳng hạn rằng góc tròn của tôi bây giờ là hình vuông vì chúng có phần giữa lặp lại bên dưới chúng.

Có cách nào để ngăn chặn nhiều hình nền trùng lặp không ??

Cảm ơn trước!

+1

Nếu bạn đang sử dụng nhiều tài sản hình nền, tại sao không chỉ sử dụng 'border-radius'? – motoxer4533

+0

Tôi đang sử dụng hiệu ứng đổ bóng lạ mắt ở phía dưới (không phải là css-one) –

+1

Tôi chưa bao giờ sử dụng nó, vì vậy tôi không biết nó có hoạt động hay không, nhưng có lẽ 'background-clip'? http://dev.opera.com/articles/view/css3-border-background-boxshadow/#background-clip – motoxer4533

Trả lời

8

Background-origin and/or background-clip nên thực hiện thủ thuật. Chỉ cần thiết lập đầu & viền cho cạnh dưới bằng với chiều cao của đồ họa nắp của bạn, sau đó đặt drop_middle để background-clip:padding-box


EDIT: Đây là một giải pháp hoàn chỉnh, nhưng đối với một định hướng ngang: http://jsfiddle.net/nGSba/

#box 
{ 
    display: inline-block; 
    margin: 1em; 
    padding: 9px; 
    border-left:9px solid transparent; 
    border-right:9px solid transparent; 
    background-image: url(http://s11.postimage.org/ufpdknvjz/left.png), 
      url(http://s11.postimage.org/6ng294tj3/right.png), 
      url(http://www.css3.info/wp-content/themes/new_css3/img/main.png); 
    background-repeat: no-repeat, no-repeat, repeat-x; 
    background-position: left top, right top, left top; 
    background-origin: border-box,border-box,padding-box; 
    background-clip: border-box,border-box,padding-box; 
} 

Điều khiến tôi bị kẹt là số transparent trên số border-color. Nền sẽ luôn luôn đi dưới đường viền, vì vậy nếu đường viền của bạn chắc chắn thì nền sẽ vẫn ẩn.

+0

Đây là những gì tôi đang sử dụng và nó vẫn chồng chéo: \t border-top-width: 4px; \t border-bottom-width: 19px; \t hình nền: url ('images/drop_top.png'), url ('images/drop_bottom.png'), url ('images/drop_middle.png'); \t vị trí nền: phía trên bên trái, dưới cùng bên trái, 0px 10px; \t lặp lại nền: không lặp lại, không lặp lại, lặp lại-y; \t nền-clip: hộp biên giới, hộp viền, ô đệm; –

+0

Có vẻ như cả hai 'nền gốc' và 'nền-clip' phải được đặt để nó hoạt động chính xác. – philipd

0

Dù yếu tố của bạn là bạn đang áp dụng các hình ảnh để, hãy thử làm như sau (tôi sẽ giả div vì lợi ích của hình minh họa):

div { 
    background-image: url('images/drop_top.png'), url('images/drop_bottom.png'); 
    background-position:left top, left bottom; 
    background-repeat:no-repeat, no-repeat; 
    position: relative; 
} 

div:after { 
    position: absolute; 
    top: 10px ; /* whatever your top image height is */ 
    bottom: 10px; /* whatever your bottom image height is */ 
    left: 0; 
    right: 0; 
    z-index: -1; 
    background-image: url('images/drop_middle.png'); 
    background-position: left top; 
    background-repeat: repeat-y; 
} 
+0

Chỉ cần tò mò nếu điều này sẽ là một giải pháp trình duyệt chéo, xem xét IE là một mớ hỗn độn. – ehime

+1

Đã không được kiểm tra, nhưng bất kỳ trình duyệt cũ nào không nhận ra ': after' pseudoelement nó sẽ không hoạt động. – ScottS