Avatar billede Slettet bruger
12. december 2005 - 22:49 Der er 10 kommentarer og
1 løsning

Pakke CSS ind i JavaScript?

Hejsa.

Jeg søger en metode, til atpakke et par CSS-tags ind i JavaScript. Kan det lade sig gøre?

Og hvorfor ønsker jeg mon det? Jo, fordi jeg bruger en menu, som indeholder 2 CSS-tags, som ikke kan valideres korekt.

Her er linket til menuen jeg ønsker at bruge:
http://youngpup.net/_projectDirectories/transmenus/demos/photos/index.html

Her er de 2 CSS-tags, som W3C ikke vil acceptere:
    -moz-opacity:.4;
    filter:alpha(opacity=40);

Ja, det vil nok bare være det rene snyd, hvis man pakker de 2 CSS-tags ind i en JavaScript, for at omgå W3C´s validator.
Men "sandbox" skriver her: "@ 09/12-2005 18:35:53" i mit tidligere spørgsmål: http://eksperten.dk/spm/670857 at: "Og jeg vil nærmest sige, at det er en fejl i validatoren, at den kommer med en egentlig fejl over -moz-opacity. I stedet burde den have givet en advarsel i stil med "Unknown vendor-specific attribute"..."

Så hvad pokker - nu forsøger jeg på denne måde, at omgå W3C´s validator alligevel. :-)
Avatar billede Slettet bruger
13. december 2005 - 06:11 #1
hmmm, måske er det simpelt, hvis du køber følgende argument.

Ved det at du konstantere at moz-opacity ikke valideres men du ønsker at bruge den alligevel, så siger du vel egentligt at du ikke er interesseret i W3C validatorens mening lige hvad angår den specifikke style, så hvorfor bruger du ikke bare stylen og lader validator være validator ihvertfald hvad angår denne del af din CSS. Der giver vel ikke mening at bruge den indirekte ud fra betragtningen at enten så bruger man kun W3C styles eller også er man lidt praktisk.

IMHO, lad det være og lad være med at komplicerer tingene ved indirekte styling.
Avatar billede Slettet bruger
13. december 2005 - 20:20 #2
Jepper, jeg kan udemærket følge hvad du mener. Det er ellers også min mening: Enten følger man W3C´s validator, eller også blæser man på den.

Men sagen er, at jeg indtil nu har brugt så lang tid/energi på at optimere/tilpasse både XHTML, CSS osv., at jeg stadig vil følge den vej.
Men nu er det bare , at jeg er løbet ind i dette problem, fordi jeg har set mig blind på at bruge netop denne menu med disse 2 uvaliderbare CSS-tags.
Så jeg sidder på 2 stole lige nu...
Derfor tænker jeg på denne løsning, med at pakke det ind i et JavaScript. Tilmed sker der alligevel ingen skade ved, at ældre/andre browsere ikke kan eksekvere de 2 tags - menuen vises nemlig bare uden gennemsigtigheden.

Men er der virkelig ingen herinde, som kan det lille fif, at pakke 2 CSS-tags ind i et JavaScript???
Avatar billede there-is-only-xul Nybegynder
13. december 2005 - 22:31 #3
Kig på roenvings kode :)

http://roenving.users.whitehat.dk/
Avatar billede Slettet bruger
14. december 2005 - 01:26 #4
there-is-only-xul:
Jepper, jeg kan godt se hvad du mener. :-)

Jeg går stærkt ud fra, at du mener koden fra denne side?
http://roenving.users.whitehat.dk/index.html?/WD5Opacity.html

MEN:
Jeg fatter altså ikke lige, hvordan jeg kan putte de 2 CSS-tags ind her:
<script language="javascript" type="text/javascript">

var OpC = new Array();
var ie,moz,css3; function startOpChange(elm,end,tim){
  ie = !!elm.filters;
  moz = elm.style.MozOpacity != undefined;
  css3 = elm.style.opacity != undefined;
  if (!ie && !moz && !css3)return;
  var idx = OpC.length;
  for(var i=0;idx>i;i++){
    if(OpC[i][0]==elm){
      clearInterval(OpC[i][4]);
      idx = i;
      break;
    }
    OpC[idx] = new Array();
  }
  if(idx==0)OpC[idx] = new Array();
 
  if(ie)actOp=elm.filters.alpha.opacity;
  else if(css3)actOp=(elm.style.opacity*100);
  else actOp=(elm.style.MozOpacity*100);
  if (actOp!=end){
    OpC[idx][0]=elm;
    OpC[idx][1]=actOp;
    OpC[idx][2]=end;
    OpC[idx][3]=(end>actOp)?1:-1;
    var delayTime = Math.floor((tim*1000)/Math.abs((actOp-end)));
    OpC[idx][4]=setInterval("opChange("+idx+")",delayTime);
  }
}

function opChange(idx){
  OpC[idx][1]+=OpC[idx][3];
  if (ie)OpC[idx][0].filters.alpha.opacity=OpC[idx][1];
  else if(css3)OpC[idx][0].style.opacity=Math.min(0.99,OpC[idx][1]/100);
  else OpC[idx][0].style.MozOpacity=Math.min(0.99,OpC[idx][1]/100);
  if (OpC[idx][1]==OpC[idx][2]){
    clearInterval(OpC[idx][4]);
    return;
  }
}

</script>


Kan du ikke venligst ordne den lille sag for mig? Så er du en guttermand! ;-)
Avatar billede roenving Novice
14. december 2005 - 16:54 #5
Du kan sætte start-opaciteten ved at lægge det på onload:

<script type="text/javascript">
window.onload = function(){
var defOpacity = 30;
var elms = document.getElementsByTagName("div");//skriv det rigtige tagname !-)
if(elms){
  if(elms[0].filters)
    for(i=0;elms.length>i;i++)
      elms[i].filters.alpha.opacity = defOpacity;
  else if(elms[0].style.MozOpacity != undefined)
    for(i=0;elms.length>i;i++)
      elms[i].style.MozOpacity = defOpacity/100;
  else if(elms[0].style.opacity != undefined)
    for(i=0;elms.length>i;i++)
      elms[i].style.opacity = defOpacity/100;
}
}
</script>

-- en rå skitse, for du skal sikkert også vælge mellem de, der skal have gennemsigtigheden og andre elementer med samme tagname !-)
Avatar billede Slettet bruger
04. februar 2006 - 23:01 #6
Well... jeg kan ikke få det til at virke - og hvis jeg ikke får hjælp til at løse opgaven, må jeg afslutte spørgsmålet og komme videre. :-)
Avatar billede roenving Novice
05. februar 2006 - 02:48 #7
Hrm, tjah ...

-- hvad har du gjort ?-)
Avatar billede Slettet bruger
24. februar 2006 - 23:24 #8
roenving:
Tak for din tid og indsats. :-)
Læg venligst et svar, så jeg kan få afsluttet spørgsmålet. :-)
Avatar billede roenving Novice
25. februar 2006 - 15:13 #9
Oki '-)
Avatar billede Slettet bruger
25. februar 2006 - 20:49 #10
Selv tak, og velbekommen! :-)
Avatar billede roenving Novice
25. februar 2006 - 21:10 #11
-- og jeg takker for point ;~}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester