Avatar billede madssch Nybegynder
22. november 2006 - 10:53 Der er 17 kommentarer og
2 løsninger

Flere XHTML udfordringer

Hej Eksperter,

I mit forsøg på at kode XHTML valid kode, er jeg stødt på endnu en udfordring:

Jeg skal have 3 altid lige høje kolonner. Den sidste kolonne skal opdeles i 2 rækker (tabel-sprog). Altså:

<table>
<tr>
<td rowspan="2"></td>
<td rowspan="2"></td>
<td rowspan="2"></td>
</tr>
<tr>
<td></td>
</tr>
</table>

Min rigtig store udfordring er, at der i hver celle skal være et element ( formentlig en tabel :-( ), som altid fylder hele TD'ens højde. Den skal endvidere kunne gøre den ydre TD højere, såfremt indholdet kræver det.

XHTML reagerer jo ikke på "height" i en tabel, så hvad er løsningen?

Jeg ville meget gerne slippe for tabellerne, men har desværre vist ingen anden løsning i dette tilfælde..?

Eksempel på indre tabel:

<table border="0" cellpadding="0" cellspacing="0" width="240" style="height:100%;">
    <tr>
        <td class="BoxTopLeft"></td>
        <td class="BoxTopMiddle">HEADER</td>
        <td class="BoxTopRight"></td>
    </tr>
    <tr>
        <td class="BoxMiddleLeft"></td>
        <td class="BoxMiddleMiddle">CONTENT</td>
        <td class="BoxMiddleRight"></td>
    </tr>
    <tr>
        <td class="BoxBottomLeft"></td>
        <td class="BoxBottomMiddle"></td>
        <td class="BoxBottomRight"></td>
    </tr>
</table>

Hele idéen er, at ovenstående tabel kan give sig alt efter indholdet.

Hmmm... Er det her overhovedet til at forstå?  :(

Håber nogen kan være behjælpelige...
Avatar billede madssch Nybegynder
22. november 2006 - 10:54 #1
Fejlrettelse:

<table>
<tr>
<td rowspan="2"></td>
<td rowspan="2"></td>
<td></td>
</tr>
<tr>
<td></td>
</tr>
</table>
Avatar billede roenving Novice
22. november 2006 - 11:13 #2
Hvorfor ikke bare:

<table>
  <tr>
    <td class="firstRows">
      <div>
        Header
      </div>
      <div>
        Content
      </div>
      <div>
        Bottom
      </div></td>
    <td class="firstRows">
      <div>
        Header
      </div>
      <div>
        Content
      </div>
      <div>
        Bottom
      </div></td>
    <td class="lastRow">
      <div>
        Top
      </div>
      <div>
        Bottom
      </div></td>
  </tr>
</table>

-- og klasserne er kun til at definere bredden:

.firstRows{width:40%;}
.lasRow{width:20%;}
Avatar billede madssch Nybegynder
22. november 2006 - 11:39 #3
Denne her er vigtig:

<table border="0" cellpadding="0" cellspacing="0" width="240" style="height:100%;">
    <tr>
        <td class="BoxTopLeft"></td>
        <td class="BoxTopMiddle">HEADER</td>
        <td class="BoxTopRight"></td>
    </tr>
    <tr>
        <td class="BoxMiddleLeft"></td>
        <td class="BoxMiddleMiddle">CONTENT</td>
        <td class="BoxMiddleRight"></td>
    </tr>
    <tr>
        <td class="BoxBottomLeft"></td>
        <td class="BoxBottomMiddle"></td>
        <td class="BoxBottomRight"></td>
    </tr>
</table>

Hver klasse indeholder en baggrundgrafik. Gældende for BoxTopMiddle, BoxMiddleMiddle og BoxBottomMiddle er, at de kun har defineret enten bredde eller højde. På den måde kan jeg bruge samme kasse-setup uanset størrelsen på kassen.

Snakker vi forbi hinanden?

Søgte lidt rundt på nettet og fandt ud af, at indsatte jeg på aller første linje denne:

<?xml version="1.0" encoding="iso-8859-1" ?>

...virkede det pludselig korrekt. Bliver min DTD nu pludselig ikke læst, eller..?
Avatar billede roenving Novice
22. november 2006 - 12:08 #4
-- hvis du indsætter xml-deklarationen (eller noget som helst andet !-) før doctype nægter IE at anerkende de almindeligste css-regler !o]
Avatar billede madssch Nybegynder
22. november 2006 - 12:29 #5
Altså ikke nogen gid idé så. Virkede heller ikke ordentligt i FF og Opera.

Hvordan pokker løser jeg det så?
Avatar billede madssch Nybegynder
22. november 2006 - 13:58 #6
Jeg har omskrevet hele kassen til ren CSS. Troede faktisk der skulle lidt mere til.

Jeg mangler bare at løse, hvordan jeg gør de 3 css-kolonner lige høje.

Har nogen et bud?

3 float'ende div's...
Avatar billede madssch Nybegynder
22. november 2006 - 14:46 #7
Ok, så langt så godt. Nu bliver min kolonner faktisk lige lange:

<div id="BoxTemplate1" style="overflow:hidden;">

    <div class="BoxHolder" style="width:233px;margin-right:10px;padding-bottom:3000px;margin-bottom:-3000px;">
   
   
        <div class="BoxTop">
       
            <div class="BoxTopCornerLeft"></div>
           
            <div class="BoxTopMiddle">HEADER</div>
           
            <div class="BoxTopCornerRight"></div>
       
        </div>
   
       
        <div class="BoxMiddle">
       
            Her er noget indhold.
           
            <p />
           
            Og endnu mere indhold...
       
        </div>
       
       
        <div class="BoxBottom">
       
            <div class="BoxBottomCorner"></div>
       
        </div>
   
   
    </div>

x 3

</div>

Min sidste hovedpine er, at  elementet "BoxBottom" ikke går til bund. heri er en baggrundsgrafik, som laver runde hjørner.

Hvordan får jeg den til bund?
Avatar billede olebole Juniormester
22. november 2006 - 15:23 #8
<ole>

Det er ikke mere 'ren CSS', end ekesmplet med tabellen. CSS indeholder ikke ét eneste HTML-element. Det er tilgengæld meget almindeligt at rode begreberne sammen, fordi der er så mange tutorial-forfattere, der ikke ander det første om det, de skriver om  ;o)

