"We are back" « oc.at

CSS - tables als button

fleshmark 05.02.2004 - 23:37 820 12
Posts

fleshmark

GameDev
Avatar
Registered: Aug 2000
Location: Wien
Posts: 2958
hab folgendes problem:

ich möchte eine tabelle mit einem link mittels css zu einem button umfunktionieren.

also einfaches bsp:

tabelle mit einem link drin.
wenn user mit der maus auf die tabelle fährt, soll sich der hintergrund (und evtl. der rahmen) der zelle ändern.
Es soll auch nix herumspringen (zb. tabelle grösser werden oä.)
zusätzlich soll das ganze flexibel bleiben, dh. sobald ich die höhe der tabelle ändere soll das ganze auch noch fehlerfrei funktionieren.

und für alle browser sollts auch noch gehn :)

bin bei css noch ganz am anfang und komm auch mit div. tutorials nicht wirklich weiter :( hoff ihr könnt mir helfen.

edit: erwähnt soll auch noch sein, ich hab bereits schon herumgespielt aber alles was rausgekommen ist - schaut shize aus :o

Rektal

Here to stay
Registered: Dec 2002
Location: Inside
Posts: 4533
Geht nicht "in allen Browsers" mit CSS. Das koennen vermutlich nur Gecko basierte, Opera und vielleicht Safari.

Normalerweise sieht das so aus:
CSS
Code:
.actAsButton {
  border: 2px solid black;
}
.actAsButton:hover {
  border: 2px solid orange;
}
HTML
Code:
<table class="actAsButton">
  <tbody>
    <tr>
      <td><a href="target.html">This is my link</a></td>
    </tr>
  </tbody>
</table>
Wie unschwer zu erkennen liegt der "Trick" in der Verwendung der CSS Pseudo-Klasse ":hover"; dank M$ unterstuetzt der IE das aber nicht.

Hier kann man sich nur mit Javascript helfen, z.B.
Code:
<script type="text/javascript">
  function onmouseoverTable() {
    this.style.border = '2px solid orange';
  }
  function onmouseoutTable() {
    this.style.border = '2px solid black';
  }
  window.onload = function() {
    if (!document.getElementsByTagName) {
      return;
    }
    var tableButtons = document.getElementsByTagName('table');
    var i;
    for(i = 0; i < tableButtons.length; i++) {
      if (tableButtons[i].className == 'actAsButton') {
        tableButtons[i].onmouseover = onmouseoverTable;
        tableButtons[i].onmouseout = onmouseoutTable;
      }
    }
  }
Ist jetzt nur ausm Kopf geschrieben, aber so gehts prinzipiell.

funka

Legend
ex-prophet(down below)
Registered: Sep 2000
Location: Vienna / SF
Posts: 6131
ist es nicht moeglich den table komplett zu kuebeln und einfach den a wie einen button aussehen zu lassen? maybe noch ein div rundherum

da wisna

Big d00d
Registered: Mar 2003
Location: @ home
Posts: 223
die pseudo-classe :hover funzt beim IE doch.....

zumindest läufts bei mir ohne irgendwelche probleme

funka

Legend
ex-prophet(down below)
Registered: Sep 2000
Location: Vienna / SF
Posts: 6131
afair funkts nur bei a tags
obs 6.0 schon bei mehr tags versteht weiss ich jetzt spontan nicht

orpheus

in a nutshell
Avatar
Registered: Mar 2002
Location: Klagenfurt
Posts: 532
Zitat von funka
afair funkts nur bei a tags
obs 6.0 schon bei mehr tags versteht weiss ich jetzt spontan nicht
iirc gibt's beim IE ab v6.0 ja einen standards-compliant mode oder irre ich mich da!?

Ich persönlich würde wenn's überhaupt nötig ist tables zu verwenden :D das Menu als Liste schreiben (das dann in eine Zelle geschissen wird :( ) und den Rest CSS machen lassen.

also z.B.
Code:
<ul id="navlist">
 <li><a href="#">Maus</a></li>
 <li><a href="#">Haus</a></li>
 <li><a href="#">Aus</a></li>
</ul>

Code:
#navlist
{
width: 200px;
margin-left: 0;
padding-left: 0;
list-style-type: none;
}

#navlist a
{
display: block;
padding: 3px;
width: 160px;
background-color: #036;
border-bottom: 1px solid #eee;
}

#navlist a:link, #navlist a:visited
{
color: #EEE;
text-decoration: none;
}

#navlist a:hover
{
background-color: #369;
color: #fff;
}

Anregungen zum dementsprechenden CSS gibt's bei List-O-Matic ;)
Bearbeitet von orpheus am 06.02.2004, 12:49

Mr. Zet

Vereinsmitglied
resident spacenerd
Avatar
Registered: Oct 2000
Location: Edge of Tomorrow
Posts: 12102
CSS (ich weiß, es is ned optimal ;) )
Code:
td { text-align:center; }
.orange { background-color:#FF9000; text-align:center; }

a.menu { width:100%; height:100%; display:block; }
a.menu:link { text-decoration:none; font-weight:bold; color:#000000; }
a.menu:visited { text-decoration:none; font-weight:bold; color:#000000; }
a.menu:hover { text-decoration:none; font-weight:bold; background-color:#FFB100; }
a.menu:active { text-decoration:none; font-weight:bold; background-color:#D45C00; }


HTML (nur eine zelle der menü-tabelle)
Code:
<td class="orange">
<a class="menu" href="main.htm" target="content">H o m e</a>
</td>


und so sieht das aus -> http://mrzet.randoom.net

browser-unterschied: im IE bleibt :active solange aktiv, bis ma wo anders hinklickt -> man sieht wo man gerade ist

im mozilla (bzw. gecko based) sieht man :active nur solange man die maustaste drückt.
Bearbeitet von Mr. Zet am 06.02.2004, 12:51

Murph

Nerd
Avatar
Registered: Dec 2001
Location: Vienna
Posts: 9236
edit:
pf, a blödsinn den ich da schreib! :bash:
del plz

fleshmark

GameDev
Avatar
Registered: Aug 2000
Location: Wien
Posts: 2958
thx für die replies!

@orpheus, mr.zet:
lösungen wie eure hätt ich eh schon gehabt, nur hier ist das problem (soweit ich das sehn kann) dass wenn ich die zelle vergrössere, das ganze nicht mehr schön aussieht, weil sich euer background-color nur auf die schrift bzw. den link selbst auswirkt und nicht auf die zelle.
hoff das stimmt was ich sag ;)

@rektal: genau javascript wollt ich vermeiden, wenns geht.

Rektal

Here to stay
Registered: Dec 2002
Location: Inside
Posts: 4533
Zitat von Mr. Zet
Zitat von JoeDesperado
wird der film wirklich um so vieles besser wenn man das buch gelesen hat?
Nicht optimal? Das ist ja schlimm :)

Wenn du ein a.menu zuweist, es hat "text-decoration: none; font-weight: bold;", wird das automatisch (!) fuer die pseudo-klassen vererbst.

D.h. fuer den hover, active und visited code brauchst nur die veraenderten Farben setzen und nicht wieder alle Attribute nochmal angeben. That's the cascading part of CSS.

Rektal

Here to stay
Registered: Dec 2002
Location: Inside
Posts: 4533
Zitat von fleshmark
Zitat von Mr. Zet
Zitat von JoeDesperado
wird der film wirklich um so vieles besser wenn man das buch gelesen hat?

Ah, um das gehts. Solltest du vielleicht gleich sagen. Du kannst dem a-Element sagen, es soll sich wie ein block-Element (z.B. DIV) verhalten, d.h. den ganzen platz (zumindest horizontal) aufbrauchen.

Mit der Hoehe ist das so eine Sache. Die Frage ist, warum sollte sich die auf einmal aendern?

Beispiele waren im obrigen eigentlich schon, hier nochmal kurz:

CSS
Code:
a {
  display: block;
  background-color: black;
  color: white;
  font-weight: bold;
}
a:hover {
  background-color: red;
  color: yellow;
}
HTML
Code:
<html>
  <body>
    <a href="">Foo</a>
    <a href="">Bar</a>
  </body>
</html>

fleshmark

GameDev
Avatar
Registered: Aug 2000
Location: Wien
Posts: 2958
hm, werd das ganze mit der höhe jetzt mit padding, padding-bottom lösen.
danke an alle helfenden :)

Mr. Zet

Vereinsmitglied
resident spacenerd
Avatar
Registered: Oct 2000
Location: Edge of Tomorrow
Posts: 12102
thx rektal für aufklärung :)
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz