By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
444,058 Members | 1,213 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 444,058 IT Pros & Developers. It's quick & easy.

Setting Opacity

Frinavale
Expert Mod 5K+
P: 9,731
So, the opacity style is rather annoying because every browser seems to handle it differently. I guess it's because opacity wasn't included in the w3c standards to begin with...mind you if it had been included from the get-go, I have my doubts on whether this would have changed anything that we have to deal with today.

Anyways, enough ranting....I'm attempting to place a <div> over top of my content while an asynchronous call to the server is taking place. This is done to prevent the user from submitting any additional data to the server during "special" processes...

I'd like to set the opacity of this <div> to about 50% so that it looks all "pretty" and the user knows that they aren't able to access any of the content in the area behind the <div>.

Some strange stuff is happening in IE7 and 8.
The <div> is appearing over top of the content correctly....but the opacity settings are very strange. It starts at about 50% at the middle of the <div> but as it spreads outwards it fades to 0%. It's kind of neat (a half faded circle in the center that fades to nothing)...but it's not what I want.

What am I doing wrong here?

How do I change this so that the entire <div> is faded to 50% instead of just a circle in the middle of my <div>?


Expand|Select|Wrap|Line Numbers
  1. function Processing() {
  2.     //shield is the <div> that is used  to cover the content and already has the the position style set to absolute.
  3.     var shield = document.getElementById('ctl00_CPH_MainContent_myControl_shield');
  4.     shield.style.display = 'block';
  5.  
  6.     //I had attempted setting the CSS Class for the div that would have set
  7.     //opacity of it, but this isn't working well with the asynchronous stuff in IE
  8.     //so I decided to set each individual style in JavaScript instead
  9.     //shield.className = 'modalBackground';
  10.  
  11.     shield.style.backgroundColor='white';
  12.     shield.style.filter = 'progid:DXImageTransform.Microsoft.Alpha(Opacity=50, FinishOpacity=0, Style=2)';
  13.     shield.style.opacity='.5';
  14. }
The following works but I'm don't think it will work in IE6:
Expand|Select|Wrap|Line Numbers
  1. function Processing() {    
  2.     var shield = document.getElementById('ctl00_CPH_MainContent_myControl_shield');
  3.     shield.style.display = 'block';   
  4.     //shield.className = 'modalBackground';   
  5.     shield.style.backgroundColor='white';     
  6.     shield.style.filter = 'alpha(opacity=50)';    
  7.     shield.style.opacity='.5'; 
  8. }
Thanks for your time,

-Frinny
Feb 17 '09 #1
Share this Question
Share on Google+
3 Replies


acoder
Expert Mod 15k+
P: 16,027
The element needs to "have layout" in IE for it to work. See here for more on the hasLayout property.
Feb 18 '09 #2

Frinavale
Expert Mod 5K+
P: 9,731
An interesting read.

My initial thought on the topic is: "Got Layout?"

That article actually answered a long forgotten question regarding determining the height and width (clientWidth/clientHeight) of an element in order to center it via JavaScript...I just gave up on the problem and worked around it but I think I'll revisit that code and make appropriate changes to it...thanks.

But, this article didn't help me in figure my Opacity issue.
My element has it's height and width set, it hasLayout, and the opacity is "sort of" working...

Maybe I'll just give up on the IE6 compatibility. It's almost 2 versions ago...and is so much more work! Sometimes IE really gets on my nerves....but no where near as much as Opera.

-Frinny
Feb 18 '09 #3

acoder
Expert Mod 15k+
P: 16,027
Have you got a standalone version of IE6? If so, filters may not work.
Feb 23 '09 #4

Post your reply

Sign in to post your reply or Sign up for a free account.