Gradients trong Internet Explorer 9


111

Có ai biết tiền tố nhà cung cấp cho gradient trong IE9 hoặc chúng tôi vẫn được cho là vẫn đang sử dụng các bộ lọc độc quyền của họ?

Những gì tôi có cho các trình duyệt khác là:

background-image: -moz-linear-gradient(top, #444444, #999999); /* FF3.6 */
background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, #444444),color-stop(1, #999999)); /* Saf4+, Chrome */
filter:  progid:DXImageTransform.Microsoft.gradient(startColorStr='#444444', EndColorStr='#999999'); /* IE6,IE7 */
-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#444444', EndColorStr='#999999')"; /* IE8 */

Như một phần thưởng, có ai biết tiền tố nhà cung cấp của Opera không?


Mặc dù tôi đã chọn một câu trả lời - điều này chỉ phù hợp tại thời điểm này. Nếu điều này thay đổi, ai đó có thể cập nhật chuỗi không? Nhiều đánh giá cao.
Sniffer

Tổng cộng. Tôi nghi ngờ IE 9 sẽ triển khai gradient ngay bây giờ, vì nó đang trong giai đoạn thử nghiệm.
Paul D. Waite

5
IE9 không hỗ trợ gradient nhưng IE10 thì có.
Bắt

4
IE chỉ là một trình duyệt khủng khiếp, không hỗ trợ khối nội tuyến, giá trị vị trí bị phá vỡ không có lý do, không hỗ trợ gradient, chậm như tất cả ... Tất cả chúng ta hãy bắt đầu cảnh báo người dùng rằng họ cần ngừng sử dụng IE thay vì lãng phí thời gian hỗ trợ một trình duyệt tiêu chuẩn phụ. Cá nhân tôi đã hoàn toàn ngăn cản người dùng IE xem bất kỳ trang nào của tôi trong nhiều năm nay (hướng họ đến một trình duyệt thực sự) và tôi chưa bao giờ thua lỗ. Thực hiện một số nghiên cứu và bạn sẽ thấy IE chiếm <5% tổng lưu lượng truy cập internet và <1% doanh thu. Tại sao chúng tôi ủng hộ nó?

12
Dan, tôi muốn biết con số của bạn đến từ đâu, tôi không thể tìm thấy một nguồn nào nói rằng IE chiếm <5% lưu lượng truy cập.
Jamie Taylor

Câu trả lời:


44

Bạn vẫn cần sử dụng các bộ lọc độc quyền của họ kể từ phiên bản IE9 beta 1.


2
Theo css3please.com , IE10 vẻ do hỗ trợ gradient CSS, đó là tin tốt ...
Sniffer

css3please.com đã giúp tôi tìm ra giải pháp cho mình. Cảm ơn
redolent

57

Có vẻ như tôi đến bữa tiệc hơi muộn, nhưng đây là ví dụ cho một số trình duyệt hàng đầu:

/* IE10 */ 
background-image: -ms-linear-gradient(top, #444444 0%, #999999 100%);

/* Mozilla Firefox */ 
background-image: -moz-linear-gradient(top, #444444 0%, #999999 100%);

/* Opera */ 
background-image: -o-linear-gradient(top, #444444 0%, #999999 100%);

/* Webkit (Safari/Chrome 10) */ 
background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #444444), color-stop(1, #999999));

/* Webkit (Chrome 11+) */ 
background-image: -webkit-linear-gradient(top, #444444 0%, #999999 100%);

/* Proposed W3C Markup */ 
background-image: linear-gradient(top, #444444 0%, #999999 100%);

Nguồn: http://ie.microsoft.com/testdrive/Graphics/CSSGradientBackgroundMaker/Default.html

Lưu ý: tất cả các trình duyệt này cũng hỗ trợ rgb / rgba thay cho ký hiệu thập lục phân.


10
Tôi sẽ không coi IE10 là một trình duyệt chính.
David Murdoch

3
@DavidMurdoch đúng là không đúng, nhưng không có ý nghĩa gì nếu không thêm phần chú giải độc quyền vào CSS của bạn, vì chúng tôi biết nó sẽ như thế nào. Sau tất cả, IE10 được định sẵn để trở thành một trình duyệt lớn.
thepeer

4
@Robotsushi mặc dù nó không trả lời câu hỏi cho IE9 (câu trả lời đã chọn có, đó có thể là lý do tại sao nó được chọn), câu hỏi này nằm trên trang đầu tiên của kết quả Google cho "internet explorer css gradient", vì vậy không có bất kỳ tác hại trong có một cái gì đó hữu ích ở đây bây giờ mà IE10 là gần như đã sẵn sàng cho Windows 7.
Kevin Arthur

Các phiên bản mới nhất của Firefox và Opera hỗ trợ tiêu chuẩn W3C. (Tôi đã thử nghiệm trên Firefox 19 và Opera 12.14 trên Windows 7)
JayVee

2
Vì đây là câu trả lời được bình chọn nhiều nhất cho câu hỏi đề cập đến IE9, nó nên thêm bộ lọc: vào cuối để nó bao gồm hỗ trợ IE9.
Joel Coehoorn

46

Giải pháp trình duyệt chéo tốt nhất là

background: #fff;
background: -moz-linear-gradient(#fff, #000);
background: -webkit-linear-gradient(#fff, #000);
background: -o-linear-gradient(#fff, #000);
background: -ms-linear-gradient(#fff, #000);/*For IE10*/
background: linear-gradient(#fff, #000);
filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='#ffffff', endColorstr='#000000');/*For IE7-8-9*/ 
height: 1%;/*For IE7*/ 

37

IE9 hiện không hỗ trợ CSS3 gradient. Tuy nhiên, đây là một giải pháp thay thế hay bằng cách sử dụng PHP để trả về một gradient SVG (tuyến tính dọc) thay vào đó, cho phép chúng tôi giữ thiết kế của mình trong các stylesheet của chúng tôi.

<?php

$from_stop = isset($_GET['from']) ? $_GET['from'] : '000000';
$to_stop = isset($_GET['to']) ? $_GET['to'] : '000000';

header('Content-type: image/svg+xml; charset=utf-8');

echo '<?xml version="1.0"?>
';

?>
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="100%" height="100%">
    <defs>
        <linearGradient id="linear-gradient" x1="0%" y1="0%" x2="0%" y2="100%">
            <stop offset="0%" stop-color="#<?php echo $from_stop; ?>" stop-opacity="1"/>
            <stop offset="100%" stop-color="#<?php echo $to_stop; ?>" stop-opacity="1"/>
        </linearGradient>
    </defs>
    <rect width="100%" height="100%" fill="url(#linear-gradient)"/>
</svg>

Chỉ cần tải nó lên máy chủ của bạn và gọi URL như sau:

gradient.php?from=f00&to=00f

Điều này có thể được sử dụng cùng với các gradient CSS3 của bạn như thế này:

.my-color {
    background-color: #f00;
    background-image: url(gradient.php?from=f00&to=00f);
    background-image: -webkit-gradient(linear, left top, left bottom, from(#f00), to(#00f));
    background-image: -webkit-linear-gradient(top, #f00, #00f);
    background-image: -moz-linear-gradient(top, #f00, #00f);
    background-image: linear-gradient(top, #f00, #00f);
}

Nếu bạn cần nhắm mục tiêu dưới IE9, bạn vẫn có thể sử dụng phương pháp 'bộ lọc' độc quyền cũ:

.ie7 .my-color, .ie8 .my-color {
    filter: progid:DXImageTransform.Microsoft.Gradient(startColorStr="#ff0000", endColorStr="#0000ff");
}

Tất nhiên bạn có thể sửa đổi mã PHP để thêm nhiều điểm dừng hơn trên gradient hoặc làm cho nó phức tạp hơn (gradient xuyên tâm, độ trong suốt, v.v.) nhưng điều này rất tốt cho những gradient tuyến tính (dọc) đơn giản.


Giải pháp thanh lịch. FYI: Tôi vừa xác nhận SVG không được tải xuống cho các trình duyệt hỗ trợ linear-gradient.
Jonathan Cross

Tôi tự hỏi liệu có cách nào để lưu vào bộ nhớ cache các tệp svg này sau khi chúng được tạo không.
Mike Kormendy

Một câu hỏi chắc chắn hơn sẽ là tìm hiểu xem hiệu suất là gì trên cả thời gian và tải máy chủ để yêu cầu tệp được lưu trong bộ nhớ cache so với việc tạo luồng tệp mỗi lần.
Mike Kormendy

1
PHP không bao giờ nên có kiến ​​thức hoặc trợ giúp trong thiết kế giao diện người dùng của bạn. Giữ nhu cầu của khách hàng trên khách hàng.
Alex White

11

Mã tôi sử dụng cho tất cả các gradient của trình duyệt:

background: #0A284B;
background: -webkit-gradient(linear, left top, left bottom, from(#0A284B), to(#135887));
background: -webkit-linear-gradient(#0A284B, #135887);
background: -moz-linear-gradient(top, #0A284B, #135887);
background: -ms-linear-gradient(#0A284B, #135887);
background: -o-linear-gradient(#0A284B, #135887);
background: linear-gradient(#0A284B, #135887);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0A284B', endColorstr='#135887');
zoom: 1;

Bạn sẽ cần chỉ định chiều cao hoặc zoom: 1áp dụng hasLayoutcho phần tử để phần tử này hoạt động trong IE.


Cập nhật:

Đây là phiên bản ÍT Mixin (CSS) dành cho tất cả các bạn ÍT người dùng ngoài kia:

.gradient(@start, @end) {
    background: mix(@start, @end, 50%);
    filter: ~"progid:DXImageTransform.Microsoft.gradient(startColorStr="@start~", EndColorStr="@end~")";
    background: -webkit-gradient(linear, left top, left bottom, from(@start), to(@end));
    background: -webkit-linear-gradient(@start, @end);
    background: -moz-linear-gradient(top, @start, @end);
    background: -ms-linear-gradient(@start, @end);
    background: -o-linear-gradient(@start, @end);
    background: linear-gradient(@start, @end);
    zoom: 1;
}

Là một người dùng ÍT NHẤT, tôi đã tìm kiếm một cách để làm cho các gradient hoạt động trong IE9. Tôi đã tìm thấy một bài viết trên blog hướng dẫn chi tiết cách tạo SVG: blog.philipbrown.id.au/2012/09/…
James Long

6

Opera sẽ sớm bắt đầu cung cấp các bản dựng có hỗ trợ gradient, cũng như các tính năng CSS khác.

Nhóm làm việc CSS của W3C thậm chí còn chưa hoàn thiện với CSS 2.1, các bạn đều biết điều đó, phải không? Chúng tôi dự định sẽ hoàn thành rất sớm. CSS3 được mô-đun hóa chính xác nên chúng tôi có thể chuyển các mô-đun đến quá trình triển khai nhanh hơn thay vì toàn bộ thông số kỹ thuật.

Mỗi công ty trình duyệt sử dụng một phương pháp, kiểm tra chu trình phần mềm khác nhau, v.v. Vì vậy, quá trình này cần có thời gian.

Tôi chắc rằng nhiều người, nhiều độc giả đều biết rằng nếu bạn đang sử dụng bất kỳ thứ gì trong CSS3, bạn đang thực hiện thứ được gọi là "cải tiến liên tục" - các trình duyệt được hỗ trợ nhiều nhất sẽ có được trải nghiệm tốt nhất. Một phần khác của điều đó là "sự xuống cấp dễ dàng" có nghĩa là trải nghiệm sẽ dễ chịu nhưng có lẽ không phải là tốt nhất hoặc hấp dẫn nhất cho đến khi trình duyệt đó đã triển khai mô-đun hoặc các phần của mô-đun có liên quan đến những gì bạn muốn làm.

Điều này tạo ra một tình huống khá kỳ lạ khiến các nhà phát triển front-end vô cùng thất vọng vì: thời gian triển khai không nhất quán. Vì vậy, đó là một thách thức thực sự cho cả hai bên - bạn có đổ lỗi cho các công ty trình duyệt, W3C, hay tệ hơn - cho chính bạn (lòng tốt là chúng ta không thể biết tất cả!) các thành viên tự trách mình? Bạn?

Dĩ nhiên là không. Nó luôn là một trò chơi của sự cân bằng, và cho đến nay, chúng tôi vẫn chưa tìm ra điểm cân bằng thực sự ở đâu. Đó là niềm vui khi làm việc trong công nghệ tiến hóa :)


4

Tôi hiểu rằng IE9 vẫn sẽ không hỗ trợ CSS gradient. Thật đáng tiếc, bởi vì nó hỗ trợ rất nhiều thứ mới tuyệt vời khác.

Bạn có thể muốn xem xét CSS3Pie như một cách để tất cả các phiên bản của IE hỗ trợ các tính năng CSS3 khác nhau (bao gồm gradient, nhưng cũng bán kính đường viền và bóng hộp) với mức tối thiểu phiền phức.

Tôi tin rằng CSS3Pie hoạt động với IE9 (Tôi đã thử nó trên các phiên bản trước khi phát hành, nhưng chưa có trên phiên bản beta hiện tại).


Cảm ơn Spudley. Tôi đang sử dụng CSS3Pie trên IE6 đến 8, nhưng tôi đã hy vọng không sử dụng nó trên IE9! Tôi có một biểu định kiểu riêng cho từng IE với các kiểu CSS3Pie của tôi trong IE8. Miễn là gradient là thứ duy nhất còn thiếu trong CSS3 mà tôi hiện đang sử dụng, tôi sẽ thêm một biểu định kiểu khác cho IE9 mà không sử dụng CSS3Pie nếu tôi có thể sử dụng nó.
Sniffer

Tôi thậm chí không nhìn thấy bài đăng này, tệ của tôi. Chỉ cần viết một câu trả lời và bỏ phiếu để xóa nó với cùng một thông tin. Lưu ý: Hãy cảnh giác với vấn đề được biết: css3pie.com/documentation/known-issues
NateDSaint

2

Không chắc chắn về IE9, nhưng Opera dường như chưa có bất kỳ hỗ trợ gradient nào:

Không có sự xuất hiện của "gradient" trên trang đó.

Có một bài viết tuyệt vời của Robert Nyman về cách làm cho các gradient CSS hoạt động trong tất cả các trình duyệt không phải là Opera:

Không chắc liệu điều đó có thể được mở rộng để sử dụng hình ảnh làm dự phòng hay không.


1
Điều đó làm tôi ngạc nhiên, vì Opera thường đi đầu trong việc thực hiện các tiêu chuẩn. Cảm ơn vì câu trả lời Paul.
Sniffer

1
Mặc dù vậy, tôi không nghĩ rằng gradient đã biến nó thành một tiêu chuẩn. Theo tôi hiểu về quy trình, các tính năng CSS mới có xu hướng được triển khai trong một trình duyệt, sau đó cuối cùng được chỉ định trong một tiêu chuẩn. Tôi tin rằng nhóm WebKit lần đầu tiên triển khai các gradient trong CSS (trừ khi bạn tính Microsoft và những filterthứ của họ , thứ không thực sự đủ điều kiện là CSS trong sách của tôi). Hiện nay Firefox đã theo họ, nhưng có vẻ không phải là bất cứ điều gì trong một W3C dự thảo CSS đặc tả chưa: xem google.co.uk/...
Paul D. Waite


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.