Avatar billede zacariaz Nybegynder
19. maj 2011 - 00:31 Der er 4 kommentarer og
1 løsning

CSS auto height problem

Hej igen.

Den sidste tid har jeg siddet og lejet lidt med med html5 og til dels med css3, vil er nyt territorium for mig.

Jeg har lavet en grundliggende block layout, som er så godt som perfekt, set med mine øjne, men der er én lille ting der irriterer mig.

Hvis man kigger på det eksempel jeg har lagt op:
http://myhideout.eu/new/
vil man ligge mærke til at "sidebaren" ikke automatisk matcher højden af siden, og således ikke lukker hullet ned til footeren, hvilket jeg synes er mægtig irriterende.

Jeg tænker sikkert er en løsning på problemet, men lad det være sagt med det samme. Løsningen kan ikke involvere javascript. Jeg kunne tale timer om hvorfor jeg er så stor modstander af javascript, ikke mindst front end, men det vil jeg vente med til en anden gang.

Server side scripting er absolut en mulighed, men jeg kan ikke se hvordan det skulle gå for sig.

Alternativt kunne jeg godt tænke mig at have flere "sidebar" bokse, som automatisk positionerer sik ligesom article boksene gør det. Dette har indtil videre været et problem jeg ikke har været i stand til at løse.

De af jer der ved nok om emnet til at give relevante svar, kan nok se hvilke komplikationer der kan opstå når boks størrelserne har varierende størrelser.

Grupperingen af de to "spalter" i dokumentet skulle jo også gerne give mening.


Nå, men det er jo alt sammen mægtig kompliceret, og jeg har, som sædvanligt, sikkert ikke forklaret mig godt nok, men jeg håber da at få nogle konstruktive svar alligevel.

Skulle man have lyst til at kommentarer på andre områder, involverende omtalte dokument, vil jeg også meget gerne høre dem. Jeg har blandt andet haft lidt svært ved at regne ud hvordan man helt korrekt bruger disse nymodens html5 elementer. ;)


Men indtil da...


På forhånd tak.

PS.
Jeg er klar over muligheden for at pakke de to spalter in i en "wrapper" for at løse problemet med auto height på sidebaren, men det er ikke den foretrukne løsning.
19. maj 2011 - 10:10 #1
Strukturen er at du bruger <body> som container for det hele.  Indenfor body har du <header>, noget andet, og <footer>

Indenfor 'noget andet' har du saa tre blokke, en <aside> med float=right og to <articles>.  Problemet er saa at <aside> blokken ikke automatisk justerer sin hoejde til summen af <articles>.

Jeg ville foreslaa at du laver en container for 'noget andet' saasom <middle> som du saa giver width 782 ligesom header og footer.  Og saa lave en container <leftside> som sammen med <aside> placeres indeni <middle>.  Dine artikler placerer du saa i <leftside>

Noget i denne retning:

<body>
  <header>header</header>
  <middle>
    <leftside>
      <article>article1</article>
      <article>article2</article>
    <leftside>
    <aside>right</aside>
  </middle>
  <footer>footer</footer>
</body>
Avatar billede zacariaz Nybegynder
20. maj 2011 - 00:42 #2
Vil lige nævne at jeg nu har prøvet din fremgangsmåde, men det er ikke lykkedes mig at få det til at fungere. Så vidt jeg har forstået kan det ikke fungere med mindre at <middle> har en absolut højde, og det er jo ikke meningen.

Jeg blev faktisk lidt overrasket over det, for jeg have også den løsning i baghovedet før jeg startede denne tråd, og havde regnet med at de ville virke.

Jeg tænker stadig at der må være en eller anden smart css3 feature jeg ikke kender til, for det er jo ikke en ny problemstilling.


Men tak for forsøget.
Avatar billede zacariaz Nybegynder
20. maj 2011 - 02:09 #3
Her er en løsning der virker med absolut position og en enkelt wrapper:

<!DOCTYPE html>
<html>
  <head>
    <style type="text/css">
      body {
        margin: 0 auto;
        width: 800px;
      }
      #wrapper {
        position: relative;
        width: 800px;       
      }
      body > header, body > footer {
        background-color: red;
        width: 800px;
      }
      #wrapper > article {
        margin-right: 200px;
        width: 600px;
        background-color: blue;
      }
      #wrapper > aside {
        position: absolute;
        top: 0;
        bottom: 0;
        right: 0;
        width: 200px;
        background-color: green;
      }
    </style>
  </head>
  <body>
    <header>This is a header</header>
    <div id="wrapper">
      <article>
        This is the content<br /><br /><br /><br />left<br /><br /><br /><br />left
      </article>
      <aside>
        And this is the sidebar! I dynamically make myself bigger based on the content on the left!
      </aside>
    </div>
    <footer>This is a footer</footer>
  </body>
</html>

Hvis man kender højden på header og footer, eller kan leve uden, kan man droppe div wrapperen og bruge body i stedet.
20. maj 2011 - 06:48 #4
Jamen hvis du har en loesning, saa til lykke, og beklager jeg ikke kunne hjaelpe.  Lukker du spoergsmaalet (ved selv at oprette et svar?)
Avatar billede zacariaz Nybegynder
20. maj 2011 - 11:55 #5
Det var jo ikke lige den løsning jeg håbede på. Det er også muligt at bruge display:table-cell, men det giver problemer med mere end et article element.

Anyway, du gjorde jo et forsøg, selvom det ikke virkede, og jeg har altså flere point end jeg kan bruge.
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

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