Độ mờ nền CSS với rgba không hoạt động trong IE 8


110

Tôi đang sử dụng CSS này cho độ mờ nền của <div>:

background: rgba(255, 255, 255, 0.3);

Nó hoạt động tốt trên Firefox, nhưng không hoạt động trong IE 8. Làm cách nào để làm cho nó hoạt động?

Câu trả lời:


73

Tạo một png lớn hơn 1x1 pixel (cảm ơn ba mươi điểm) và phù hợp với độ trong suốt của nền của bạn.

CHỈNH SỬA: để hỗ trợ IE6 +, bạn có thể chỉ định bkgd chunk cho png, đây là màu sẽ thay thế độ trong suốt alpha thực sự nếu nó không được hỗ trợ. Bạn có thể sửa nó bằng gimp vd.


2
Đúng vậy. rgba()giá trị màu không được hỗ trợ trong IE 8.
Paul D. Waite

11
Để tránh sự cố tiềm ẩn, hãy sử dụng bất kỳ kích thước nào khác ngoài 1x1: stackoverflow.com/questions/7764751/…
31

43
Có thể được chấp nhận vào năm 2003, nhưng không được chấp nhận vào năm 2013. Hoặc sử dụng -ms-filter để hỗ trợ phần nào mô phỏng trong IE cũ, hoặc tốt hơn là bỏ qua nó. Những người sử dụng IE8- đáng bị trừng phạt vì không nhìn thấy bán kính đường viền, nền trong suốt, v.v.
Evgeny

21
@EugeneXa Tôi làm việc cho khách hàng của mình chứ không phải ngược lại. Nếu họ sử dụng IE8, thì tôi ủng hộ. Trừng phạt khách hàng tiềm năng không phải là cách kinh doanh tốt.
Eli

14
@EugeneXa Gần 10% trên các trang web của tôi và họ thường là những khách hàng tốt. Không có câu trả lời đúng duy nhất ở đây. Làm toán và tìm ra những gì phù hợp với bạn. Thậm chí 6% có thể rất lớn đối với một số trang web! Không có người dùng nào đáng bị trừng phạt. Tôi nghĩ bạn sẽ hối hận vì thái độ đó.
Eli

241

để mô phỏng nền RGBA và HSLA trong IE, bạn có thể sử dụng bộ lọc gradient, có cùng màu bắt đầu và màu kết thúc (kênh alpha là cặp đầu tiên trong giá trị của HEX)

background: rgba(255, 255, 255, 0.3); /* browsers */
filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='#4cffffff', endColorstr='#4cffffff'); /* IE */

2
làm việc này một điều trị, ngoại trừ tiếc là nó dường như ngừng hoạt động nếu phần tử là tự động ẩn đi và tái hiển thị bằng jQuery ...
jackocnr

rgba IE lọc là rất hữu ích và tôi đã có thể get việc xung quanh cho> ie7
codingbbq

Độ mờ 0,6 cho bộ lọc là bao nhiêu?
Si8

10
Bạn có thể tìm thấy mã Hex cho độ trong suốt (cặp đầu tiên) tại đây: ( stackoverflow.com/questions/15852122/hex-transparency-in-colors )
user1794295 Ngày

2
Có một máy tính cho các giá trị hex tùy chỉnh IE đó!
nietonfir

14

Tôi tin rằng đây là cách tốt nhất vì trên trang này có một công cụ giúp bạn tạo nền trong suốt alpha:

" CSS nền trong suốt alpha của trình duyệt chéo (rgba) " (* hiện được liên kết với archive.org)

#div {
    background:rgb(255,0,0);
    background: transparent\9;
    background:rgba(255,0,0,0.3);
    filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#4cFF0000,endColorstr=#4cFF0000);
    zoom: 1;
}

Và hãy nhớ luôn luôn sử dụng RGBA màu hex trong bộ lọc: eq # 004F80 là # ed004F80
user956584

9

hình ảnh png trong suốt sẽ không hoạt động trong IE 6-, các lựa chọn thay thế là:

với CSS:

.transparent {

    /* works for IE 5+. */
    filter:alpha(opacity=30); 

    /* works for IE 8. */
    -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=30)";

    /* works for old school versions of the Mozilla browsers like Netscape Navigator. */
    -moz-opacity:0.3; 

    /* This is for old versions of Safari (1.x) with KHTML rendering engine */
    -khtml-opacity: 0.3; 

    /* This is the "most important" one because it's the current standard in CSS. This will work in most versions of Firefox, Safari, and Opera. */  
    opacity: 0.3; 
}

hoặc chỉ làm điều đó với jQuery:

// a crossbrowser solution
$(document).ready(function(){ 
    $(".transparent").css('opacity','.3');
});

24
Alpha nền không giống như độ mờ (nó cũng không làm cho phần tử con trong suốt).
Alexey Smolyakov

