Avatar billede dp2001 Juniormester
06. juli 2004 - 21:35 Der er 7 kommentarer og
1 løsning

Rollover-effekt - ekstern CSS

Jeg har brug for, i en tabel, at lave en rollover-effekt a la den på http://www.onside.dk

Følgende skal være opfyldt:

1) Alle fontfarver + baggrundsfarver skal kunne styres via EKSTERN CSS
2) Tabellen skal kunne have flere celler pr. række (jeg skal ikke bruge det til en menu)
3) Fra start har ulige rækkenumre farve A og lige rækkenumre farve B - når rollover skal det skifte til farve C (font + baggrund) - og når fokus fjernes igen, skal der skiftes tilbage til farve A/B

Jeg har pt. nedenstående løsning, som virker nogenlunde. Den har dog den svaghed, at den ikke bruger eksternt stylesheet - så jeg skal hver gang rette i x antal filer.

-----------------


<script type="text/javascript">
function trcol(o,col)
{
    o.style.backgroundColor=col;
}
</script>
<%
if i mod 2 = 0 then
  response.write "<tr style=""background:#cCCCFF;"" onmouseover='trcol(this,""#FFFF33"");' onmouseout='trcol(this,""#CCCCFF"");'>"
else
  response.write "<tr style=""background:#FFFFFF;"" onmouseover='trcol(this,""#FFFF33"");' onmouseout='trcol(this,""#FFFFFF"");'>"
end if
%>
Avatar billede Jman Praktikant
06. juli 2004 - 22:01 #1
...eller du kan lave det i en include file eller en .js fil
Avatar billede roenving Novice
06. juli 2004 - 22:09 #2
Du kan i hvert fald ikke lave noget fornuftigt, som er bare nogenlunde tilgængeligt at kode, hvis _alle_ farver skal ligge i en ekstern css-fil ...

Skide irriterende, at M$ valgte at overse den del af css2-standarden, for i Mozilla og Opera kan man bare sætte :hover på selektoren ...

Hrm, tjah, måske kan jeg lige kigge på det ...
Avatar billede roenving Novice
06. juli 2004 - 23:17 #3
Sådan virker det med alle mulige style-indstillinger, jeg har lavet det i en udgave, som er aldeles ligeglad med hvor mange alternerende farver og andre styles, du bruger ...

I denne udgave ligger styles i dokumentet, men du kan bare definere dine styles i et eksternt dokument, den skulle finde dem under alle omstændigheder !-)

Dog skal du være opmærksom på, at en senere forekomst af en rule aldeles vil overskrive en tidligere, så det er bedst uden gengangere ...

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Alternative rækker m. hover i css</title>
<meta name="keywords" content="roenving,http://www.eksperten.dk/spm/517509">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css">
html,body{height:100%;margin:0px;border:0px;padding:0px;font-family:tahoma,verdana,arial,sans-serif;font-size:small;}
.trFirst{background:#eee;}
.trSecond{background:#ddd;}
.trThird{background:#ccc;}
.trHover{background:#aaa;color:white;}
</style>
<script language="javascript" type="text/javascript">
var styledefs = ['trFirst','trSecond','trThird','trHover'];//Class-names of the styles. The last is the hover-style
var styles = new Array();

function hoverColor(){
  //retrieve the actual style-definitions
  var s = document.styleSheets;
  for(i=0;s.length>i;i++){
    var r = (s[i].cssRules)?s[i].cssRules:s[i].rules;
    for(j=0;r.length>j;j++){
      for(k=0;styledefs.length>k;k++){
        if(r[j].selectorText.indexOf("."+styledefs[k])>-1){
          st = r[j].style;
          styles[k] = new Array();
          for(x in st){
            styles[k][x] = st[x];
          }
        }
      }
    }
  }
}

function trHover(elm){
  var n = styles.length-1;
  for(x in styles[n]){
    if(styles[n][x])elm.style[x] = styles[n][x];
  }
}
function trOut(elm){
  var n;
  for(i=0;styledefs.length>i;i++){
    if(elm.className.indexOf(styledefs[i])>-1){
      n=i;
      break;
    }
  }
  for(x in styles[n]){
    if(styles[n][x])elm.style[x] = styles[n][x];
  }
}
</script>
</head>
<body onload="hoverColor();">
<table id="altColor">
  <tr class="trFirst" onmouseover="trHover(this)" onmouseout="trOut(this)">
    <td>Ulige1</td>
    <td>Ulige2</td>
    <td>Ulige3</td>
    <td>Ulige4</td>
  </tr>
  <tr class="trSecond" onmouseover="trHover(this)" onmouseout="trOut(this)">
    <td>Lige1</td>
    <td>Lige2</td>
    <td>Lige3</td>
    <td>Lige4</td>
  </tr>
  <tr class="trThird" onmouseover="trHover(this)" onmouseout="trOut(this)">
    <td>Lige1</td>
    <td>Lige2</td>
    <td>Lige3</td>
    <td>Lige4</td>
  </tr>
</table>
</body>

</html>
Avatar billede roenving Novice
06. juli 2004 - 23:19 #4
PS. Så skriver du din asp-kode sådan:

<%
if i mod 2 = 0 then
  response.write "<tr class=".trFirst" onmouseover='trHover(this);' onmouseout='trOut(this);'>"
else
  response.write "<tr class=".trSecond" onmouseover='trHover(this);' onmouseout='trOut(this);'>"
end if
%>
Avatar billede dp2001 Juniormester
07. juli 2004 - 09:20 #5
Genialt! Det var lige präcis det, jeg var paa udkig efter. Hvis du gider lave et svar, saa er der point paa vej.

Jeg er lidt i tvivl om, hvad du mener med "Dog skal du være opmærksom på, at en senere forekomst af en rule aldeles vil overskrive en tidligere, så det er bedst uden gengangere ...".
Avatar billede roenving Novice
07. juli 2004 - 09:31 #6
Du kan linke så mange stylesheets ind i et dokument, som du lyster ...

Normalt vil en sådan css-style kun overskrive gengangere i properties, men denne konstruktion vil overskrive samtlige properties, derfor udsagnet !-)

-- og velbekomme '-)
Avatar billede roenving Novice
07. juli 2004 - 09:31 #7
;O)
Avatar billede roenving Novice
07. juli 2004 - 09:34 #8
Tak 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