2009-12-22 38 views
141

Tôi đang sử dụng CSS để chỉ ra văn bản kích hoạt cho phần trượt jQuery: tức là khi bạn di chuột qua văn bản kích hoạt, con trỏ sẽ thay đổi thành con trỏ và độ mờ của văn bản kích hoạt bị giảm để chỉ ra rằng văn bản có hành động nhấp chuột.Opacity CSS không hoạt động trong IE8

Tính năng này hoạt động tốt trong Firefox và Chrome, nhưng trong IE8 độ mờ đục không thay đổi.

Tôi đã thử nhiều cài đặt CSS khác nhau mà không thành công.

Ví dụ

HTML:

<h3 class="slidedownTrigger">This is the trigger text</h3> 

CSS:

.slidedownTrigger 
{ 
    cursor: pointer; 
    -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=75)"; 
    filter: alpha(opacity=75); 
    -khtml-opacity: 0.75; 
    -moz-opacity: 0.75; 
    opacity: 0.75; 
} 

Có gì dừng IE thay đổi opacity? Lưu ý: Tôi đã thử điều này trên nhiều yếu tố khác nhau, hoán đổi thứ tự các câu lệnh CSS và chỉ sử dụng các câu lệnh của IE. Tôi cũng đã thử sử dụng

-ms-filter: "alpha(opacity=75)"; 

nhưng không thành công.

Tôi đã hết hàng để thử sửa đổi độ mờ đục hoạt động trong IE8.

Bất kỳ ý tưởng nào?

+0

Câu hỏi liên quan/trùng lặp này có câu trả lời của bạn mà tôi nghĩ. http://stackoverflow.com/questions/859000/opacity-in-web-pages –

+0

tôi thấy rằng câu hỏi - rắc rối là câu trả lời:

    lọc: alpha (opacity = 50);/* internet explorer */
    độ mờ: 0,5;/* fx, safari, opera, chrome */
    -ms-filter: "progid: DXImageTransform.Microsoft.Alpha (opacity = 50)";/* IE8 */

không hoạt động đối với tôi (tôi chỉ thử lại để kiểm tra lại). Tôi áp dụng nó cho một h3 đó là màu đen và đậm. Trong Firefox và Chrome, cài đặt độ mờ chuyển sang màu xám, như bạn mong đợi, nhưng trong IE8, nó vẫn giữ màu đen. –

+0

oops - không nhận ra bạn không sử dụng HTML trong các nhận xét - nhưng tôi nghĩ bạn có thể thấy những gì tôi đang cố gắng nói –

Trả lời

64

Không có ý tưởng nếu điều này vẫn áp dụng cho 8, nhưng lịch sử IE không áp dụng nhiều kiểu cho các phần tử không "có bố cục".

see: http://www.satzansatz.de/cssd/onhavinglayout.html

+9

IE không áp dụng nhiều kiểu cho các yếu tố mà don ' t "có bố cục." –

+4

Tuyệt vời! Cảm ơn. Đó là vấn đề. Các yếu tố tôi cố gắng điều chỉnh độ mờ cho (ví dụ: h3) không "có bố cục". Một khi tôi đã cho họ một số, opacity làm việc. Tất cả những gì tôi đã làm là thêm chiều rộng: 100%; đến h3. Cám ơn đã chỉ tôi hướng đi đúng. Tuy nhiên, có vẻ như điên (nếu không lỗi) mà Internet Explorer thực hiện điều này. –

+49

IE không áp dụng nhiều kiểu cho nhiều yếu tố. – danwellman

157

Thiết này (giống hệt như tôi đã viết) đã phục vụ tôi khi tôi cần nó:

-moz-opacity: 0.70; 
opacity:.70; 
filter: alpha(opacity=70); 
+6

Cảm ơn, tôi tin rằng "bộ lọc: alpha (opacity = 70);" dành cho IE <8. Tuy nhiên, nó không hoạt động (đối với tôi) trong IE8 (tôi vừa kiểm tra). -moz-opacity bây giờ là khá nhiều không còn tồn tại tôi tin, và opacity là cách tiêu chuẩn để làm việc - vì vậy, tự nhiên, Microsoft đã không sử dụng cách đó để làm việc (cách quá dễ dàng). –

+15

Chỉ cần đặt "độ mờ" và "bộ lọc" như bạn mô tả là đủ để làm cho nó hoạt động cho tôi trong cả FF4 và IE8. -moz-opacity là không cần thiết. – demoncodemonkey

+1

@Gabriel McAdams: bộ lọc: alpha (độ mờ = 70); làm việc (nhưng trong IE 8 Chỉ) –

48

Bạn cần phải thiết lập Opacity đầu tiên cho các trình duyệt tiêu chuẩn phù hợp, thì khác nhau các phiên bản của IE. Xem Ví dụ:

nhưng mã opacity này không làm việc trong ie8

