Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod
Mike Purvis har opfundet en metode, hvorefter vi både
kan blæse og have mel i munden, når vi skal layout vore
websider. Med hans egne ord:
” Jeg ønskede at lave et design, der bliver
770 pixel bredt i et 800 pixel browservindue, men ikke
nødvendigvis skal være 1250 pixel bredt i et 1280 pixel bredt
browservindue.
“
Links til originale artikler i højre spalte under titlen Herkomst.
Lakmusprøven på et layout er naturligvis, om det kan tilpasses et givet webprojekts overordnede designkriterier. Lakmusprøven for et nyt layout er, om det kan tilføre et design nogle nye muligheder.
Mark Purvis' “Jello Mould” er en nyskabelse, der opfylder begge betingelser.
(“Jello” er en afskyelig og rasende populær nordamerikansk gelédessert, “Mould” betyder støbeform. Jeg benytter betegnelsen gelé-layout for denne layoutmodel – den er hverken elastisk eller fikseret, som det fremgår af denne artikel og artiklens eksempler.)
På denne webside viser jeg, hvorledes jeg har anvendt modellen på mit foretrukne layout: En ret bred venstrestillet artikelspalte, en smallere højrestillet spalte til menuer og diverse informationer samt et sidehoved og en sidefod.
Det er et elastisk layout, hvor elasticiteten ikke er direkte proportional med browservinduets bredde, men snarere med en procentdel af en øget bredde. Tillige demonstrerer jeg i Gelé-layout model 1a, hvorledes sidefoden skubbes ned af den spalte, der har det meste indhold.
Jo bedre monitor, nogle folk får, des sværere får vi ved at lave layouts, der på den ene side præsenterer sig fornuftigt på en 800 gange 600 pixel skærm, og på den anden side udnytter en fornuftigt del af skærmarealet på en 1280 gange 1024 pixel fladskærm.
Den oftest brugte løsning på dette dilemma er et elastisk
layout med brug af min-width og max-width
egenskaberne. Bruger vi en højre og/eller en venstre kolonne
med fast bredde, får vi en indholdsdel, hvis bredde varierer
med browservinduets størrelse.
Der er to hovedproblemer forbundet med dette, nemlig
max-width og
min-width og derfor ikke respekterer vores maksimums-
og minimumsbredder, og Der er nu fundet en metode til at lave et layout, der – også i Internet Explorer – aldrig kan blive hverken smallere eller bredere end hvad du har bestemt, og som yderligere gi'r dig mulighed for at kontrollerer elasticiteten, når browservinduet gøres bredere.
Denne side er layoutet efter denne model, så hvis du har en 1280 gange 1024 monitor kan du let konstatere, at siden ikke kan blive smallere end ca. 700 pixel, men at den godt kan gøres bredere uden at linielængden forøges alt for meget.
Mere præcist: Når browseren er 800 pixel bred er websiden ca. 740 pixel bred, Når browseren er 1280 pixel bred, er websiden ca. 980 pixel bred. Siden kan ikke blive bredere end dette, heller ikke på en større monitor.
Jeg vil i første omgang springe over, hvorledes layoutet er lavet for netop denne side – og i stedet forklare, hvorledes du laver et et tospaltet layout med venstrestillet menuspalte, centreret i browservinduet, med de netop beskrevne egenskaber.
Det er gelé-layout model 1. De konkrete dele af forklaringerne på layoutets opbygning står i eksemplet. Herunder gennemgår jeg hovedpunkterne, eller principperne, om du vil
Nøgle til at forstå, hvorledes vi kan sætte en minimumsbredde
uden at bruge min-width, er at gøre sig klart, at
negative marginer kan gøre et element større end dets
forældrelement.
Det smalleste et element kan være er 0 pixel. Hvis et sådant element har et indlejret element, hvis højre og venstre margin er -200 pixel, vil dette element være 400 pixel bredere end forældreelementet. Og nok så vigtigt: Den samlede bredde kan aldrig blive mindre end 0 pixel + 400 pixel = 400 pixel.
En minimodel af dette arrangement ser du herunder.
Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod
Den html-kode, der skaber figuren, er:
<div id="ydrediv">
<div id="fixer">
<div id="udvider">
<p>Lorem ipsum dolor sit amet, consectetuer
adipiscing elit, sed diam nonummy nibh
euismod </p>
</div>
</div>
</div>
Det tilhørende stylesheet er:
#ydrediv {padding:0 200px 0 200px}
#udvider {
position:relative; /* IE fix */
margin:0 -200px 0 -200px;}
#fixer {width:100%;} /* IE fix */
* html #ydre,
* html #udvider,
* html #fixer {height:0;}/* IE fix */
Vi skubber til kanten her, så der skal mere til end almindelige formregler:
#ydrediv { padding:0 200px 0 200px}
#udvider { margin:0 -200px 0 -200px;}position:relative;#ydre og #udviderMen dermed har vi altså skabt en stump kode, der sikrer
min-width, hvis den bliver anvendt på
body-markøren.
fixer-elementetI minimodellen herover introducerede vi et element #fixer,
der i første omgang er nødvendigt af henyn til Internet
Explorer. Vi satte bredden til 100%, hvilket i minimodellen har den
virkning, at indholdet (i elementet #udvider) altid vil
fylde browservinduet 100% i bredden.
I stylesheet'et til denne side er bredden af #sizer
(jeg bruger i det egentlige stylesheet for siden en anden id for
#fixer) imidlertid sat til 50%. Bredden af padding og de
negative marginer er hhv 350 pixel og -350 pixel, hvilket skaber en
minimumsbredde på siden på 700 pixel.
Du kan nu lave følgende regnestykke, hvis browservinduets bredde er større end 700 pixel:
Du kan nu lave følgende tabel for websidens bredde i forhold til forskellige bredder af browservinduet:
| Browser- vindue |
Mellemregning | Websidens bredde |
|---|---|---|
| 800px | (800 - 700) * 0,5 + 700 = 750px | 94% |
| 1024px | (1024 - 700) * 0,5 + 700 = 862px | 84% |
| 1280px | (1280 - 700) * 0,5 + 700 = 990px | 77% |
| 1600px | (1600 - 700) * 0,5 + 700 = 1150px | 72% |
| 2560px | (2560 - 700) * 0,5 + 700 = 1630px | 64% |
Hvis du har en skærm, der er større end 800 gange 600 pixel kan du let iagttage denne mageløse effekt ved at gøre browservinduet bredere eller smallere mens du læser den side. Den er nemlig designet efter de tal, der fremgår af 3. række (1280 pixel browservindue).
For at sætte ord på det: Websidens bredde som en procentdel af browservinduet er stor, når browservinduet er smalt, mens denne procentdel bliver mindre, des bredere browservinduet er.
Proportionaliteten bestemmer du ved at vælge end anden værdi
for #sizer-elementet.
Html-kildekoden til denne side:
<body>
<!-- #sizer ta'r en procentdel af hvad der er til
rest af body-elementet -->
<div id="sizer">
<!-- #expander bruger negative marginer for at skubbe
indholdets sider udad og tilbageerobre den bredde, der
er gået tabt til body padding -->
<div id="expander">
<!-- #page er sat til 100 procent bredde, således at
IE tolker en eventuel procentvis bredde af #indhold og
#rightcol korrekt -->
<div id="page" class="clearfix">
<div id="banner">
[ Sidehoved ]
</div>
<div id="indhold">
[ Artikel ]
</div><!-- slut #indhold -->
<div id="rightcol">
[ Menuspaltens indhold ]
</div>
<div id="navbar">
[ Navigationsbjælkens indhold ]
</div>
<div id="formbox">
[ Søgefeltet ]
</div>
<div id="footer">
[ Sidefod (Script) ]
</div>
</div><!-- slut #page -->
</div> <!-- slut #expander -->
</div> <!-- slut #sizer -->
</body>
Herunder ser du de dele af stylesheet'et for denne side, der er relevante i forhold til artiklens emne. Du kan downloade det stylesheet, der sklaber denne sides layout her: jellolayout.css.
<style type="text/css"
media="screen">
html, body { border: 0; margin: 0; padding: 0;}
body {
padding: 0 675px 1em 25px; }
#sizer {
margin: 0 auto 0 25px;
padding: 0;
width: 50%;
max-width: 290px; /* IE version er i betinget
kommentar under formblokken. */}
#expander {
background: #efefff;
margin: 0 -675px 0 -25px;
min-width: 700px; /* Kritisk Safari fix! */
position: relative;
}
/* Holly hack for IE \*/
* html #expander { height: 0; }
/* */
/* IE hack: 100 procent bredde får IE til at
tolke afkommets eventuelle bredder korrekt. */
#page { width: 100%;
background-color:#fefeff;
color:black;
border:1px solid #257;}
/* http://positioniseverything.net/easyclearing */
.clearfix:after {
content: ".";
display: block;
height: 0;
clear: both;
visibility: hidden;
}
.clearfix {display: inline-table;}
/* Hides from IE-mac \*/
* html .clearfix {height: 1%;}
.clearfix {display: block;}
/* End hide from IE-mac */
/* Slut easyclearing */
/* Øvrige formdeklarationer for websiden er
udeladt her */
</style>
<!-- max-width trick for IE -->
<!--[if IE]>
<style type="text/css">
#sizer {
width:expression(document.body.clientWidth > 1280 ?
--> "290px" : "50%" );
}
</style>
<![endif]-->
padding for
body-elementet og de negative marginer for
#expander-elementet.#page-elementet #page-elementet modsvares af originalernes
#wrapper-element, men modsvares også at det
#page-element, jeg normalt bruger til at omslutte alt
indhold på websiden.#page-elementet er referenceramme for alt
indhold, der skal formateres ved hjælp af float-egenskaben.
float'et menuspalte og
en højre-float'et artikelspalte.clear'ing#page-elementet skal clear'es, når vi inde
i dette element vil have float'ede elementer. clear'ing
er i praksis en videnskab helt for sig. Det er lidt besværlig at
clear'e med et indholdsløst html-element, fordi sådanne
elementers højde er forskellig fra browser til browser.max-width formregler, så
indsættes efter vort egentlige stylesheet et nyt stylesheet i
en betinget kommentar. Dette stylesheet, der kun læses af IE, indeholder
en CSS-“expression” (La' vær og spørg(!)), der angiveligt
og i praksis sørger for at aflæse bredden af browservinduet og
sammenligne denne bredde med vores maksimum bredde. Er browservinduet
bredere med 1280 pixel, sættes #sizer's
width-egenskab til 290 pixel (hvortil skal lægges de
700 pixels "faste" bredde); er bredden mindre end 1280 pixel, sættes
#sizer-bredden til 50 procent af det, der er tilovers
efter vi har brugt de 700 pixel.Med baggrund i nogle artikler på positioniseverything.net har jeg her præsenteret nogle principper for en ny måde at layoute websider på.
Metodens hensigt er først og fremmest at give websidekonstruktøren en bedre kontrol over, hvorledes hendes websider øges/mindskes i bredde, hvis browservinduet øges/mindskes i bredde.
Slutresultatet af den lidt indviklede øvelse er i realiteten at
give dig ét browserelement, her kaldet #page,
hvori du kan udfolde dit sædvanlige layout eller eksperimentere med
andre former.
Som illustration af mulighederne har jeg lavet et par eksempler:
Eksempel 1: Fuldt elastisk layout med venstrestillet menuspalte. Rigeligt kommenteret.
Eksempel 2: Fuldt elastisk layout med venstrestillet menuspalte. Kort kommenteret – det er helt mage til foregående på nær to formdeklarationer.
Eksempel 3: 3-spaltet layout med lige høje kolonner, fikseret bredde på venstre og højre kolonne.
Siden jeg uploadede denne artikel for nogle dage siden har et par læsere skrevet til mig og gjort opmærksom på nogle problemer med visningen af de ovennævnte eksempler. Jeg beskriver disse forhold i et indledende afsnit til eksempel 3. (Jørgen Farum Jensen, 21. jan. 2006.)
Denne side er senest opdateret: July 31, 2006
Som alt det andet, jeg skriver om på dette websted, er også idégrundlaget for denne artiklen skabt af andre.
Konceptet, der ligger bag denne artikel, er skabt af Mike Purvis.
Jeg blev bekendt med idéen via en artikel på webstedet positionsiseverything, der dels forklarer sagerne, dels anstiller nogle forsøg med forskellige layouts efter denne metode, og sidst, men ikke mindst, giver os mulighed for at bruge et online værktøj, som Mike har lavet, og som gør det muligt for os at indtaste de maksimum og minimumsmål, vores side skal overholde, og hvilken grad af proportionalitet vi ønsker når browservinduet udvides: Jello Layout Tool.