1
Đây không phải là câu trả lời cho câu hỏi và CSS được áp dụng thông qua jQuery (hoặc JavaScript nói chung) là một giải pháp trình duyệt chéo.
mystrdat

7

Mặc dù đã muộn nhưng tôi đã phải sử dụng nó ngay hôm nay và tìm thấy một tập lệnh php rất hữu ích ở đây cho phép bạn tạo động một tệp png, giống như cách hoạt động của rgba.

background: url(rgba.php?r=255&g=100&b=0&a=50) repeat;
background: rgba(255,100,0,0.5);

Tập lệnh có thể được tải xuống tại đây: http://lea.verou.me/wp-content/uploads/2009/02/rgba.zip

Tôi biết nó có thể không phải là giải pháp hoàn hảo cho tất cả mọi người, nhưng nó đáng để xem xét trong một số trường hợp, vì nó tiết kiệm rất nhiều thời gian và hoạt động hoàn hảo. Hy vọng điều đó sẽ giúp ai đó!


2
Cách này hoạt động - URL rgba.php chỉ được yêu cầu bởi các trình duyệt không hỗ trợ rgba? Hay nó luôn nhận được yêu cầu của tất cả người dùng và chỉ đơn giản là không được hiển thị?
Darren Cook

Tôi hy vọng rằng trình duyệt sẽ tự động nhìn thấy nền thứ hai và bỏ qua nền thứ nhất, trước khi nó cố gắng đưa ra yêu cầu. Nhưng, đó là một phỏng đoán có học thức.
Swivel

7

Hầu hết các trình duyệt đều hỗ trợ mã RGBa trong CSS nhưng chỉ IE8 trở xuống không hỗ trợ mã RGBa css. Đối với Đây là giải pháp. Đối với Giải pháp, bạn phải tuân theo mã này và tốt hơn là hãy làm theo trình tự của nó nếu không bạn sẽ không nhận được đầu ra hoàn hảo như bạn muốn. Mã này được tôi sử dụng và nó hầu như hoàn hảo. đưa ra nhận xét nếu nó hoàn hảo.

.class
 {
        /* Web browsers that does not support RGBa */
        background: rgb(0, 0, 0);
        /* IE9/FF/chrome/safari supported */
        background: rgba(0, 0, 0, 0.6);
        /* IE 8 suppoerted */
        /* Here some time problem for Hover than you can use background color/image */
        -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#88000000, endColorstr=#88000000)";
        /* Below IE7 supported */
        filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#88000000, endColorstr=#88000000);
 }

5

Bạn sử dụng css để thay đổi độ mờ. Để đối phó với IE, bạn cần một số thứ như:

.opaque {
    opacity : 0.3;
    -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=30)";
    filter: alpha(opacity=30);
}

Nhưng vấn đề duy nhất với điều này là nó có nghĩa là bất kỳ thứ gì bên trong vùng chứa cũng sẽ có độ mờ 0,3. Vì vậy, bạn sẽ phải thay đổi HTML của mình để có một vùng chứa khác, không phải bên trong vùng trong suốt, chứa nội dung của bạn.

Nếu không, kỹ thuật png sẽ hoạt động. Ngoại trừ việc bạn cần một bản sửa lỗi cho IE6, bản thân nó có thể gây ra sự cố.


4
haha trường hợp điển hình của một trình duyệt không hành động như phần còn lại, và mỗi phiên bản của trình duyệt mà không hành động như các phiên bản khác của cùng một trình duyệt ... chỉ Microsoft có thể đạt được điều này khá nên thành công ...
ClarkeyBoy

3
@Paul D. Waite: Có rất nhiều tính năng mà các trình duyệt cung cấp bên cạnh cách chúng hiển thị nội dung. Sai lệch so với thông số kỹ thuật không phải (hoặc không nên) là một tính năng.
Bobby Jack

@ Paul D. Waite: Ok tôi thấy quan điểm của bạn, nhưng những gì tôi có nghĩa là phiên bản khác nhau của IE hành động rất khác nhau mà tôi thấy mình cần phải tạo ra một kiểu khác nhau cho mỗi phiên bản ... Tôi có stylesheets khác nhau cho IE6, 7 và 8 ... nhưng tôi chỉ có một biểu định kiểu cho tất cả FF / Chrome / Opera / Safari. @Bobby Jack: biệt phái ...
ClarkeyBoy

@Bobby: Chắc chắn rồi, nhưng IE 8 không lệch tiêu chuẩn hơn IE 7 hay IE 6, chắc chứ?
Paul D. Waite,

@ClarkeyBoy: chắc chắn. Tôi thấy biểu định kiểu IE 8 của mình đơn giản hơn rất nhiều so với biểu định kiểu IE 6 của tôi. IE là trình duyệt kỳ lạ nhất, nhưng nó đang dần phù hợp với các trình duyệt khác. Firefox không hỗ trợ rgba()cho đến khi phiên bản 3, và Opera không hỗ trợ nó cho đến khi phiên bản 10
Paul D. Waite


