På den här sidan beskrivs steg för steg hur man kan skapa en enkel layout med CSS / Stilmallar.
Layouten är kodad enligt HTML 4.01 Strict där utseendet och placeringen av sidans olika delar styrs av en CSS i en extern stilmall. Sidan innehåller: Sidhuvud, Sidfot och två kolumner.
Layouten bygger på koder som är korrekta enligt standard - inga märkvärdigheter - den kommer att fungera på samma sätt i flertalet någorlunda moderna webläsare.
Både sidan och stilmallen validerar - men observera att den är bara testad i:
Internet Explorer, Mozilla Firefox, Opera och Netscape för PC.
När man skapar en layout med CSS använder man så kallade boxar som placeras bredvid och inuti varandra för att dela upp sidan i sektioner. Man bör ju försöka konstruera sin sida med så minimal och ren kod som möjligt och här förekommer kanske lite fler boxar än vad som egentligen är absolut nödvändigt.
Men layouten är byggd för att man enkelt ska kunna göra egna förändringar utan att hela strukturen brakar ihop. Dessutom är den konstruerad utan "hack" och för att kunna fungera på samma sätt i flertalet webläsare.
Den här layouten kommer att bli elastisk - vilket innebär att bredden kommer att anpassa sig efter textens storlek. Måtten på de olika delarna anges med em och procent.
Sidans innehåll och struktur skrivs in i själva html-filen. Till att börja med måste den innehålla stommen för en html-sida som kodas enligt HTML 4.01 Strict.
Skapa HTML-dokumentet i en vanlig text-editor som t.ex. Anteckningar. Dokumentet kan döpas till vad som helst - men ska ha fil-ändelsen: html. Till exempel: layout.html. I sidans huvud länkas också till stilmallen som i det här exemplet heter: stilmall.css.
Här är grunden för HTML-dokumentet:
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "
http://www.w3.org/TR/html4/strict.dtd">
|
Stilmallen skapas också i en vanlig text-editor som t.ex. Anteckningar. Än så länge är det bara ett tomt dokument - som alltså ska döpas till: stilmall.css och placeras i samma mapp som själva sidan. I stilmallen skriver man sedan in de egenskaper som styr sidans utformning.
Den här sidan ska innehålla fyra huvuddelar:
Sidans olika delar skapas genom att man infogar boxar med taggen <div> och dess slut-tagg </div>.
Alla boxar får ett eget unikt id och de skrivs in mellan <body> och </body>.
Alltihopa omsluts av en box / container som kommer att innehålla hela sidan: layout.
De fem boxarna skrivs in så här i HTML-koden:
|
<body> |
På sidan ser det - än så länge - ut så här:
I stilmallen - dokumentet: stilmall.css - anges nu egenskaperna som kommer att styra sidans utseende.
Till att börja med bestäms de olika sektionernas bredd och placering. Placeringen av boxarna görs med "float".
Så här skrivs det in i dokumentet stilmall.css:
| CSS |
|---|
#layout {
border: 1px solid #000; }
#sidhuvud {
width: 100%;
border-bottom: 1px solid #000;
float: left; }
#main { width: 68%; float: left; }
#side { width: 32%; float: right; }
#sidfot {
width: 100%;
border-top: 1px solid #000;
clear: both; }
|
| Förklaring: |
|
#layout
#sidhuvud
#main
#side
#sidfot
|
På sidan skulle det bli ungefär så här:
För att sidan ska gå smidigare att stajla ska de tidigare boxarna innehålla ytterligare varsin box. Kolumnerna och sidfoten ska också omslutas av en extra box: kolumncontainer.
Så här ser det ut på sidan:
| HTML |
|---|
|
<body> |
För de nya inre boxarna anges egenskaperna för padding och kantlinjer. Detta är för att måtten på boxarna ska stämma. Padding och kantlinjer lägger sig ju som bekant utanför själva boxens bredd.
Mellan /* och */ skrivs en kommentar (parentes) in i stilmallen. Det kan vara användbart för att hålla reda på mallens olika delar.
Så här ser det ut i stilmallen:
| CSS |
|---|
/* layout */ #layout { border: 1px solid #000; } /* sidhuvud */ #sidhuvud { width: 100%; border-bottom: 1px solid #000; float: left; } #shleft { float: left; } #shleftcontent { padding: 5px; } /* kolumncontainer */ #kolumncontainer { width: 100%; clear: both; } /* kolumn: main */ #main { width: 68%; float: left; } #maincontent { padding: 5px; border: 1px solid blue; } /* blå kant för syns skull */ /* kolumn: side */ #side { width: 32%; float: right; } #sidecontent { padding: 5px; border: 1px solid green; } /* grön kant för syns skull */ /* sidfot */ #sidfot { width: 100%; border-top: 1px solid #000; clear: both; } #sidfotcontent { padding: 5px; } |
| Förklaring: |
|
#shleft
#shleftcontent
#kolumncontainer
#maincontent
#sidecontent
#sidfotcontent
|
På sidan ser det nu ut ungefär så här:
I den här layouten placeras Kolumn: main åt vänster och Kolumn: side åt höger. Men det går precis lika bra att göra tvärtom. Byt bara float i stilmallen!
Så här:
|
#main { width: 68%; float: right; } |
Då ser det ut så här i stället:
Okej! Dags att peta in mer innehåll i boxarna och stajla sidans grundutseende!
Huvudrubriken i sidhuvudet blir lite trevligare: MIN HEMSIDA
.
Kolumnerna får lite textinnehåll och i sidfoten kan man ju t.ex. skriva in en copyright-notering...
Genom att stoppa in några kommentarer även i HTML-koden blir det lättare att hålla reda på var de olika boxarna börjar och slutar!
Så här kan det då se ut:
| HTML |
|---|
|
<body> |
Genom att välja body som selector i stilmallen kan man ange en del egenskaper som blir gällande för hela sidan om man inte anger något annat.
Sidans layout ska också få en bredd som är anpassad till teckensnittets storlek med enheten em. Det gör att innehållet på sidan blir elastiskt.
Så här ser det ut i stilmallen:
| CSS |
|---|
body {
padding: 0; margin: 0;
background-color: #ccc; color: #000;
font: 76% Arial, Helvetica, sans-serif; }
/* layout */
#layout {
width: 63em;
border: 1px solid #000; }
|
| Förklaring: |
|
body
#layout
|
Här kan du testa hur det ser ut - sidan öppnas i ett nytt fönster!
Ojsan, det blev ju väldigt grått det där! Boxarna är transparenta som standard - så bakgrundsfärger i några av boxarna och en bakgrundsbild i sidhuvudet vore kanske inte helt fel?
Så här:
| CSS |
|---|
#sidhuvud { width: 100%; background-color: #fff; color: inherit; background-image: url(sidhuvud1.gif); border-bottom: 1px solid #000; float: left; } #kolumncontainer { width: 100%; background-color: #fff; color: inherit; clear: both; } #sidfot { width: 100%; background-color: #eee; color: inherit; border-top: 1px solid #000; clear: both; } |
| Förklaring: |
|
#sidhuvud
#kolumncontainer
#sidfot
|
Här kan du testa hur det ser ut - sidan öppnas i ett nytt fönster!
Sidans rubriker och text behöver också stajlas.
Eftersom "storleken" på de marginaler som omsluter stycken och rubriker kan variera något i olika webläsare kan det vara bra att själv bestämma hur de ska se ut - så blir det likadant oavsett webläsare.
Rubrikerna ska också få ett annat teckensnitt än brödtexten och teckenstorleken ska bestämmas.
Huvudrubriken överst på sidan är skriven med h1 - en sådan rubrik bara bör förekomma en gång på varje sida. Här tas marginalen bort för huvudrubriker skrivna i sidhuvudet - för att den ska hamna mitt i sidfoten vertikalt.
Brödtexten fixas till så att den blir lite luftigare genom att utöka radavståndet och texten i sidfoten får ett alldeles eget utseende.
Så här:
| CSS |
|---|
h1, h2, h3, h4, h5 { font-family: "Times New Roman", Times, serif; letter-spacing: 1px; margin-top: 25px; margin-bottom: 2px; } h1 { font-size: 2.5em; } h2 { font-size: 1.5em; } h3 { font-size: 1.33em; } h4 { font-size: 1.16em; } h5 { font-size: 1em; } p { margin: 0 0 15px 0; font-size: 1em; line-height: 140%; } #shleftcontent h1 { margin: 0; } #sidfotcontent { padding: 5px; text-align: center; } #sidfotcontent p { margin: 0; font-size: x-small; } |
| Förklaring: |
|
h1, h2, h3, h4, h5
p
#shleftcontent h1
#sidfotcontent
|
Här kan du testa hur det ser ut - sidan öppnas i ett nytt fönster!
När man skapar en layout där huvud-innehållet (som här) delas upp i kolumner är det vanligt att man vill skilja kolumnerna åt visuellt - kanske med en linje eller genom att ge dem olika färger.
Förr - när man använde tabeller för layout - innebar det inga som helst problem! Men boxar fungerar inte riktigt på samma sätt som tabeller...
När man placerar två boxar bredvid varandra kommer inte boxarnas höjd att automatiskt anpassa sig efter varandra som tabell-celler gör - vilket illustreras av de blå och gröna kantlinjerna i exemplen. Det enda sättet att få det att fungera likadant är att ta till metoder för att få det att se ut som om de gjorde det...
Vilken metod man använder är en smaksak - men har också med sidans utformning att göra.
Nedan följer förslag på hur man kan gå till väga beroende på hur sidan är uppbyggd.
Det vanligaste är ju att själva huvud-innehållet på sidan har mest innehåll. Alltså kommer DEN kolumnen i de flesta fall att ta upp mest plats på höjden!
Om det är förutsättningen för sidans layout - är det inte alls komplicerat att skapa intrycket av att side-kolumnen är lika hög som kolumnen med huvud-innehållet.
Med andra ord: Om man vet vilken kolumn som tar upp mest plats på höjden ger man den en kantlinje och saken är biff!
Så här skulle det bli i stilmallen:
| CSS |
|---|
#maincontent {
padding: 5px;
border-right: 1px solid #000; }
|
| Förklaring: |
|
#maincontent
|
Här kan du testa hur det ser ut - sidan öppnas i ett nytt fönster!
Om man dessutom vill att kolumnerna ska ha speciella bakgrudsfärger anger man dem i huvud-kolumnen (om den tar upp störst plats) och i containern som omsluter de båda kolumnerna - för att ge intrycket av att de båda är lika höga.
Så här:
| CSS |
|---|
#kolumncontainer { width: 100%; background-color: #eee; color: inherit; clear: both; } #maincontent { padding: 5px; background-color: #fff; color: inherit; border-right: 1px solid #000; } |
| Förklaring: |
|
#kolumncontainer
#maincontent
|
Här kan du testa hur det ser ut - sidan öppnas i ett nytt fönster!
En bakgrundsbild är bra att ta till om man inte riktigt vet vilken av kolumnerna som kommer att ta upp störst plats på höjden.
Om man har en layout med fast bredd kan man skilja kolumnerna åt med en bakgrundsbild som har samma bredd som layouten. Den infogas då i boxen som omsluter de båda kolumnerna. Här: #kolumncontainer.
Med den här metoden fungerar det bäst utan bakgrundsfärg i kolumnerna med innehåll. Hur själva bakgrundsbilden ser ut är upp till var och en - här finns ju alla möjligheter.
Så här:
| CSS |
|---|
#layout {
width: 776px;
border: 1px solid #000; }
#kolumncontainer {
width: 100%;
background-color: #fff; color: inherit;
background-image: url(layout1.gif);
clear: both; }
|
| Förklaring: |
|
#layout
#kolumncontainer
|
Här kan du testa hur det ser ut - sidan öppnas i ett nytt fönster!
Om man har en layout med elastisk bredd och inte riktigt vet vilken av kolumnerna som tar störst plats fungerar det inte så bra att göra som ovan.
När teckestorleken på sidan utökas skulle layouten förändras och kolumnerna skulle bli bredare än delarna i bakgrundsbilden.
Då kan man i stället infoga en bakgrundsbild som fungerar som avdelare och ange exakt var man vill att den ska placeras med enheten procent.
Precis som ovan infogas den i boxen som omsluter de båda kolumnerna.
Här: #kolumncontainer.
Så här:
| CSS |
|---|
#layout {
width: 63em;
border: 1px solid #000; }
#kolumncontainer {
width: 100%;
background-color: #fff; color: inherit;
background-image: url(avdelare1.gif);
background-position: 68% 0;
background-repeat: repeat-y;
clear: both; }
|
| Förklaring: |
|
#layout
#kolumncontainer
|
Här kan du testa hur det ser ut - sidan öppnas i ett nytt fönster!
OBS!
Den här metoden används fortsättningsvis - eftersom exempel-layouten är elastisk.
Om man vill ha layouten centrerad eller inte är en smaksak - men så här gör man i alla fall! 
För att det ska fungera på samma sätt även i äldre webläsare kombineras här några metoder.
Så här:
| CSS |
|---|
body {
padding: 0; margin: 0;
text-align: center;
background-color: #ccc; color: #000;
font: 76% Arial, Helvetica, sans-serif; }
#layout {
width: 63em;
margin: 0 auto;
text-align: left;
border: 1px solid #000; }
|
| Förklaring: |
|
body
#layout
|
Här kan du testa hur det ser ut - sidan öppnas i ett nytt fönster!
Klart!
| HTML |
|---|
|
<body> |
| CSS |
body {
padding: 0;
margin: 0;
text-align: center;
background-color: #ccc; color: #000;
font: 76% Arial, Helvetica, sans-serif; }
h1, h2, h3, h4, h5
{ font-family: "Times New Roman", Times, serif;
letter-spacing: 1px;
margin-top: 25px;
margin-bottom: 2px; }
h1 { font-size: 2.5em; }
h2 { font-size: 1.5em; }
h3 { font-size: 1.33em; }
h4 { font-size: 1.16em; }
h5 { font-size: 1em; }
p { margin: 0 0 15px 0;
font-size: 1em;
line-height: 140%; }
/* layout */
#layout {
width: 63em;
margin: 0 auto;
text-align: left;
border: 1px solid #000; }
/* sidhuvud */
#sidhuvud {
width: 100%;
background-color: #fff; color: inherit;
background-image: url(sidhuvud1.gif);
border-bottom: 1px solid #000;
float: left; }
#shleft { float: left; }
#shleftcontent { padding: 5px; }
#shleftcontent h1 { margin: 0; }
/* kolumncontainer */
#kolumncontainer { width: 100%;
background-color: #fff; color: inherit;
background-image: url(avdelare1.gif);
background-position: 68% 0;
background-repeat: repeat-y;
clear: both; }
/* kolumn: main */
#main { width: 68%; float: left; }
#maincontent { padding: 5px; }
/* kolumn: side */
#side { width: 32%; float: right; }
#sidecontent { padding: 5px; }
/* sidfot */
#sidfot {
width: 100%;
background-color:#eee; color: inherit;
border-top: 1px solid #000;
clear: both; }
#sidfotcontent {
padding: 5px;
text-align: center; }
#sidfotcontent p {
margin: 0;
font-size: x-small; }
|
Den här layouten gör alltså inte anspråk på att vara speciellt snygg! Den är tänkt som en mall som inte är alltför komplicerad att jobba vidare med.
Layouten är alltså elastisk men paddingen i boxarna är här angiven till 5 pixlar - vilket kanske inte är optimalt alla gånger. Men det går utmärkt att ändra. Om man vill kan man ange paddingen med enheten em. Då kommer även paddingen att anpassa sig efter textens storlek.
I boxarna finns inte heller någon höjd (height) angiven. Det är inte nödvändigt i en sån här enkel layout. Om man ändå vill precisera höjden är det bäst att använda enheten em. Annars ska man hålla i minnet att innehållet kan komma att flyta utanför boxarna när texten förstoras manuellt!
Här kan du hämta en zipfil med Grund-layout 1 och Stilmallen:
Grundlayout 1.
Är du intresserad av att snygga till designen lite? Kolla in nästa sida!