CSS foreskriver, at når et element får sat sin højde i procent, skal browseren udregne denne på baggrund af det omkransende elements højde - som altså eksplicit skal være sat.
Det betyder, at alle elementer rundt om tabellen også skal have sat højder. Har du mon husket:

html, body {
    height: 100%;
    padding: 0;
    margin: 0;
}

- og så skal du huske indhold i dine td-elementer. Så _skal_ din tabel virke - uanset markup-standarden, du måtte skrive til  ;o)

/mvh
</bole>
Avatar billede madssch Nybegynder
22. november 2006 - 15:28 #9
>> olebole, tak fordi du igen forsøger at redde mig!  :)

Jeg forstår ikke hvilket af indlæggene du refererer til nu? Mit post d. 22/11-2006 14:46:25 indeholder da ikke HTML? Det er det eksempel, jeg føler er mest "korrekt", og vil derfor gerne gå ud fra det.

Magter bare ikke at flytte baggrunden i bunden af layeret...
Avatar billede olebole Juniormester
22. november 2006 - 15:39 #10
Din post (22/11-2006 14:46:25) indeholder stort set ikke andet end HTML. Kun de to udtryk, der står i style-attributterne er CSS - alt andet er ren HTML. CSS er HTML's 'beautybox' ... et sprog, der kan placere og 'udklæde' HTML-elementer  ;o)

Om du bør bruge et tabel-element eller en kombination af andre elementer, kommer anpå, hvad det præcist er, du skal lave - og hvordan  =)
Avatar billede madssch Nybegynder
22. november 2006 - 15:43 #11
Ja, okay, men hvordan skal CSS ellers laves, hvis ikke man opretter containere og navngiver dem?

Klart, at div m.v. er HTML-elementer, men hvad er alternativet?
Avatar billede olebole Juniormester
22. november 2006 - 15:49 #12
Om du bør bruge et tabel-element eller en kombination af andre elementer, kommer anpå, hvad det præcist er, du skal lave - og hvordan  =)
Avatar billede madssch Nybegynder
18. januar 2007 - 18:40 #13
Jeg er endt op med at lave det i tabeller, som først beskrevet. Så må tiden vise, hvad der sker!

Tak for hjælpen til jer begge.

Smid et svar, hvis I vil have del i points.  :)
Avatar billede olebole Juniormester
19. januar 2007 - 14:23 #14
- smidt herfra  ;o)
Avatar billede madssch Nybegynder
19. januar 2007 - 14:28 #15
Super. Afventer lige, om roenving er med...
Avatar billede roenving Novice
20. januar 2007 - 11:09 #16
Oki '-)
Avatar billede madssch Nybegynder
21. januar 2007 - 00:36 #17
Værsgo til jer begge.
Avatar billede roenving Novice
21. januar 2007 - 10:13 #18
-- og jeg takker for point ;~}
Avatar billede olebole Juniormester
22. januar 2007 - 14:16 #19
- og det gør jeg sandelig også  =)
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