2

Để sử dụng rgbanền trong IE, có một dự phòng.

Chúng tôi phải sử dụng thuộc tính bộ lọc. Sử dụngARGB

    background:none;
    -ms-filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#33ffffff,endColorstr=#33ffffff);
    filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#33ffffff,endColorstr=#33ffffff);
    zoom: 1;

đây là dự phòng cho rgba(255, 255, 255, 0.2)

Thay đổi #33fffffftheo ý bạn.

Cách tính toán ARGBchoRGBA


Tôi đã tìm kiếm bộ chuyển đổi ARGB sang RGBA đó mãi mãi, Cảm ơn! web.archive.org/web/20131207234608/http://kilianvalkhof.com/…
Justin

1

điều này giúp tôi giải quyết vấn đề trong IE8:

-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=1)";

Chúc mừng


1

Giải pháp này thực sự hiệu quả, hãy thử nó. Đã thử nghiệm trong IE8

.dash-overlay{ 
   -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#4C000000,endColorstr=#4C000000)"; 
}

0

Rất đơn giản, bạn phải cung cấp trước tiên bạn phải cung cấp backgound là rgb vì Internet Explorer 8 sẽ hỗ trợ rgb thay vì rgba và sau đó bạn phải cung cấp độ mờ như filter:alpha(opacity=50);

background:rgb(0,0,0);
filter:alpha(opacity=50);

0

Đây là một giải pháp minh bạch cho hầu hết các trình duyệt bao gồm IE x

.transparent {
    /* Required for IE 5, 6, 7 */
    /* ...or something to trigger hasLayout, like zoom: 1; */
    width: 100%; 

    /* Theoretically for IE 8 & 9 (more valid) */   
    /* ...but not required as filter works too */
    /* should come BEFORE filter */
    -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";

    /* This works in IE 8 & 9 too */
    /* ... but also 5, 6, 7 */
    filter: alpha(opacity=50);

    /* Older than Firefox 0.9 */
    -moz-opacity:0.5;

    /* Safari 1.x (pre WebKit!) */
    -khtml-opacity: 0.5;

    /* Modern!
    /* Firefox 0.9+, Safari 2?, Chrome any?
    /* Opera 9+, IE 9+ */
    opacity: 0.5;
}

0

Giải pháp tốt nhất mà tôi tìm thấy cho đến nay là giải pháp do David J Marland đề xuất trong blog của anh ấy , để hỗ trợ độ mờ trong các trình duyệt cũ (IE 6+):

.alpha30{
    background:rgb(255,0,0); /* Fallback for web browsers that don't support RGBa nor filter */ 
    background: transparent\9; /* backslash 9 hack to prevent IE 8 from falling into the fallback */
    background:rgba(255,0,0,0.3); /* RGBa declaration for browsers that support it */
    filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#4cFF0000,endColorstr=#4cFF0000); /* needed for IE 6-8 */
    zoom: 1; /* needed for IE 6-8 */
}

/* 
 * CSS3 selector (not supported by IE 6 to IE 8),
 * to avoid IE more recent versions to apply opacity twice
 * (once with rgba and once with filter)
 */
.alpha30:nth-child(n) {
    filter: none;
}

0

Sau khi tìm kiếm rất nhiều, tôi đã tìm thấy giải pháp sau đây đang hoạt động trong trường hợp của tôi:

.opacity_30{
    background:rgb(255,255,255); /* Fallback for web browsers that don't support neither RGBa nor filter */ 
    background: transparent\9; /* Backslash 9 hack to prevent IE 8 from falling into the fallback */
    background:rgba(255,255,255,0.3); /* RGBa declaration for modern browsers */
    -ms-filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#4CFFFFFF,endColorstr=#4CFFFFFF); /* IE 8 suppoerted; Sometimes Hover issues may occur, then we can use transparent repeating background image :( */
    filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#4CFFFFFF,endColorstr=#4CFFFFFF); /* needed for IE 6-7 */
    zoom: 1; /* Hack needed for IE 6-8 */
}

/* To avoid IE more recent versions to apply opacity twice (once with rgba and once with filter), we need the following CSS3 selector hack (not supported by IE 6-8) */
.opacity_30:nth-child(n) {
    filter: none;
}

* Quan trọng: Để tính toán ARGB (cho IE) từ RGBA, chúng tôi có thể sử dụng các công cụ trực tuyến:

  1. https://kilianvalkhof.com/2010/css-xhtml/how-to-use-rgba-in-ie/
  2. http://web.archive.org/web/20131207234608/http://kilianvalkhof.com/2010/css-xhtml/how-to-use-rgba-in-ie/
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.