2014-12-17 17 views
6

Tôi đã nhìn xung quanh và cố gắng một vài ngày, nhưng tôi không thể có được nó ngay 100% ... tôi đang cố gắng đạt được hiệu ứng sau với gradient css3:Hiệu ứng Sunburst với độ dốc css3

sunburst done in illustrator

gần nhất tôi đã nhận là DEMO:

html { 
 
    background: 
 
    linear-gradient(80deg, transparent 50%, #ddd 50%, #ddd), 
 
    linear-gradient(90deg, transparent 50%, #ddd 50%, #ddd), 
 
    linear-gradient(82deg, transparent 50%, #eee 50%, #eee), 
 
    linear-gradient(67deg, transparent 50%, #ddd 50%, #ddd), 
 
    linear-gradient(52deg, transparent 50%, #eee 50%, #eee), 
 
    linear-gradient(37deg, transparent 50%, #ddd 50%, #ddd), 
 
    linear-gradient(22deg, transparent 50%, #eee 50%, #eee), 
 
    linear-gradient(7deg, transparent 50%, #ddd 50%, #ddd), 
 
    linear-gradient(-8deg, transparent 50%, #eee 50%, #eee), 
 
    linear-gradient(-23deg, transparent 50%, #ddd 50%, #ddd), 
 
    linear-gradient(-38deg, transparent 50%, #eee 50%, #eee), 
 
    linear-gradient(-53deg, transparent 50%, #ddd 50%, #ddd), 
 
    linear-gradient(-68deg, transparent 50%, #eee 50%, #eee), 
 
    linear-gradient(-83deg, transparent 50%, #ddd 50%, #ddd); 
 
    background-position: center -100%; 
 
    background-color: #eee; 
 
    background-size: 100% 200%; 
 
    min-height: 100%; 
 
}

Tôi sẽ tiếp tục thử nó .. bất kỳ trợ giúp nào được đánh giá cao mặc dù.

Cập nhật:

Cần phải có một/cách tái sử dụng tốt hơn để làm điều này ... nhìn vào một giải pháp SCSS, đây là những gì tôi có cho đến nay:

.sunburst { 
    @for $ray from 1 through 26 { 
    $color: #eee; 
    $degree: 7; 
    @if $ray%2 == 0 { 
     $color: #ddd; 
    } 
    background:linear-gradient($degree+deg, transparent 50%, $color 50%, $color), 
    } 
} 

Bây giờ nó chỉ là toán học thực sự đằng sau nó tôi đang cố gắng tìm ra ... cố gắng để ăn cắp logic từ pow.js, nhưng loại khó khăn nếu bạn khủng khiếp như toán học như tôi ...

+0

tôi đã chuyển đổi bản demo của bạn thành một đoạn mã Stack Overflow. (Đừng lo, tôi cũng đã giữ liên kết JSFiddle ở đó). –

+0

wow cảm ơn, đã không biết về các đoạn mã tràn ngăn xếp ..đã không ở đây trong một thời gian. –

+0

cảm ơn @ user2570380 nhưng tôi đang tìm kiếm thứ gì đó dễ hơn một chút trên các trình duyệt cũ hơn .. tôi đã xem qua ... –

Trả lời

5

Bạn có thể sử dụng :before:after: các phần tử giả để có hiệu ứng này.

html, body { 
 
    width: 100%; 
 
    height: 100%; 
 
    margin: 0; 
 
} 
 
#grad { 
 
    position: relative; 
 
    width: 100%; 
 
    height: 100%; 
 
} 
 
#grad:after, #grad:before { 
 
    content: ''; 
 
    position: absolute; 
 
    background: linear-gradient(90deg, transparent 50%, black 50%, black), linear-gradient(82deg, transparent 50%, #12E0DB 50%, #12E0DB), linear-gradient(67deg, transparent 50%, #000000 50%, #000000), linear-gradient(52deg, transparent 50%, #12E0DB 50%, #12E0DB), linear-gradient(37deg, transparent 50%, #000000 50%, #000000), linear-gradient(22deg, transparent 50%, #12E0DB 50%, #12E0DB), linear-gradient(7deg, transparent 50%, #000000 50%, #000000), linear-gradient(-8deg, transparent 50%, #12E0DB 50%, #12E0DB), linear-gradient(-23deg, transparent 50%, #000000 50%, #000000), linear-gradient(-38deg, transparent 50%, #12E0DB 50%, #12E0DB), linear-gradient(-53deg, transparent 50%, #000000 50%, #000000), linear-gradient(-68deg, transparent 50%, #12E0DB 50%, #12E0DB), linear-gradient(-83deg, transparent 50%, #000000 50%, #000000), linear-gradient(-90deg, transparent 50%, #12E0DB 50%, #12E0DB); 
 
    background-position: 0% 0%; 
 
    background-size: 200% 100%; 
 
    height: 100%; 
 
    width: 50%; 
 
} 
 
#grad:before { 
 
    left: 50%; 
 
    transform: rotate(180deg); 
 
}
<div id="grad"></div>

1

background-postition của bạn được đặt thành center -100%;. Chỉ cần sử dụng

background-position: center center; 

Bây giờ với thay đổi này và mã đã cung cấp của bạn đã được thực hiện;). Chỉ cần thêm nửa thứ hai với nhiều hơn linear-gradients

+0

cũng được phát hiện, tôi đang thực hiện nhưng damn, thật khó để theo dõi .. cảm ơn một lần nữa mặc dù. –

1

@ chipChocolate.py đã đưa ra một giải pháp tuyệt vời! Đây là một sự cải tiến dựa trên của mình.

  1. Trong Firefox transparent hoạt động như rgba(0,0,0,0) mà để lại một dòng màu xám mỏng ở mép. Thay đổi thành rgba(255,255,255,0) trông đẹp hơn.

  2. Làm cho hiệu ứng hình ảnh gần hơn với ảnh chụp màn hình của OP: 36 dải, mỗi dải chiếm một góc 10 độ.

  3. Hiệu lực trên thẻ <html>, như thử của OP.

BTW: Công cụ hiển thị của Chrome hút, được xem tốt nhất trong Firefox.

html { 
 
    height: 100%; 
 
    position: relative; 
 
} 
 

 
html:before, html:after { 
 
    content: ''; 
 
    height: 100%; 
 
    width: 50%; 
 
    position: absolute; 
 
    top: 0; 
 
    background-size: 200% 100%; 
 
    background-image: linear-gradient(85deg, rgba(255,255,255,0) 50%, #12e0db 50%, #12e0db), 
 
        linear-gradient(75deg, rgba(255,255,255,0) 50%, #000 50%, #000), 
 
        linear-gradient(65deg, rgba(255,255,255,0) 50%, #12e0db 50%, #12e0db), 
 
        linear-gradient(55deg, rgba(255,255,255,0) 50%, #000 50%, #000), 
 
        linear-gradient(45deg, rgba(255,255,255,0) 50%, #12e0db 50%, #12e0db), 
 
        linear-gradient(35deg, rgba(255,255,255,0) 50%, #000 50%, #000), 
 
        linear-gradient(25deg, rgba(255,255,255,0) 50%, #12e0db 50%, #12e0db), 
 
        linear-gradient(15deg, rgba(255,255,255,0) 50%, #000 50%, #000), 
 
        linear-gradient(5deg, rgba(255,255,255,0) 50%, #12e0db 50%, #12e0db), 
 
        linear-gradient(-5deg, rgba(255,255,255,0) 50%, #000 50%, #000), 
 
        linear-gradient(-15deg, rgba(255,255,255,0) 50%, #12e0db 50%, #12e0db), 
 
        linear-gradient(-25deg, rgba(255,255,255,0) 50%, #000 50%, #000), 
 
        linear-gradient(-35deg, rgba(255,255,255,0) 50%, #12e0db 50%, #12e0db), 
 
        linear-gradient(-45deg, rgba(255,255,255,0) 50%, #000 50%, #000), 
 
        linear-gradient(-55deg, rgba(255,255,255,0) 50%, #12e0db 50%, #12e0db), 
 
        linear-gradient(-65deg, rgba(255,255,255,0) 50%, #000 50%, #000), 
 
        linear-gradient(-75deg, rgba(255,255,255,0) 50%, #12e0db 50%, #12e0db), 
 
        linear-gradient(-85deg, rgba(255,255,255,0) 50%, #000 50%, #000), 
 
        linear-gradient(-95deg, rgba(255,255,255,0) 50%, #12e0db 50%, #12e0db); 
 
} 
 

 
html:before { 
 
    left: 50%; 
 
    transform: rotate(180deg); 
 
}

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