.slidedownTrigger 
{ 
    cursor: pointer; 
    opacity: .75; /* Standards Compliant Browsers */ 
    filter: alpha(opacity=75); /* IE 7 and Earlier */ 
    /* Next 2 lines IE8 */ 
    -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=75)"; 
    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=75); 
} 

Lưu ý rằng tôi loại bỏ moz như Firefox là một trình duyệt tiêu chuẩn phù hợp và dòng đó là không còn cần thiết. Ngoài ra, nó cũng bị giảm giá, vì vậy tôi cũng loại bỏ phong cách đó.

Bên cạnh đó, các bộ lọc của IE sẽ không xác nhận tiêu chuẩn w3c, vì vậy nếu bạn muốn trang của bạn để xác nhận, tách tiêu chuẩn stylesheet của bạn từ stylesheet IE của bạn bằng cách sử dụng một câu lệnh if IE như dưới đây:

<!--[if IE]> 
<link rel="stylesheet" type="text/css" href="http://www.mysite.com/css/ie.css" /> 
<![endif]--> 

Nếu bạn tách biệt các gợi ý, trang web của bạn sẽ xác thực tốt.

+3

Chỉ cần thiết lập "độ mờ" và "bộ lọc" như bạn mô tả là đủ để làm cho nó hoạt động cho tôi trong cả FF4 và IE8. Phần có nhãn "/ * 2 dòng tiếp theo IE8 * /" là không cần thiết. – demoncodemonkey

+3

@demoncodemonkey: Đúng. Tất cả phụ thuộc vào phiên bản bạn đã cài đặt. Nếu bạn muốn khả năng tương thích tối đa, tôi đề nghị tất cả chúng. –

+0

Đúng, nhưng: "Để đảm bảo rằng người dùng Internet Explorer 7 và 8 trải nghiệm bộ lọc, bạn có thể bao gồm cả hai cú pháp được liệt kê ở trên. Do tính đặc thù trong trình phân tích cú pháp của chúng tôi, bạn cần phải bao gồm cú pháp được cập nhật trước cú pháp cũ hơn để bộ lọc hoạt động đúng trong Chế độ xem tương thích (Đây là lỗi đã biết và sẽ được sửa khi phát hành phiên bản cuối cùng của IE8). Dưới đây là ví dụ về CSS stylesheet: " (nguồn: [link] (http: // blogs.msdn.com/b/ie/archive/2008/09/08/microsoft-css-vendor-extensions.aspx)) – zrathen

17

minh bạch Rõ ràng alpha chỉ hoạt động trên các yếu tố mức khối trong IE 8. Set display: block.

+1

Đây là mẹo duy nhất phù hợp với tôi. Cảm ơn. – matt

+0

thanx hoạt động gr8 –

17

Sử dụng display: inline-block; hoạt động trên IE8 để giải quyết vấn đề này.

FWIW, opacity: 0.75 hoạt động trên tất cả các trình duyệt tuân thủ tiêu chuẩn.

+0

Điều này đã giúp tôi, cảm ơn –

2

Không có câu trả lời nào ở trên phù hợp với tôi, vì vậy tôi chỉ đưa thẻ DIV của mình làm hình nền trong suốt thay thế, hoạt động hoàn hảo cho tất cả các trình duyệt.

1

Mã này hoạt động

filter: alpha(opacity = 50); zoom:1; 

Bạn cần phải thêm bất động sản zoom cho nó hoạt động :)

1

Bạn cũng có thể thêm một polyfil để cho phép sử dụng opacity bản địa IE6-8.

https://github.com/bladeSk/internet-explorer-opacity-polyfill

Đây là một độc lập polyfil mà không yêu cầu jQuery hoặc các thư viện khác. Có một số cảnh báo nhỏ nó không hoạt động trên các kiểu nội tuyến và đối với bất kỳ tờ định kiểu nào cần có độ mờ đục, chúng phải tuân thủ chính sách bảo mật gốc.

Cách sử dụng là chết đơn giản

<!--[if lte IE 8]> 
    <script src="jquery.ie-opacity-polyfill.js"></script> 
<![endif]--> 

<style> 
    a.transparentLink { opacity: 0.5; } 
</style> 

<a class="transparentLink" href="#"> foo </a> 
5

CSS

tôi sử dụng để sử dụng sau đây từ CSS-Tricks:

.transparent_class { 
    /* IE 8 */ 
    -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; 

    /* IE 5-7 */ 
    filter: alpha(opacity=50); 

    /* Netscape */ 
    -moz-opacity: 0.5; 

    /* Safari 1.x */ 
    -khtml-opacity: 0.5; 

    /* Good browsers */ 
    opacity: 0.5; 
} 

Compass

Tuy nhiên, một giải pháp tốt hơn là sử dụng Opacity Compass mixin, tất cả những gì bạn cần làm là @include opacity(0.1); và nó sẽ chăm sóc của bất kỳ vấn đề qua trình duyệt cho bạn. Bạn có thể tìm thấy một ví dụ here.

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