40
Handledning Vi skapar en webbsida! - med CSS En enkel genomgång hur du kan skapa en enkel webbsidesdesign med hjälp av html och grundläggande css

Vi skapar en webbsida

Embed Size (px)

DESCRIPTION

En enkel genomgång hur du kan skapa en enkel webbsidesdesign med hjälp av html och grundläggande css. Går igenom från grunden, utgår från att du skriver koden själv. Kräver minimal, men viss förkunskap.

Citation preview

Page 1: Vi skapar en webbsida

Handledning

Vi skapar en webbsida!

- med CSS

En enkel genomgång hur du kan skapa en enkel webbsidesdesign med hjälp av html och grundläggande css

Page 2: Vi skapar en webbsida

Vi skapar en webbsida

2

Grundläggande genomgång av hur du skulle kunna bygga en enkel webbsidesdesign med hjälp av html och grund-läggande css. Främst för webbläsare som följer W3C:s rekommendationer, det vill säga följer webbstandarden.

Jonas Lidström, Isegrim

Page 3: Vi skapar en webbsida

Vi skapar en webbsida

3

Vi skapar en webbsida!

- med CSS

Målsättning

i ska i den här handledningen lära oss att steg för steg skapa en enkel webbsida. Vi

kommer att utnyttja teknikens fördelar och begränsningar. Det du lär dig här utgör

grunden för mer avancerad webbsidesdesign, men vi kommer inte att titta på några

speciallösningar. Sidan som du skapar med den här handledningen kan du sen utveckla på

egen hand, eller med efterföljande handledningar och övningar.

Förberedelse

Skapa ett nytt html-dokument för den här genomgången, vi kan kalla det för min-

css-sida.html. Vi kommer även att definiera egenskaper med css. Du väljer själv om du

jobbar med en extern css-mall eller med intern-css uppe i head-sektionen av html-doku-

mentet. I exemplen kommer jag utgå från att du jobbar med en extern css-mall, skillnaden

mellan extern och intern är inte så stor, så du kan lätta följa med i resonemangen ändå. Vill

du jobba med en extern mall, döp den då till min-css-sida.css och spara den i samma mapp

som min-css-sida.html.

V

Page 4: Vi skapar en webbsida

Vi skapar en webbsida

4

Det finns många wysiwyg-editorer som skapar webbsidor utan att du behöver se hur sidan

skrivs (där du inte behöver se hur html eller css skrivs). Jag rekommenderar ändå att du

bekantar dig med hur sidor skapas under ytan, det ger dig större kontroll över innehåll och

utseende, det ger dig även djupare förståelse för vad som händer.

Väljer du att jobba med en texteditor, kom ihåg att websidorna skall sparas med filändelsen

[.htm] eller [.html] och stilmallarna sparas som [.css]. Glömmer du det, kommer webbläs-

aren öppna filen som en textfil.

Handledningen är uppdelad i tre steg.

Steg 1 – HTML - Vi skapar en grundläggande sida

Vi lägger upp en grundsida i html och talar lite om struktur.

Steg 2 – CSS - Vi formaterar dess utseende med css

Vi kopplar en css-mall till grundsidan och formaterar sidans utseende.

Vi tittar på ett sätt att låta sidan alltid vara centrerad i webbläsar-

fönstret. Vi talar lite om hur css skrivs och kopplas till ett html-

dokument.

Steg 3 – MENY - Vi skapar en navigationsmeny

Vi formaterar en lista med länkar, skapar nytt utseende samt position-

erar länkar både vertikalt och horisontellt. Vi tittar lite närmare på

länkar och vi tar upp sidstrukturer igen.

Page 5: Vi skapar en webbsida

Vi skapar en webbsida

5

Bakgrund

När du skapar webbsidor med html styr webb-läsarens inställningar hur sidan visas. Stil och storlek på bokstäver, visas utifrån de ins-tällningar besökaren valt eller de standard-inställningar den aktuella webbläsaren har. Med attribut som skrivs in i html-taggen, kan man förändra webbsidans utseende. Men vill man senare ändra sidans utseende, måste man gå in på alla ställen där man skrivit in attribut, särskilt besvärligt är detta om man vill uppdatera flera webbsidors utseende.

Vad vill vi uppnå

Tanken nu är att vi skall använda oss av en metod där vi skriver webbsidans utseende med css. Det hjälper oss att separera sidinnehåll och utseende. På så vi kan man lättare ändra på sidans utseende, utan att behöva leta reda på alla html-attribut. Det ger oss även nya möjlig-heter, att placera, förändra, färglägga webb-sidans olika delar. Skriver vi vår css i en separat fil, kan den även länkas till flera webbsidor.

CSS?

Vad kan man göra med CSS-kod? Styra utseendet på ett element, alla element av en viss typ eller

hela webbsidor. Man kan bestämma placeringen av element och kontrollera elementens i lager

egenskaper. Man kan dölja och visa element och ändra på elementens beteende.

Behöver man lära sig CSS utantill? Nej egentligen inte, men det är bra att lära sig grundprinciperna

och några ofta förekommande attribut, samt hur boxmodellen fungerar.

Vilka ofta förekommande attribut bör man lära sig? Kan givetvis variera, men de grupper jag

rekommenderar är de kopplade till boxmodellen (höjd, vidd, positionering, marginaler och kant), de

kopplade till text (bokstavsstilar, färg, formatering av text), de kopplad till bakgrunder.

Syftet med CSS Om vi delar på innehållet och utseende, kan vi lättare anpassa samma innehåll för

olika plattformar, ska det anpassas för att visas på en skärm, en handdator, en mobiltelefon, via din

spelkonsol eller skrivas ut på papper. För olika situationer behöver man anpassa sidans utseende på

lite olika sätt och om vi ska göra det inne i html-koden, måste vi skapa ett html dokument för varje

anpassning. Tänk då att vi har en hel webbplats, med flera interna sidor. Med hjälp av CSS-mallar kan

vi istället skapa flera utseenden/anpassningar som formar innehållet istället för att skapa flera sidor

med samma innehåll.

Page 6: Vi skapar en webbsida

Vi skapar en webbsida

6

CSS är en förkortning som står för Cascading Style Sheets, vilket vi skulle kunna översätta till skurar

av stil eller stil som stänker. Förvisso en haltande översättning, men metaforen är inte så dum. För

css är tänkt att användas som just ett dokument, var ur utseendet (stilen) flödar från malldoku-

mentet in till webbsidorna och formar webbinnehållet.

Hur du strukturerar din websida? Du bör alltid märka upp ditt innehåll korrekt, är det en lista

använder du dig av list element (<ol>,<ul>,<dl>), rubriker märks upp med rubrik-taggar (<h1>, <h2>,

<h3> … ), textstycken märks upp med paragraftaggen (<p>) osv. Undvik att använda dig av ”fel sorts

html-tagg” även om slutresultatet blir detsamma. Ibland uppnår du inte önskat utseende, när du

märkt upp sidan på ”rätt sätt”, men det kan du lätt ändra med css.

Utöver uppmärkning av innehåll, kan du även gruppera ditt innehåll med grupperings-elementen

<div> och <span> och på så vis ytterligare dela upp, sortera och placera ditt innehåll. Men se till att

inte överanvända dig av dem, de behövs inte till allt, uppmärkningen i övrigt är ofta tillräcklig.

Se det som en möjlighet att skapa större strukturer, som håller samman innehållet på webbsidan.

Efter uppmärkning är nu allt innehåll antingen på block-nivå (block) eller text-nivå (inline)

Blocknivå-element, bildar egna enheter, ofta med en radbrytning före och efter elementet. Textnivå-

element, lägger sig på rad efter varandra, på samma nivå och utan radbrytningar. Även om du kan

ändra detta beteende, är den generella uppmaningen att man inte bör göra så. Många gånger kan

man lösa det på andra sätt, ibland kan detta däremot vara att föredra.

Om boxar, namngivning och sånt. Allt innehåll på en webbsida, varje element (uppmärkt innehåll

och all text) upptar en viss yta. Innehållet, de olika elementen, kan du nu se som rutor, eller boxar

med innehåll som du kan bestämma utseendet och placeringen av. Det man ofta benämner som

elementets box och det är detta som syftas till när man talar om boxmodellen. Boxar är alltså den yta

som ett element du infogat på din webbsida upptar. Exempel på element: rubriker <h1>, indelningar

<div>, paragrafer <p>, betoningar <em>, länkar <a> osv, även webbsidan i sig <body>.

Har man märkt upp innehållet på sin sida (med html-taggar, id-namn, klasser) kan man kontrollera

hur den ytan ser ut och placeras på webbsidan. Det här är något som oftast sker automatiskt i

bakgrunden, men med css tar du kommandot över hur det visas.

Boxar kan tilldelas fler egenskaper, som till exempel höjd och bredd, bakgrundsfärg eller bakgrunds-

bild, kantlinje, dess bredd, stil och färg, marginal runt boxen och mellanrum mellan boxens kant och

dess innehåll.

Boxmodellen är en av CSS grundstenar. Lär man sig hur den fungerar har man kommit en bra bit på

väg att förstå hur mycket av all CSS fungerar, och varför elementen beter sig som de gör på sidan.

Men framför allt hur du själv kan ändra dess beteende.

CSS förekommer även som ett html-attribut och heter style!

Page 7: Vi skapar en webbsida

Vi skapar en webbsida

7

Vi skapar en webbsida. Steg för steg

HTML

Innan du sätter igång med denna handledning läser du texten om grundläggande html: [html grund] eller samma

information hos World Wide Web Consortium (W3C) http://www.w3.org/TR/html401/struct/global.html .

1. Inledningsvis startar vi med ett tomt html-dokument

I handledningen, kommer bara aktuella förändringar skrivas ut (i några fall, anges även om-

givande element i svagare färg). Du placerar förändringarna flera mellan <body>-taggarna,

den del av html-dokumentet som visas i webbläsaren eller i css-mallen.

Vi kommer att jobba med en extern css-mall, där alla css-deklarationer skrivs in, vi kommer

att växelvis ändra i de båda dokumenten. Det är bra om du ofta sparar och förhandsgranskar,

gärna i olika webbläsare för bästa resultat, under arbetets gång. Det är inte alltid som

webbsidan ser lika ut i olika webbläsare och på olika plattformar, allt beroende på webb-

läsaren och på användarens personliga inställningar.

Radbrytningar i html-kod är främst till för att få god översikt, det spelar ingen roll om man

skriver html-taggarna på rad efter varandra. Webbläsaren tolkar innehåll och uppmärkning

korrekt ändå, under förutsättning att man skrivit in den rätt.

Du kan även ha för vana att lägga in anteckningar i ditt html-dokument och din css-mall, där

du berättar vad de olika elementen är och var de börjar och slutar. Öppna en html-mall, eller

skapa en ny sida från grunden, jobba med html-dokumentet i valfri editor.

Glöm inte att ge sidan en lämplig titel <title>.

Din sida bör se ut något liknande detta:

1. <!DOCTYPE … >

2. <html … >

3. <head>

4. <title>Din sidtitel </title>

5. </head>

6. <body>

7. <!-- Sidans innehåll här -->

8. </body>

9. </html>

Som du ser, har jag inte skrivit ut all information i exemplet ovan, - läs den grundläggande texten [html grund] för att skriva in vad som saknas..

html

&xhtml

Det finns flera versioner av upp-märkningsspråket html och det pågår en ständig utveckling av det. Det finns dessut-om en striktare variant av html, som är en kombi-nation av html och xml – xhtml.

” Ett kännetecken för XHTML är att strukturens utse-ende styrs av pre-sentationen; man använder således alltid css till pre-sentationen och html till att bygga strukturen. För att därutöver få en websajt att kunna impleenteras crossbrowser vali-derar vi den ut-ifrån rätt doctype för att få den att följa en webb-standard.”

Ett html-doku-ment ska deklar-eras som ett text/html , medan ett xhtml doku-ment skall deklar-eras som antin-gen applica-tion/xml eller application/xhtml+xml.

Läs mer: HTML-grund

Page 8: Vi skapar en webbsida

Vi skapar en webbsida

8

2. Innehåll

Vi behöver bestämma oss för vad som skall finnas med på vår sida och hur vi tänkt oss

fördela innehållet över sidytan. Jag kommer att utgå från en enkel sidlayout, som är lätt att

variera. Längst upp på sidan sätter vi en titel, man kan tänkas byta ut den mot en bild i ett

senare skede. Längst ner på sidan placeras kontaktinformation i ett eget fält, som en sidfot.

Där mellan gör vi plats för annat sidinnehåll, som till exempel texter, bilder, länkar och navi-

geringsmeny. Även med detta upplägg, kan vi variera sidans layout på flera sätt.

Utöver val av färg och storlek på de olika enheterna (sidhuvud, sidfot och sidinnehåll), kan

placering av navigationsmeny påverka intrycket av sidan rätt mycket. Så mycket att vi bör se

den som ytterligare en enhet och ta den i beräkning när vi lägger upp vårt arbete.

Nästa steg blir att avgöra hur vi ska märka upp sidan, vilka html-taggar ska vi använda oss av.

I detta steg, är det viktigare att veta delarnas funktion än hur de skall se ut och placeras.

Sidhuvudet, sidfoten och sidinnehållet (satsytan) är separata enheter >>block<<, likaså menyn.

Till de tre första kan vi använda oss av grupperings-taggen <div>, för att skapa avskilda

enheter. Menyn kommer att bestå av en mängd länkar, vilket passar att placeras i en lista.

Man kan även tänka sig att vi använder oss av rubrik-taggen <h1> som sidhuvud då den är

tänkt att användas som sidans titel och man kan tänkas använda en paragraf-tagg <p> till

sidfoten, då den enbart skall användas till enkel text (kontaktinformation). Ett annat alternativ

skulle kunna vara att placera texten (kontaktinformationen) inom <address>-taggen, vilket än

mer gör det till tydlig uppmärkning av innehållet. Resterande sidyta, placerar vi inom en

<div>-tagg. Vi samlar alla dessa olika delar inom en yttre sammanhållande <div>-tagg, för att

ordna och placera innehållet som en sammanhållen gemensam yta.

Page 9: Vi skapar en webbsida

Vi skapar en webbsida

9

3. Yttre sammanhållande block

Infoga ett <div>-element på din sida ge div-taggen en unik identitet, förslagsvis något som

beskriver div-taggens funktion. I det här fallet kommer vi att använda den här div-taggen som

en yttre ram till allt annat sidinnehåll, jag ger den därför identiteten sidyta *id=”sidyta”+.

10. <div id=”sidyta”>

11. <!-- här mellan placeras alla andra enheter, som sidhuvud, sidfot, satsyta och meny -->

12. </div>

Det kan vara bra om du tillfälligt placerar lite text innanför <div>-taggar, medan du arbetar

med dem, då de annars riskeras att inte visas när du förhandsgranskar i en webbläsare. Den

oformaterade div-taggen baserar sin höjd på innehållet. Saknar den innehåll, kollapsar div-

taggen ner till en höjd av noll [0], vilket inte är synligt i en webbläsare.

4. Sidhuvud/Rubrik

Vi behöver avdela en yta för sidhuvudet, du kan välja att göra det med en <div>-tagg men jag

föreslår att du istället använder dig av ett annat block-element, rubriker. Infoga den största

rubriktaggen <h1> och ge den en unik identitet, som beskriver dess funktion. Jag väljer att ge

den beskrivande identiteten sidhuvud *id=”sidhuvud”+. Skriv även in en temporär titeltext.

11. <h1 id=”sidhuvud”> Min webbsida! </h1>

5. Sidinnehåll (satsyta)

Nu lägger vi in en yta för diverse innehåll, som texter, bilder m.m. Eftersom innehållet kan

variera använder vi oss av grupperingstaggen <div>, i ett senare skede kanske vi vill fylla den

här ytan olika stycken, kolonner, citat och då vill vi hålla den ytan så öppen som möjligt. Vi

ska även ge den här ytan en unik identitet. Jag kommer att låna det typografiska uttrycket

satsyta, för att beskriva den här enheten. Satsyta är inom typografiska sammanhang den del

av en sida som upptas av text och bild. Jag vill inte ge delen ett namn som är för likt någon

annan indelning (sidyta-sida-sidinnehåll) och jag bör undvika specialtecken som å, ä och ö.

12. <div id=”satsyta”> Tillfällig text </div>

13. <!-- placer något mellan så att inte div-taggen kollapsar -->

6. Sidfot

Infoga nu även en yta för sidfoten, jag väljer att även här använda mig av en <div>-tagg, då

det inte är säkert att man enbart kommer infoga kontaktinformation här.

11. <div id=”sidfot”> Min sidfot! </div>

Du ger givetvis dina indelningar valfria namn, men se till att det är lätt att förstå vilken det är.

Page 10: Vi skapar en webbsida

Vi skapar en webbsida

10

7. Koppla samman html-dokumentet och extern css-mall

Innan du fortsätter är det en sak till som vi bör lägga till på html-dokumentet, en länk till

css-mallen. Glömmer vi länka mellan dokumenten, kan inte webbläsaren veta vilka egen-

skaper som skall kopplas till element på sidan och lämnar dem därför oformaterade.

Sammanlänkningstaggen <link> placeras mellan <head> och </head> i html-dokumentet.

1. <head>

2. …

3. <link href="stylel.css" rel="stylesheet" type="text/css" media="screen" >

4. </head>

Man kan koppla flera olika stilmallar (css-mallar) till en och samma webbsida, som anpassas

för olika [media]. Kommer stilmallar i konflikt med varandra, gäller den som läses in sist.

Alternativ – intern css

Du kan även placera din css i html-dokumentet. Skrivsättet är detsamma som för den externa

mallen, med den skillnaden att det placeras uppe mellan <head>-taggarna. För att webb-

läsare skall tolka innehållet rätt och inte skriva ut det som text, använder du dig av <style>-

taggar.

För äldre webbläsare, som inte kan tolka css eller <style> inte ska läsa och skriva ut koden

som text, placeras även all css inom komentatorstaggar <! -- … -- >

1. <head>…

2. <style type="text/css" >

3. <!--

4. Css { … }

5. -->

6. </style>

7. </head>

Sådär nu är du (nästan) färdig!

Nu behöver du bara ge den ett nytt utseende…

Page 11: Vi skapar en webbsida

Vi skapar en webbsida

11

CSS Steg för steg

Öppna upp din css-mall i valfri editor. Det är bra om du under arbetets gång ofta sparar och att du ofta testar

din webbsida i olika webbläsare för bästa resultat; det är inte alltid som det ser lika ut mellan olika webbläsare.

Din sida ser just för tillfället inte så mycket ut för världen, inte ens om jag fyller på med mer text.

Om du lägger till en underrubrik (<h2>), ett kort textstycke (<p>), och ett citat (<blockquote>), inom

<div>-taggen [satsyta], skulle din sida kunna se ut någonting liknande detta:

<div id=”sidyta”>

<h1 id=”sidhuvud”>

<div id=”satsyta” >

<h2>

<p>

<blockquote>

<div id=”sidfot”>

Fortfarande inte så spännande, nu ska vi formatera innehållet, ge det nya egenskaper, nytt utseende. Så första steget blir att skriva in regelsatser som kopplar till de olika delar vi just skapat. En regelsats består av en selektor (ett taggnamn, en identifierare eller klass), följt av ett deklarationsblock. Deklarationsblocket skrivs in mellan klamrar [{] och [}]. Deklarationsblocket samlar alla egenskaper som vi tilldelar ett element, flera egenskaper kan

radas upp efter varandra om de separeras av semikolon [;]. CSS-regelsatsen får då en syntax som består av tre delar:

Selektor, egenskap och värde

selektor {egenskap: värde;}

Vill man ange samma egenskaper till flera selektorer, kan man separera dem med

kommatecken: Selektor, selektor, selektor {egenskap: värde;}

Page 12: Vi skapar en webbsida

Vi skapar en webbsida

12

1. Förarbete med Stilmallen

Infoga tomma regelsatser för alla element som du vill påverka, vi kommer att tilldela dem

egenskaper allt eftersom. Html-taggar skrivs in med enkel text utan hakparenteser,

identifierare föregås av nummertecknet (#) och klasser föregås av punkt (.).

Vilka element och id-namn är det då vi har i vårt dokument. Hela webbsidan ligger inom

<body>, vi har även <h1>, <h2>, <p>, <blockquote> och <div>, div-taggarna och största

rubriktaggen<h1> har även unika namn (id).

Skriv bara in de element som du tänkt dig att ändra på och gruppera element som har

egenskaper med samma värden. I vårt fall är det viktigare att skriva in regelsats för de unika

namnen (id) än en regelsats för alla <div>-element. Däremot kan vi gruppera <h1> och <h2>,

som får samma bokstavsstil (font) och sedan ge <h1> unika egenskaper utifrån sitt namn (id).

1. body {}

2. h1, h2 {}

3. #sidyta {}

4. #sidhuvud {}

5. #satsyta {}

6. #sidfot {}

2. Bakgrund, textstil och färg på brödtext

Infoga nu egenskaper för <body>, vi kommer att ge den bakgrundsfärg. Här kan man även

definiera vilken stil och färg vi ska använda till text på webbsidan. Då element ärver (vissa

men inte alla) egenskaper av sina föräldrar (element som omsluter dem, vilket body-taggen

definitivt gör), så definierar vi nu utseendet på all text på hela webbsidan.

1. body {

2. background-color:#066;

3. color:#036;

4. font-family: "Times New Roman", Times, serif

5. }

Vill vi använda oss av andra färger eller stilar(font) i någon del av sidan, till exempelvis på

rubriker, måste vi ange avvikelsen hos de elementen. Det som deklarerats senare, ersätter

det föregående på de ställen (de element) det är angett.

Page 13: Vi skapar en webbsida

Vi skapar en webbsida

13

Rubriker

Nu lägger vi till gemensamma egenskaper för alla rubriker, du kan skriva in rubriknivå tre

även om den inte förekommer i dokumentet, så är du beredd på eventuella framtida

förändringar. På så vis behöver du bara märka upp webbsidan korrekt för att få en tydlig

lättläst layout, med rubriker som avviker från brödtexten.

6. h1, h2, h3 {

7. color: #005; font-family: Arial, Helvetica, sans-serif;

8. }

3. Ge sidelementen bakgrundsfärg

Under tiden du jobbar med sidlayout kan du med fördel ge de olika ytorna (boxarna) en unik

bakgrundsfärg, så att du lättare ska kunna hålla reda på hur de placerar sig i förhållande till

varandra. Det behöver inte vara ”rätt färger” så här i början, det spelar inte så stor roll vilka

färger det är, så länge de inte är samma. Vi kommer sedan att ta bort bakgrundsfärgen eller

byta ut den mot en som lämpar sig bättre för det intryck vi vill uppnå.

9. #sidyta {

10. background-color: #33f;

11. }

12. #sidhuvud {

13. background-color: #ff3;

14. }

15. #satsyta {

16. background-color: #f55;

17. }

18. #sidfot {

19. background-color: #3f3;

20. }

Förhandsgranska sidan i en webbläsare, du kommer se de olika ytorna i den färg som du

tilldelat dem. Saknar du någon yta, dubbelkolla om ytan saknar innehåll. Är den tom, skriv

tillfälligt in något eller några ord.

Page 14: Vi skapar en webbsida

Vi skapar en webbsida

14

4. Sidhuvudet

Vi börjar med att förändra sidhuvudet. Första steget blir att göra rubriken centrerad på sidan,

det gör vi med text-attributet [text-align]som vi ger värdet [center]. Förhandsgranskar vi

sidan kan vi nu se att texten är centrarad. Du kan passa på att byta textfärg [color] och

bakgrundsfärg [background-color]på sidhuvudet om du vill.

Vill du att texten inte skall ligga så nära överkanten av sidhuvudet, lägger du till lite marginal

mellan innehåll och sidhuvudets yttre kant [padding]; pröva dig fram hur mycket du behöver.

Det kan även vara läge att definiera en fast höjd [height] på sidhuvudet, kom ihåg att du

måste skriva ut enheter (pixlar skrivs px) i css.

7. #sidhuvud {

8. background-color: #...;

9. color: #...;

/* ändra bara färgen här om den ska avvika från det du angett för rubriktaggar tidigare */

10. text-align:center;

11. height: 75px;

12. padding-top: 10px;

13. }

Om man vill ersätta sidhuvudets bakgrund med en bild gör du det med bakgrundsattributet

[background-image] enligt följande:

7. background-image:url(...här skriver du in sökväg och bildens namn);

5. Sidfoten

Definiera på samma sätt, ny bakgrundsfärg och textfärg som passar till den på sidfoten. Skriv

även in sidfotens höjd och inre marginaler.

8. #sidfot {

9. background-color: #...;

10. color: #...;

11. height: 75px;

12. padding: 5px;

13. }

Samma gäller som ovan, att om du vill ersätta bakgrundsfärgen med en bild, så använder du

dig av bakgrundsattributet [background-image].

Page 15: Vi skapar en webbsida

Vi skapar en webbsida

15

6. Satsytan, ytan för sidinnehåll

Den här ytan ska vi inte göra så mycket med, den kommer att vara behållare för alla delar

som du stoppar in på din sida; som texter, bilder m.m. Så vi vill inte ge den en fixerad höjd, så

att vi begränsas av hur mycket som ryms på höjden. Däremot vill vi inte heller att den ska

vara för liten, när vi saknar innehåll. Därför ska vi definiera minsta önskade höjd med

attributet [min-height] Min-height, gör så att om innehållet är större än ytan, expanderar

den, men är den mindre stannar den vid den storlek vi valt.

14. min-height: 200px;

Marginaler

För att snygga upp ytan och lyfta fram dess innehåll, lägger vi till marginal mellan ytans yttre

kanter och dess innehåll, så kallad inre marginal [padding]. Men vi vill kanske inte använda

oss av samma marginaler hela vägen runt om, kanske man kan ha större på vänster och

höger sida än uppe och nere. För detta kan vi använda oss av två metoder, den ena är att

definiera inre marginal för var och en av dem (padding-top, padding-right, padding-bottom

och padding-left) eller så skriver vi det i en förkortad form:

15. padding: 10px 50px 10px 50px;

Marginalen, anges då i ordningen top,right, bottom, left - alltså medsols. Har dessutom top -

bottom och right -left samma värden som ovan, kan man förkorta ner det ytterligare.

15. padding-top: 10px 50px;

Bakgrund

Välj även en passande bakgrundsfärg till ytan, tänk på vad du skall fylla sidan med, ofta

fungerar en ljus yta bättre. Detsamma gäller att en enfärgad yta ofta passar bättre än en

brokig (som till exempel en bild). Pröva dig fram till vad som passar just din designidé.

15. #satsyta {

16. background-color: #...;

17. color: #...;

18. min-height: 200px;

19. padding: 10px 50px;

20. }

Page 16: Vi skapar en webbsida

Vi skapar en webbsida

16

7. Centrera hela sidan och definiera dess bredd

Nästa steg blir att centrera allt innehåll på vår sida, till det ändamålet ska vi använda oss av

den omslutande <div>-taggen [sidyta]. Vi kommer att använda oss av boxegenskapen för

yttre marginal [margin], den som anger marginal mellan box och omgivande element. I det

här fallet är det enbart <body> som omger div-taggen [sidyta], vilket kommer göra så att den

alltid är centrerad i webbläsarfönstret.

Men vi vill inte centrera både lodrätt och vågrätt, utan enbart vågrätt (åt sidorna), vi anger

därför enbart marginalvärden för höger och vänster marginal. Höger [margin-right] och

vänster [margin-left], vi ställer in värdet till [auto]. Värdet [auto] anger i det här fallet att

marginalen skall bli så stor som möjligt och eftersom vi anger [auto] på både höger och

vänster sida fördelas ytan mellan dem; och sidan centreras.

För att det här ska fungera, måste vi också ange bredd på sidytan [sidyta]. Det förhands-

inställda beteendet hos blockelement gör så att den upptar en hel radbredd, den breder ut

sig på så stor bredd som finns tillgänglig. Vilket då gör så att det inte finns något utrymme

kvar för marginalen (som när den är inställd på [auto] tar det utrymme som blir över).

21. #sidyta{

22. margin-left: auto;

23. margin-right: auto;

24. width: 680px

25. }

Sådär, nu är du färdig!

Nu behöver du bara en navigationsmeny…

Page 17: Vi skapar en webbsida

Vi skapar en webbsida

17

<<aa>>

LÄNKAR En kort beskrivning

Om du känner dig säker på hur man skriver och använder länkar, kan du hoppa över det här kapitlet och

fortsätta direkt med nästa kapitel - meny. Du kan även läsa mer om länkar i den grundläggande texten:

[övning: länkar] och på World Wide Web Consortium (W3C) http://www.w3.org/TR/html401/struct/links.html

Inledning

Även om det är ett enkelt koncept, har länken varit en av de främsta drivkrafterna till

framgång för webben. En länk <a> är en förbindelse från en webbsida till en annan punkt

på internet. Man kan länka inom en och samma webbsida likväl som till en annan webbsida,

som ligger på eller utanför den egna webbplatsen/servern.

En länk har två ändar - kallade ankare - och en riktning. Länken startar vid ett "käll-ankare"

(den klickbara ytan) och pekar mot ett "destinations-ankare", t.ex. en webbplats, en bild,

ett videoklipp, ett ljud, ett program, ett HTML-dokument, ett element i ett HTML-dokument

osv.

När länk-taggens [href] attribut är satt, definierar elementet det en källa (ankare) för den

länken, som kan aktiveras av användaren (genom att klicka) för att hämta en webbresurs.

Den hämtade webbresursen kan hanteras av webbläsaren på flera sätt: Genom att öppna

ett nytt fönster, genom att öppna i samma fönster som webbsidan med länken (och då

ersätta innehållet med den nya sidan, eller innehållet), genom att starta ett program för att

hantera källan (destinationsankaret: ett ljud, en film, ett dokument et.c.).

Länk-attributet [target] kan berätta för webbläsaren om den skall öppna destinations-

ankaret i ett nytt fönster *target=”_blank”+ eller i samma fönster [ target =”_self”+, men kan

även länka till en namngiven yta (frame) *target=” … ”+ (där man då skriver in ytans defini-

erade [name]). Anger man inte [target], utgår webbläsaren oftast från att destinations-

ankaret ersätter källan (sidan med länken). Så man behöver inte skriva in attributet om det

är det här beteendet man vill uppnå.

När ett [name] eller [id] attribut finns angivet hos länk-taggen kan länken fungera som ett

ankare, som kan användas av andra länkar att länka till, även inom en webbsida. På samma

sätt, kan en länk-tagg länka till ett element på en webbsida, om den har en unik identitet.

Man kan med fördel använda sig av [title] attributet i länk-taggen för att ge mervärde och

information till användaren om länken. En [title] kan även läsas upp av talsyntes eller visas

av webbläsaren.

<a href=”… destination ” name=” … ” id=” … ” title=” Beskrivning av vad länken leder till” > Vad som syns </a> .

Page 18: Vi skapar en webbsida

Vi skapar en webbsida

18

Hur länkar ser ut, och hur du vill att de ska se ut på din webbsida?

När en text formaterats till en länk, visas detta ofta genom att texten ges ett avvikande och

framträdande utseende. Webbläsaren brukar även visa länkens nuvarande tillstånd: att det

är en länk; att det är en besökt länk; att det är en aktiv länk. Muspekarens utseende ändras i

de flesta fall hos webbläsaren (från pil till hand), när den ligger ovanför en länk.

Med CSS kan du förändra de förhandsinställda länkfärgerna, men även ge länkar nya

egenskaper. Du kan ge länkar de flesta block-, text- och font-egenskaper, även om länkar är

inline-element, vilket är väldigt användbart.

CSS exempel

Exempel på egenskaper du kan ge: kantlinje (border – widht, -color, -style), marginaler (padding,

margin) bakgrund (background -color, -image, -position), positionering (position, top, float …)m.m.

1. a { font-family: Tahoma, Geneva, sans-serif;

2. font-size: xx-large;

3. font-weight: bolder;

4. color: #F90;

5. text-decoration: none;

6. background-color: #0FC;

7. text-align: center;

8. margin: 5px;

9. padding: 5px;

10. border: thin double #00F;

11. }

12. /* … och så vidare … */

Display kan växla ett element från att bete sig som ett inline till att bete sig som ett block-element och

vice versa. Man kan även välja display:none; för att dölja elementet helt och hållet .

13. a { display: block; … }

Vanligast förekommande förändring av länktexter är textfärgen. Visa att det är en länk

genom att göra länktexten blå och göra den understruken, visa att en länk redan är

använd genom att göra den lila och medan länken är aktiv/klickas på/används visa den

som röd. Webbläsaren kan även visa att länken är markerad/vald/i focus genom att ge

länken en ram av prickar, länkar kan få en ny färg när muspekaren ligger ovanför länken.

länkar

Tänk på att det fin-ns en anledning till att länkar är utmär-kta och avvikande, det är meningen att man ska hitta dem – förstå att de går att klicka på!

Page 19: Vi skapar en webbsida

Vi skapar en webbsida

19

Text-decoration, color, background, font-size och text-align

text-decoration: har flera val (läs mer om det i css text och font-övningarna), men

vill du ta bort understrykningen hos länkar skriver du in[none], vill

du få den att blinka skriver du [blink] och vill du återställa

understrykningen skriver du [underline].

color: ger texten en ny färg, välj mellan webbfärgnamn eller skriv in det

med hexadecimaler [#RRGGBB] (läs mer om det i webbfärger).

background-color: ger bakgrunden till länktexten en ny färg.

background-image: ger dig möjlighet att använda en bild som bakgrund till länktexten,

tänk på att ytan begränsas av radlängd och radhöjd (läs mer om

hur du kan påverka detta i css text och fontövningarna).

font-size: ändrar storleken på bokstäverna (läs mer om hur du kan påverka

detta i css text och fontövningarna).

text-align: ändrar justeringen av texten, normalt är text vänsterjusterad

[left], men du kan även välja högerställd [right], centrerad [center]

och marginaljusterad (dvs rak kant både åt höger och vänster) [justify].

Pseudoklasser

Det finns några speciella selektorer som främst är kopplade till länkar och som inte kan

användas på egen hand, utan måste kopplas till en html-tagg, en id-selektor eller en klass-

selektor. De sätt direkt efter aktuell selektor avskild enbart av ett kolon ( : ). Dessa selektorer

kallas för pseudoklasser och kan inte användas separat

De vi ska titta på här är kopplade till länkarnas olika tillstånd:

:link är en normal obesökt länk, länkens normaltillstånd.

:visited är en besökt länk, visas när man kommer tillbaka till sidan.

:hover är ett tillstånd när muspekaren placeras (svävar) ovanför länken.

:active är ett tillstånd när länken är vald, klickas eller används.

:focus är ett tillstånd när webbläsarens fokus ligger på länken.

När du skriver in pseudo-klasserna i ditt css-dokument, måste de skrivas in i den ordning som

du ser ovan (för att fungera fullt ut) men du behöver inte definiera dem allihop. Det finns

väldigt mycket man kan göra för att lyfta fram sina länkar på en webbsida, men ibland vill

man även att länkarna skall smälta in i en löptext. Pseudo-klasserna [:active]och [:focus]

brukar glömmas bort, men det är lika viktigt som de andra, dels för att underlätta

tillgängligheten och dels för att betona det aktiva tillståndet.

LVHA(f)

Ordning på pseudo-klasserna är viktiga just för hur webb-läsare läser in dem.

Den senare regeln ersätter föregående om det uppstår en konflikt dem emel-lan.

font-size

Användaren kan ändra inställnin-gen för bokstäv-ernas storlek i sin egen webbläsare.

Dessutom kan det skilja mellan olika webbläsare hur stor skillnad det blir.

Ett enkelt fix för detta är att tilldela ett attribut till <html> med css och sätta textstor-leken till 100.01%

Html { font-size:100.01% }

För att sen sätta storleken på text i t.ex <body>.

Page 20: Vi skapar en webbsida

Vi skapar en webbsida

20

Du kan ge varje tillstånd egna egenskaper, på samma sätt som du kan ge länktaggen

egenskaper. Du kan även skriva en deklaration för <a>-taggen som gäller för sidans alla

länkar. Det skall då vara allmänna värden, som till exempel textens stil (font) eller annat

som inte skall ändras och som gäller för alla tillstånd på sidans länkar. Det vanligaste är att

ändra länktextens färger, ta bort understrykningen och ge länken olika bakgrund beroende

på i vilket tillstånd den befinner sig i.

14. a { font-family: arial, sans-serif;}

15. a:link { background-color: #fff; color: #000;}

16. a:visited { background-color: #eee; color: #333;}

17. a:hover { background-color: #000; color: #fff;}

18. a:active, a:focus { background-color: #333; color: #eee;}

Du skriver enbart in de förändringar som skall göras (textfärg, bakgrundsfärg et.c.).

Du kanske noterar att i exemplet ovan både finns angett en regel för länkar i allmänhet [a]

och länkars normaltillstånd/oanvänd länk [a:link], vilket kan tyckas onödig dubbel-

skrivning. Men det står med där, för att skilja på vilka egenskaper alla länkar skall ha,

oavsett tillstånd och vad som hör till ett aktuellt tillstånd. Vi vill inte att webbläsaren skall

sluta använda vissa egenskaper bara för att länken används, är besökt, osv och vi vill slippa

skriva samma egenskaper (med samma värde) flera gånger. Därför skriver du bara in det

som skall förändras i de olika tillstånden.

Men du behöver även vara medveten om att när du deklarerar en regel för [a] omfattar

den även länkar som fungerar som ankare inom ett dokument (de som inte länkar till en

plats utan till en identitet eller ett namn). Vill man inte att regeln skall omfatta även kapitel

och styckes referenser inom dokumentet, utan enbart länktaggar som används till externa

länkar, kopplar man regeln till [a:link] enbart.

a och a:link

Pseudoklassen [:link] letar efter närvaron av - [href] - i det element som regeln för pseudoklassen är kopplad till. Saknas denna, tolkar webb-läsaren det inte som en länk (:link).

Page 21: Vi skapar en webbsida

Vi skapar en webbsida

21

A

A B

MENY Steg för steg

Öppna upp både din css-mall och ditt html-dokument i valfri editor. Vi kommer att lägga till länkar och bygga

en meny av dem, menyn skapas delvis med hjälp av css. Du kan om du vill, jobba med menyn i ett separat

projekt/dokument och kopiera in den när du är färdig. Det är bra om du under arbetets gång ofta sparar och

att du ofta testar din webbsida i olika webbläsare, det är inte alltid som det ser lika ut mellan olika

webbläsare. Känner du dig osäker, läser du föregående beskrivning av och korta genomgång om länkning.

1. Länk, lista, navigeringsmeny

Infoga minst en länk i ditt html-dokument, har du inget att länka till kan du som länkmål

skriva in nummertecknet (#) eller en blanrad ( ).

19. <a href=”#” title=” en länk”> Länk </a>

Du kan även placera din länk i en lista, särskilt om du har flera. Fördelen med att lägga länkar

inom en lista är att de blir tydligt uppdelade även om sidformateringen (css) går förlorad eller

stängs av. Man kan man även argumentera för att en samling länkar är just en >> lista << med

länkar, så då blir det även semantiskt rätt när man märker upp sidan.

1. <ul>

2. <li> <a href=”un.html” title=” Una enlace muy interesante” > Un </a>

3. </li>

4. <li> <a href=”dos.html” title=” Una enlace muy interesante” > Dos </a>

5. </li>

6. <li> <a href=”tres.html” title=” Una enlace muy interesante” > Tres </a>

7. </li>

8. </ul>

Nästa steg blir att förändra utseendet hos de här länkarna och listan, så att de ser ut som en

del av sidans grafiska utformning, så det mer är en navigeringsmeny än text. Men redan nu

bör du bestämma dig för hur menyn ska placeras och hur stor yta den får uppta.

Vi ska titta på tre enkla menyer, som skapas på lite olika sätt, den första skapas med enbart

formaterade länkar, de andra två utgår från länkar i en lista. Du kan läsa den första separat

och slutresultatet kommer att bli en färdig meny, eller så kan du hoppa över den och läsa

direkt om de två andra. Utseendet, det visuella slutresultatet kan bli detsamma med bägge

arbetssätten, det som skiljer dem åt är hur de visas när css saknas eller är avstängt.

Känner du dig osäker, kan du med fördel välja den första menyvarianten, då den är enklare

och innehåller färre moment. Vill du i ett senare skede byta till en lista är det följer du bara

stegen för en meny skapad av listor.

href=”#”

En del webbläsare förstår inte använd-andet av tomma län-kar eller länkar som inte leder någon-stans. Som vid använ-dandet av – [#] - som länkmål. Stöter du på problem, hitta på en länk som ser rätt ut, eller länka till något tillfälligt.

Page 22: Vi skapar en webbsida

Vi skapar en webbsida

22

A 1.1. Meny, av enbart länkar

Du har nu minst en länk, förslagsvis flera, så att du kan se hur de kommer att se ut på din

webbsida. Vi kommer nu att ge länkarna nytt utseende och göra så att de ändras när man

interagerar med dem (använder länken). Du väljer givetvis färg och stil efter vad som passar

just på din sida, jag kommer att göra mina länkar fetstilta, ändra bokstavsstilen(font), ta bort

understrykningen, ändra bokstävernas färg till mörkblå och ge dem en gul bakgrundsfärg.

Öppna upp din stilmall (css-dokument) och lägg till en regelsats för länktaggar <a>:

1. a {

2. font-weight: bold; /* fetstilt text */

3. font-family: Arial, Helvetica, sans-serif; /* ny font */

4. text-decoration: none; /* tar bort understrykning */

5. color: #009; /* mörkblå textfärg */

6. background-color: #ff0; /* gul bakgrundsfärg */

7. }

Spara både ditt html och css-dokument och förhandsgranska resultatet. Du kommer nu att se

hur alla länkar på webbsidan fått det nya utseendet. Du märker även hur länkarna ligger tätt

ihop, sida vid sida och att den gula bakgrunden ligger precis bakom länktexten.

Vi ska därför lägga till utrymme, yta för bakgrunden att breda ut

sig på. Det gör vi med inre margnal, [padding], pröva dig fram till

hur mycket som behövs, här lägger vi till tio pixlars extra höjd

och bredd (fem pixlar från innehållet och utåt).

1. {… padding: 5px; …}

Nu ser det lite bättre ut, vi skulle kunna nöja oss med detta om vi ville, men vi kan även lätt

lägga till fler egenskaper. Kanske vill vi ha en ram runt länken, det gör vi med egenskapen

kantlinje [border]: (border-color, border-style, border-width). Kanske vill du öka avståndet

mellan länkarna (utan att för den skull öka den färgade ytan), det gör du med yttre marginal

[margin]: (margin-top, margin-right, margin-bottom, margin-left).

2. { …

3. border: #009 thin solid;

4. margin-left: 10px;

5. }

Även om storleken på länkknapparna styrs av länktextens längd, har vi kommit en lång väg

mot att skapa oss en webbsidesmeny, nästa steg blir att lägga till interaktivitet.

Page 23: Vi skapar en webbsida

Vi skapar en webbsida

23

:link, :visited, :hover, :active, :focus.

Lägg till pseudoklasser för länktaggen, kom ihåg ordningen och att enbart skriva in vad som

skall ändras (t.ex. bakrundsfärg och passande textfärg). Har flera pseudoklasser samma

värde, kan du med fördel bunta ihop dem, kom ihåg att separera dem med komma [ , ].

6. a:visited { color: #449; background-color: #880;}

7. a:hover{ color: #490; background-color: #940;}

8. a:active, a:focus{ color: #6f0; background-color: #f60;}

Här, de tre olika tillstånd som vi angett ovan. Först en besökt

länk (visited), sedan en med muspekaren över (hover) och

sist en länk som är i fokus/är aktiv (active/focus). Vi kan

även se länktiteln (title) när muspekaren ligger över länken.

Man kan med fördel samla alla länkarna som skall utgöra länkmenyn inom en <div>-tagg,

dels för att man då kan ge hela menyn en bakgrundsfärg, kantlinje och så vidare, men även

för att avskilja dem från annat innehåll på sidan.

Vill man använda sig av fler länkar, men inte att också dessa skall få samma formatering som

en menylänk, gör vi det lättast på följande vis.

Samla alla menylänkar inom en <div>-tagg och ge den en unik identitet [id], till exempel

meny *id=”meny”+. Koppla sedan id-selektorn till länkar som ligger innanför div-taggen

genom att skriva in id-namnet som en del av css-regeln för menytaggarna. Du åstadkommer

detta genom att framför varje länkregel även skriver id-namnet följt av ett mellanslag.

Regeln läses då av webbläsaren som: länk inom namngivet element; och inga andra länkar på

sidan ände innanför div-taggen påverkas av css-reglerna.

1. <div id=”meny>

2. <a href=”#” title=”Länk” > Länktext </a>

3. </div>

Du kan även passa på att ge div-taggen som omger länkarna egna egenskaper.

1. #meny { … } /* egenskaper till den omslutande div-taggen */

2. #meny a { … } /* länkar innanför ett element med id=meny */

3. #meny a:visited { …} /* besökt länk*/

4. #meny a:hover{ …} /* lank när muspekaren “hänger” ovanför */

5. #meny a:active, #meny a:focus { … } /* flera med samma värden */

css

html

Page 24: Vi skapar en webbsida

Vi skapar en webbsida

24

B1 1.2. Vertikal meny av lista med länkar

Du har nu minst en länk [a], förslagsvis flera, placerade i en lista. Det spelar ingen roll om det

är en numrerad (ordered list [ol]) eller onumrerad punktlista (unordered list [ul]), för vi

kommer att ta bort listpunktmarkeringarna. Vi kommer även att ge länkar och lista nytt

utseende, samt göra så att de ändras när man interagerar med dem (använder länken).

Fördelen med att lägga länkar inom en lista är att de blir tydligt uppdelade även om

sidformateringen (css) går förlorad eller stängs av. Man kan man även argumentera för att en

samling länkar är just en >> lista << med länkar, så då blir det även semantiskt rätt när man

märker upp sidan.

Länk i lista

Länk utan lista

När css formateringen går förlorad syns länkar i en lista tydligare, än länkar lagd efter var-

andra, därför underlättar du sidnavigeringen även för dem som inte kan se formateringen.

9. <ul>

10. <li> <a href=”un.html” title=” Una enlace muy interesante” > Un </a> </li>

11. <li> <a href=”dos.html” title=” Una enlace muy interesante” > Dos </a> </li>

12. <li> <a href=”tres.html” title=” Una enlace muy interesante” > Tres </a> </li>

13. </ul>

Nästa steg blir att förändra utseendet hos de här länkarna och listan, så att de ser ut som en

del av sidans grafiska utformning, så det mer är en navigeringsmeny än text.

Vi kommer att utnyttja att listor är blocknivå-element och forma listans utseende och storlek,

på så vis behöver vi inte lägga till ytterligare behållare (sidavdelare, som t.ex en div-tagg).

Ge list-elementet en unik identitet, förslagsvis något som beskriver dess funktion. I det här

fallet kommer vi att använda den här list-taggen som en yttre ram till allt menyinnehåll, jag

ger listytan därför identiteten meny *id=”meny”+.

9. <ul id=”meny” > …

När vi sedan formaterar listan (som nu har namnet [meny]), listposterna [li] och länkar [a]

i listan, kopplar vi ihop dem på följande vis:

1. #meny { … } /* egenskaper till den omslutande list-taggen */

2. #meny li { … } /* egenskaper till list-posternas yta */

3. #meny li a { …} /* egenskaper till länkar inom en listpost */

Page 25: Vi skapar en webbsida

Vi skapar en webbsida

25

Formatera listan

Det finns några få listspecifika egenskaper du kan ändra hos listor med CSS:

1. ul {

2. list-style-type: xxx; /* listposternas inledande numrering eller symbol */

3. list-style-position: xxx; /* placera symbolen/numret innanför eller utanför */

4. list-style-image: url( xxx ); /* byta ut listpostens inledande numrering/symbol mot en bild */

5. }

Du kan ändra på listposternas inledande numrering eller symbol, placera symbolen/numret

innanför eller utanför listan eller byta ut listpostens inledande numrering/symbol mot en

bild. Utöver detta är det intressant att veta att både listan i sig själv (ol och ul) och

listposterna (li) är block-element, så man kan påverka deras utseende på samma sätt som

boxar i övrigt (höjd, bredd, bakgrund, kantlinje, marginaler, …).

Vi att använda oss av en ospecifierad lista (ul) men ändra gärna tillfälligt till en numrerad lista (ol) för att pröva de olika numreringsalternativen.

Ospecifierad lista: Pröva skriv list-style-type:

disc (för en lista med fyllda punkter) circle (för en lista med cirklar) square (för en lista med fyrkanter) none (för en lista utan inledande symbol på listposten)

Specifierad lista: Pröva skriv list-style-type:

1. decimal eller decimal-leading-zero (för en vanlig numrerad lista)

2. upper-latin, upper-alpha

3. lower-latin eller lower-alpha (för en lista ordnad med bokstäver: a b c …)

4. lower-roman eller upper-roman (för en lista romerskt numrerad I II III IV…)

5. armenian, georgian eller lower-greek etc (för språk specifik numrering)

6. none (för en lista utan inledande symbol på listposten)

Ta bort inledande symbol genom att specificera värdet [none] till [list-style-type].

1. #meny {

2. list-style-type: none; /* listposternas inledande numrering eller symbol */

3. }

<ul>

<ol>

Page 26: Vi skapar en webbsida

Vi skapar en webbsida

26

Färg och form

Vårt nästa steg blir att ge listytan (den yta listan utgör) bakgrund och form, vi börjar med

bakgrundsfärg [background-color]. Du kan givetvis även använda dig av bakgrundsbilder,

men här håller vi oss nu till att välja bakgrundsfärg.

1. #meny {

2. background-color: #f90; /* vi tilldelar listan boxegenskapen för bakgrund */

3. }

Block-element upptar hela sidbredden om man inte anger en begränsning, vi ska därför ange

en fast bredd till listan [width]. Vi ska även lägga till lite inre marginal [padding], så att inte

texten ligger så nära ytans ytterkanter.

1. …

2. width: 50px; /* vi tilldelar listan boxegenskapen för bredd */

3. padding: 5px; /* vi anger inre marginal */

4. …

Vi har nu tre ytor som vi kan påverka utseendet på, ytan

för hela listan, ytan för varje listpost/listrad och ytan för

varje länk. Varje yta kan tilldelas egen bakgrund, egna

kantlinjer, egna marginaler osv …

1. #meny {background-color: #000; } /* bakgrund till menyn (listan) */

2. #meny li {background-color: #000; } /* bakgrund till listpost/listrad */

3. #meny li a {background-color: #000;} /* bakgrund till länktexten/länkyta */

Det är med detta vi ska skapa vår navigationsmeny, men vägen dit kan variera, liksom

slutresultatet. Det finns så mycket som du kan förändra, så kombinationsmöjligheterna är

många, bara val av färg, kantlinje och bakgrund ger dig mer än nog. Tänk också på att du kan

ge ytans olika sidor (top, right, bottom och left) egna värden, både vad gäller marginaler och

kantlinjer. Vilket gör att du lätt kan skapa klassiska ”knappar”, som du ”kan trycka ner”, likväl

som grafiskt enkla ”understrykta länkar”, som ändrar färg på linjen vid interaktion med

länken och grafiskt utsmyckade länkar som ändrar färg och form.

Formatera länktexten

Page 27: Vi skapar en webbsida

Vi skapar en webbsida

27

Vi ska nu göra de nödvändiga förändringar som behövs för att förvandla länkarna från vanliga

länkar till menyknappar. Det vi börjar med är att definiera hur länkarna ska se ut i allmänhet.

Vi vill inte att våra länkar skall ha det typiska utseende och beteende som man förknippar

med länkar. Som att länkar är blå och understrukna, så därför tar vi bort understrykningen

med deklarationen [text-decoration: none;] och definierar en ny länkfärg med deklarationen

[color: #000;] (givetvis väljer du en färg som passar, här valde vi svart).

1. #meny li a {

2. text-decoration:none; /* tar bort understrykning */

3. color: #000; /* definierar textens färg */

Vi kan även definiera vilken stil (typsnitt, font) vi vill ha på länktexten med deklarationen

[font-family: Helvetica, Arial, sans-serif;] även om det inte direkt hör till länkars förinställda

beteende.

4. …

5. font-family: Helvetica, Arial, sans-serif; /* anger stil på bokstäver */

Samt blockegenskaper som bakgrundsfärg, marginaler och kantlinjer.

6. … background-color: #fff; /* bakgrund till länktexten/länkyta */ …

/* m.fl. men dock inte höjd och bredd,

läs nedan [Formatera länkarnas elementegenskaper] */

7. }

Här placerar du även deklarationer för att centrera texten [text-align], om du betonar den på

något vis (t.ex fetstilt eller kursivt) [font-weight] och [font-style].

:link, :visited, :hover, :active, :focus.

Lägg till pseudoklasser för länktaggen, kom ihåg ordningen och att enbart skriva in vad som

skall ändras (t.ex. bakrundsfärg och passande textfärg). Har flera pseudoklasser samma

värde, kan du med fördel bunta ihop dem, kom ihåg att separera dem med komma [ , ].

4. #meny li a:visited { color: #449; background-color: #880;}

5. #meny li a:hover{ color: #490; background-color: #940;}

6. #meny li a:active, #meny li a:focus{ color: #6f0; background-color: #f60; }

Formatera listposterna/listraderna

Page 28: Vi skapar en webbsida

Vi skapar en webbsida

28

B2

Du kan sluta läsa det här och hoppa till nästa stycke om du vill, jag ska förklara varför!

När du använder dig av länkar, så är länken klickbar, inget konstigt med det, men länken

avgör även vilken yta som är klickbar. I de flesta fall är det samma yta som texten utgör, finns

det inre marginal [padding], utökas den klickbara ytan. Detsamma gäller för kantlinjer

[border], men inte för yttre marginal [margin]. Utökar du ytan av länkposten, med till

exempel höjd och bredd, eller med inre marginal [padding], kommer det att finnas en stor

yta runt länken som inte är klickbar (yta som tillhör listan, inte länken).

Därför kan det vara på sin plats att ändra på länktaggens utseende och storlek istället för

listpostens och låta listpostens yta bestämmas av dess innehåll (dvs länken). Listposter/rader

är block-element, så de kommer att uppta hela listans bredd och får sin höjd av eventuellt

innehåll. Anger man inget värde för bakgrund, är den genomskinligt och visar listytan.

Men vill du formatera listposten/raden, kan du ge den alla boxegenskaper, som höjd, bredd,

bakgrund, kantlinje och marginaler.

1. #meny li {

2. background-color: #fff; /* bakgrund till länktexten/länkyta */

3. /* m.fl. */

4. }

Formatera länkarnas elementegenskaper

Som vi redan nämnt tidigare, kan du ge länkar de flesta box-egenskaper som block-element

kan ha, förutom att definiera höjd och bredd. Därför ska vi ändra länkarna från att vara

inline-element, till att vara och bete sig som ett block-element.

1. #meny li a {

2. display: block;

3. … }

Formatera nu länken som du önskar, med alla box-egenskaper, även höjd och bredd, men läs

även om element som gjorts flytande med [float] eller gjorts om till [inline-block] nedan.

Så där! Nu var vi nästan färdiga, nu ska det bara placeras på sidan.

1.3. Horisontell meny av lista med länkar

Page 29: Vi skapar en webbsida

Vi skapar en webbsida

29

Bara ett kort ord om att göra en horisontell meny, har du gjort en meny av enbart länkar

lägger de sig på rad (eftersom länken är ett inline-element), men är länkarna placerade i en

lista lägger de sig på hög (under varandra, på ny rad) eftersom listposten/raden är ett block-

element. Detsamma gäller om du ändrat länkarna från att vara inline- till att vara block-

element med attributet [display] i css-dokumentet. Vi kommer därför att använda oss av

[display] även för att placera länkarna på rad bredvid varandra igen.

Men det första vi behöver göra är att se till så att bredden på list-elementet ([ol] eller [ul]) är

nog bred för att lägga dem på rad. Ändra [width] till lämplig bredd (bredden på länkarna+

marginaler+ eventuell bredd på listposterna/raderna och dess marginaler) eller ange värdet

[auto], anger du inget värde för bredd utgår webbläsare från att värdet [auto] ska användas.

Nästa steg är att placera länkarna så att de ligger på rad, och för att göra det behöver vi dels

veta hur vi lagt upp vårt tidigare arbete och dels ändra block-elementen så att de inte staplas

ovan och under varandra. Jag kommer att utgå från att du lagt länkarna i en lista och att du

sedan ändrat länkar till att bete sig som block-element. Utseendet på länkmenyn utgår nu

alltså från dina inställningar för länkytan (bredd, höjd, kantlinjer, färger, bakgrunder och

marginaler) och från eventuella inställningar för listytan ([ol] eller [ul] och [li]).

Inline

Nu tar vi bort blockegenskapen från listposterna ([li]) så att de inte längre staplas på varan-

dra. Du kommer att märka att länkarna inte lägger sig på rad, men det beror på att de

fortfarande är inställda att bete sig som block-element. Lägg till följande till ditt css-

dokument:

1. #meny li { display: inline; }

Tar du bort display-deklarationen från länktaggen, eller ändrar den från värdet [block] till

[inline], läggs länkarna på rad, men då tappar du också den boxformatering du tidigare lagt

till. Vad vi behöver är en lösning där vi har kvar block-egenskaperna, samtidigt som vi kan

lägga dem i rad som inline-element.

Inline-block och float

Vad vi behöver är block element som behåller sina blockegenskaper, men placeras på sidan

som inline-element. Det finns ett sådant element-tillstånd som kallas inline-block.

1. #meny li a { display: inline-block; }

Så där, nu när du förhandsgranskar bör de lagt sig vackert på rad. Om det inte gör så, beror

det på din webbläsare, pröva med en annan webbläsare som följer webbstandarden. Det är

den här egenskapen som vi skulle vilja använda, men så länge den inte stödjs av alla

webbläsare, får vi använda oss av en annan metod.

Det andra alternativ vi då har är att göra elementet flytande med egenskapen [float].

Nackdelen här är att även det inte alltid fungerar fullt ut i alla webbläsare. Övriga inline-

inline-block

Fungerar i de flesta webbläsare, om ele-mentet som man ändrar beteende hos tidigare varit ett in-line-element. Vilket gör att det passar att användas till länkar. Var bara beredd på att det inte alltid ser lika ut mellan olika webbläsare

float

Fungerar inte lika i alla webbläsare, men är ändå en väldigt an-vändbar metod. Ett element som görs flytande, om-vandlas till ett block-element (med allt det innebär), men lägger sig utanför inline och blockflödet. De kan

Page 30: Vi skapar en webbsida

Vi skapar en webbsida

30

<ul id="meny">

<li><a href="#"> Home </a></li>

<li><a href="#"> Un </a></li>

<li><a href="#"> Dos </a></li>

<li><a href="#"> Tres </a></li>

<li><a href="#"> Away </a></li>

</ul>

#meny {border-bottom: 1px solid black; padding-left: 10px; font:

bold 12px Verdana; list-style-type: none; min-width: 400px;

height:28px;}

#meny li {display: inline;}

#meny li a {display: inline-block; text-decoration: none; text-

align:center; width: 50px; padding: 7px 8px; margin-left:

2px; color: white; background-color: #414141;}

#meny li a:link {} #meny li a:visited {} #meny li a:hover {} … osv

element flödar runt det flytande-elementet, vilket gör att det passar bra till bilder som ligger

inne i en text. Man kan göra alla element flytande. Man kan välja om det flyter mot vänster

sida eller höger sida och det flytande elementet utgår från det yttre element (föräldra-

element) den ligger inom. Men den tappar sin position i inline-flödet (och dokument-flödet),

övriga element placeras runt objektet (ungefär på samma sätt som figursättning/text-wrap

fungerar).

Men här innebär det att länken inte längre räknas som en del av listposten/radens innehåll

och om man inte angivit höjd [height] för det elementet kollapsar den ihop till en höjd av noll

[0]. På samma sätt påverkas även hela listelementet, om listpost/raderna inte har höjd,

kollapsar den ner till en höjd av noll [0]. Det är givetvis en egenhet du kan dra nytta av, nu

när du vet det. Ange även alltid bredd [width] för flytande element.

1. #meny li a { float: left; }

Nu när du förhandsgranskar, läggs länkarna på rad (om listpost/raderna är inställda på att

vara inline, så att även list-elementen läggs på rad). Använd [margin] och [padding], för att

ytterligare kontrollera mellanrum och luft runt länktexterna; samt eventuellt [padding] och

[margin] på listpost/raderna.

Exempel - Enkel flikmeny, med horisontell linje nedtill.

Den här menyn byggs upp an en lista med fem länkar, länkarna har gjorts om till block-element,

listposterna gjorts om till inline-element (display). Sedan har länkarna även gjorts flytande (float),

de flyter åt vänster. Listelementet, har tilldelats en kantlinje i nederkant (border-bottom) och en

given höjd (height, som motsvarar länkarnas höjd). Dessutom, har listelementet en inre marginal

(padding-left) på vänstra sidan, vilket knuffar länkarna inåt på linjen. Länkarna, har en yttre

vänstermarginal (margin-left) om två pixlar, vilket gör att länkarna får ett litet mellanrum. Till

menyn är även definierat de olika pseudoklasserna (link, visited, hover, active, focus) för de olika

tillstånd som länkarna kan ha. Variation…

Låt länkarna flyta åt höger, ha en kantlinje upptill, andra färger.

Ta bort float och ange länkarna som inline-block istället.

2. Positionering av

H

T

M

L

o

c

h

C

S

S

e

x

e

m

p

e

l

Page 31: Vi skapar en webbsida

Vi skapar en webbsida

31

C

D

menyn

Nu är det dags att välja en plats för din meny, om du inte redan valt en. Jag kommer i mina

exempel placera menyn dels på sidan om [satsytan] och dels under [rubriken], två rätt

vanliga placeringar. Men det är också läge för att tala lite om dokumentflödet och positioner.

Dokumentflödet, är det sätt som webbläsare tolkar och placerar ut innehåll på en webbsida,

hur sidan visas i webbläsaren. Men även i vilken ordning en webbsida läses upp av talsyntes.

Dokumentflödet

Dokumentflödet, är egentligen två olika flöden, som tillsammans utgör ett gemensamt

dokumentflöde. Det är block-nivå-flödet [block] och text-nivå-flödet [inline]. Blocknivå-

element, bildar egna enheter, ofta med en radbrytning före och efter elementet. Textnivå-

element, lägger sig på rad efter varandra, på samma nivå och utan radbrytningar. Även om

du kan ändra detta beteende, är den generella uppmaningen att man inte bör göra så.

Element visas på sidan i den ordning de skrivs in i html-dokumentet och efterföljande

element placeras (utifrån sin sort, block eller inline) på första lediga plats i ordningen.

[ Dokumentflödet ]

Inget blocknivå-element kan placeras bredvid ett annat element (då de knuffas ner en rad)

om man inte ändrar elementets beteende (med t.ex. float, display eller position). Alla

textnivå element, lägger sig på rad efter varandra. Men även de utgör en gemensam yta, en

tillfällig box som består av hela raden, vars höjd utgår från radens högsta element.

Textnivå-boxar av olika höjd kan inte

existera samtidigt på samma rad och

man kan inte skapa textnivå-boxar.

Placeras något före ”sidyta”, knuffar det ner övrigt innehåll.

Placeras något efter ”sidyta”, hamnar den under/efter den ytan.

Page 32: Vi skapar en webbsida

Vi skapar en webbsida

32

Position, inom dokumentflödet

Position (static)

På samma sätt som alla element har en yta, har alla element en position även om den inte är

definierad. Detta kan skrivas ut som [position: static;], men behöver inte skrivas eftersom

det är standardvärdet för alla element (inline, som block). Ett element som har positionen

static, kan anses som ”opositionerad” (även om de rent tekniskt faktiskt innehar en position).

Det finns tre övriga positioneringstillstånd som element kan ha/tilldelas: [relative], [absolute]

och [fixed]. Vi ska kortfattat gå igenom dem här nedanför, för att deklarera position, behöver

man i regel bara definiera egenskapen [position] och ett av ovanstående värden. Men för att

kontrollera hur elementet flyttar, lägger du även till något av eller flera av följande värden:

[top], [right], [bottom] och [left], positivt värde är från angiven kant/sida och inåt. Anges

inget värde för dem, anses de ha värdet [auto], anges ett numreriskt värde, är det

dominerande över (används istället för och/eller påverkar) det automatiska värdet. Vi börjar

med det som mest liknar static:

Position (relative)

Positionering med egenskapen [relative] placerar elementet relativt till den plats den har i

dokumentflödet, det vill säga den plats den skulle ha om den var opositionerad. Nu kan man

förflytta elementet från den platsen, men utrymmet i dokumentflödet förblir ”upptaget”. Det

vill säga att elementet lämnar en tom yta efter sig. Du måste ange värden för minst en av

top, right, bottom eller left, för att du ska se en positionsförändring; annars ligger elementet

kvar på sin position i dokumentflödet (som om den var av värdet static).

En annan sak som händer är att det flyttade elementet, lägger sig ovanför de andra

elementen på webbsidan. Du kan ändra detta genom att ange ett värde för [z-index] på

elementet, positiva värden är längre upp/fram, negativa längre ner/bak.

{

Position: relative;

Top: 10px;

Left: 25px;

}

Page 33: Vi skapar en webbsida

Vi skapar en webbsida

33

Position, utanför dokumentflödet

Position (absolute)

När du positionera ett element med egenskapen [absolute] händer flera saker som skiljer sig

radikalt från hur element placerar sig enligt det normala dokumentflödet. Det som tydligast

är märkbart är hur elementet tappar sin plats i dokumentflödet, dessutom fylls utrymmet av

vad som är placerat efter i ordningen (då den platsen nu är ”ledig”).

Nästa tydliga förändring är hur elementet krymper ner till storleken av sitt innehåll (höjd och

bredd blir detsamma som innehållet). Därför måste du lägga till egenskaperna [height] och

[width] om du vill kontrollera storleken.

Men den viktigaste förändringen är att det absolut placerade elementet tilldelas en unik

lagerposition [z-index] som skiljer sig från alla övriga element. Det innebär att den lätt kan

läggas över andra element, men det innebär även att om man har flera absoluta element,

lägger de sig automatiskt på var sitt lager. De placeras i den ordning som de är inskrivna i

html-dokumentet, det element som skrivits in senare/längre ner, får ett högre lagervärde (z-

index). Du kan ändra detta genom att ange ett värde för [z-index] på elementet, positiva

värden är längre upp/fram, negativa längre ner/bak.

Absolut position

Eftersom ett AP-element (absolut positionerat element) inte är en del av dokumentflödet,

har den en absolut position som utgår från horisontella och vertikala koordinater.

Men från vad utgår dessa koordinater? AP-elementet får sin position från sitt förhållande till

sin närmaste föräldra-elements position, men om föräldern är opositionerad (static) utgår

den från första element i hierarkin som är positionerad (dvs allt annat än static). Finns inget

positionerat element, utgår den från <body> (egentligen <html>-taggen), vilket i proncip blir

det samma som webbläsarfönstret.

Relativt positionerat element används ofta som förälder till ett absolut positionerat för

att styra dess position, då ett relativt positionerat element kan bete sig som och placera

sig som de som placerats efter dokumentflödet.

Du styr AP-elementets position med [top], [right], [bottom] eller [left], positivt värde är från

angiven kant/sida och inåt. Anges inget värde för dem, anses de ha värdet [auto], anges ett

numreriskt värde, är det dominerande över (används istället för och/eller påverkar) det

automatiska värdet. Om det blir en konflikt mellan värden (t.ex left-right; top-bottom), måste

en av dessa prioriteras, standarden anger att det är vänstra [left] och övre [top] som vinner.

{

Position: absolute;

Top: 10px;

Left: 25px;

}

Absolut och

odefinierat

värde ...

Saknas värde för top, right, bottom och left, anses de ha värdet [auto], men vad innebär det i praktiken? Jo att det absolut positionerade ele-mentet är placerat i förhållande till den position den skulle ha, om den inte tag-its ut ur dokument-flödet. Det innebär även att det ligger ovanför annat inne-håll som flyttats upp för att fylla tomrum-met efter elementet. Anger du ett värde för top, right, bottom eller left, tappar det absolut positioner-ade elementet den här egenskapen.

Page 34: Vi skapar en webbsida

Vi skapar en webbsida

34

Position (fixed)

Positionering med egenskapen [fixed] är en variant av absolut positionering, med den

skillnaden att fixerade element alltid utgår från webbläsarfönstret. Var försiktig så att inte

fixerade element placeras utan för den synliga ytan (till exempel med väldigt höga värden

eller negativa värden). Fixerade element påverkar aldrig webbläsaren att använda sig av

rullisten, även om man kan använda sig av rullister inom ett fixerat element.

Om man flyttar på webbsidans innehåll med hjälp av en rullist, kvarstår det fixerade

elementet; medan resten av innehållet förflyttas.

Vissa äldre webbläsare kan inte läsa fixerade element, för dem passar AP-element bättre.

Flytande position

(Float)

När vi talar om position kan vi inte undvika att tala om flytande position. Även om egen-

skapen [float] inte är en del av (attributet) position, så är det också ett sätt att positionera

innehåll. Det element som görs flytande tappar sin position i dokumentflödet, men samtidigt

placeras det flytande elementet i förhållande till flödet. Det kan göras flytande åt höger

[right] eller åt vänster[left]. Element som placerats före det flytande elementet påverkas

inte, men alla som kommer efter flödar/flyter runt elementet. Det flytande elementet

omvandlas till ett block-element (med allt det innebär) när det gjorts flytande, så man bör

alltid ange bredd [width] på flytande element (förutom bilder). Flytande element lägger sig

på rad efter varandra, utefter vilket utrymme som finns tillgängligt.

I exemplet ovan är det flytande elementet placerat först före alla andra element, sedan efter rubriken<h1> och sist efter texten.

{

Position: fixed;

Top: 10px;

Left: 25px;

}

Page 35: Vi skapar en webbsida

Vi skapar en webbsida

35

Flytande element och yta

En aspekt av flytande element som lätt glöms bort är hur de påverkar de element som flyter

runt det. Det märks tydligast hos block-elemet som tilldelats bakgrund eller andra

blockegenskaper som marginaler och kantlinjer. (inline) Innehållet i de ytor som omsluter det

flytande elementet reagerar på ytan hos flytande elementets, genom att knuffas undan. Alla

marginaler, kantlinjer och bakgrunder till den yta som omsluter det undanknuffade

innehållet kommer fortfarande reagera som att det flytande elementet inte är där.

Då det flytande elementet har avlägsnats från flödet, men fortfarande knuffar undan inline-innehåll,

breder bakgrunder, kantlinjer och marginaler hos block-elementen ut sig under det flytande elementet.

(clear)

Att flytande element funkar så att det man placerar efter (i html-dokumentet) omsluter det

flytande elementet istället för att det flytande elementet flyter upp genom ovanliggande

inline-element har en enkel förklaring. Annars flyter alla element med en flytande position

upp längst upp på webbsidan, vilket inte är önskvärt. För att om det vore så, skulle det kräva

att man blev tvungen att lägga till en massa extrakod, för att få de flytande elementen att

stanna på plats. Nu är det istället bara automatiskt att underliggande element flyttas uppåt

och omsluter det flytande elementet.

Men om du inte vill att det som ligger efter (nedanför) det flytande elementet skall flyttas

upp och omsluta runt elementet, kan du använda attributet [clear]. Attributet kopplas till ett

av de efterliggande elementen och stoppar då upp flödet (uppflyttandet av element).

Clear kan ha följande fyra (fem)värden: right, left, both och none.

Värdet right gör så att elementet lägger sig under den yttersta kanten av ett flytande

element som har värdet [ clear: right; ] som kommer före i html-dokumentet.

Värdet left gör så att elementet lägger sig under den yttersta kanten av ett flytande

element som har värdet [ clear: left; ] som kommer före i html-dokumentet.

Värdet both gör så att elementet lägger sig under den yttersta kanten av alla flytande

element som kommer före i html-dokumentet.

Värdet none, är detsamma som att inte ange ett clear-värde alls.

Clear kan även ha det femte värdet: Inherited, som innebär att den ärver egenskapen från

ett föräldraelement och får då det värde det elementet har för attributet clear.

Page 36: Vi skapar en webbsida

Vi skapar en webbsida

36

C 2.1. Meny under rubriken

Jag börjar med att beskriva vad som är lättast att åstadkomma, för här ska vi helt enkelt bara

låta dokumentflödet göra sitt jobb, vi lägger inte till några större förändringar. Jag utgår nu

från att du har en horisontell meny, då den passar bäst att placera under sidrubriken.

Placera din ”lista med länkar” efter <h1> (rubrik) men före <div>-taggen (satsytan).

1. <div id=”sidyta”>

2. <h1 …>Rubrik </h1>

3. <ul …>

4. <li><a …>Lnk txt </a></li> …

5. </ul>

6. <div …> Satsyta </div>

7. <div …> Sidfot </div>

8. </div>

Ja, det är så enkelt för att få dem i rätt ordning, nu läser webbläsaren in dem i den ordning

som de kommer att visas på sidan (om du inte på något annat sätt, till exempel positionering,

ändrat dokumentflödet).

Jag föreslår att du tar dig en liten titt igen på illustrationen över dokumentflödet i början av

kapitlet som en liten repetition innan du går vidare.

Page 37: Vi skapar en webbsida

Vi skapar en webbsida

37

D1 2.2. Meny bredvid sidinnehållet (absolut)

Lite svårare uppgift är att placera menyn på sidan, som alltid när man vill placera block-

element bredvid varandra. Vi ska titta på två varianter, i den första använder vi oss av absolut

position i kombination med relativt placerad förälder (det omslutande elementet). I den

andra tittar vi närmare på en lösning med att göra menyn flytande.

Grundproblemet dem mellan är detsamma, när vi har en vertikal meny (lista) knuffar den ner

efterföljande innehåll, då menyn upptar hela raden (det naturliga beteendet för block-

element). Men vi vill att delar av innehållet (satsytan) skall ligga bredvid menyn istället.

Vi ändrar därför menyn [#meny] från att vara opositionerad (static) till något vi kan

kontrollera, i det här fallet använder vi oss av absolut position.

1. #meny { position: absolut; }

Menyn tappar nu sin plats i dokumentflödet och underliggande element flyttar upp i dess

ställe. Men det blir inte riktigt som vi vill ha det, nu så ligger menyn över allt annat innehåll

och skymmer eventuellt innehåll.

Page 38: Vi skapar en webbsida

Vi skapar en webbsida

38

Menyn placerar sig dock fint utifrån sin tidigare plats i dokumentflödet. Vilket snabbt

kommer att ändras om du lägger till ett numreriskt värde för positionerings attributen top,

right, bottom eller left; även om värdet är noll [0].

Vi kan avhjälpa detta beteende genom att ge närmaste förälder (omslutande element) en

annan position än dess naturliga (static). Samtidigt vill vi inte ta den ur dokumentflödet; vi

gör det omslutande elementet därför till relativt positionerad.

1. #sidyta { position: relativ; }

Sådär, nu kan vi sätta igång och placera ut vår meny. Skriver vi in negativa värden (för top,

right, bottom och left) placeras den utanför sitt föräldra elements ytterkanter, positiva

värden flyttar den inåt över ytan. Prova med att ge menyn ett negativt vänstervärde (left)

som är lika stort som menyn är bred; vips så har menyn placerats bredvid innehållet.

1. #meny { position: absolute; left: -70px; }

Page 39: Vi skapar en webbsida

Vi skapar en webbsida

39

D2

Meny bredvid sidinnehållet (float)

I den här varianten gör vi menyn till ett flytande element och låter det andra sidinnehållet

flyta på plats, vi kan lätt låta den flyta åt vänster eller höger. Se till att menyn är placerad före

det innehåll som skall läggas sida vid sida med menyn.

1. < … id=”rubrik> … </h1>

2. <ul id=meny”> … </ul>

3. <div id=”satsyta”> … </div>

4. <div id=”sidfot”> … </div>

Sen gör vi menyn flytande (se till så du inte även har angett absolut position till menyn).

1. #meny { … float: left; … }

Efterföljande element flyttar nu upp och omsluter/fyller snyggt upp högersidan, men

bakgrunden lägger sig även bakom menyn.

Men vad händer om det man vill ska ligga jäms med menyn upptar lika stor yta som menyn i

sig gör? Vi prövar genom att ta bort all text från den ytan vi kallat [satsyta].

Flytande element problem

När du börjar anvä-nda dig av flytande element i din design, kommer du snabbt märka att det kan dyka upp underliga skillnader mellan oli-ka webbläsare, jag har valt att undvikia att ta upp det här.

En sådan sak kan vara att bakgrunds-bilder och även text försvinner plötsligt, trots att de borde vara där, för att sedan dyka upp igen när man laddar om sidan.

Du undviker det här problemet genom att ge det försvinnande elementet en posit-ion, förslagsvis [posit-ion:relative;].

Det kan även vara problem med hur marginaler runt ett block-element beter sig brevid ett flyt-ande element, hur det kan bli oförut-sedda skillnader i hur mycket elementet knuffas ifrån det flyt-ande elementet.

Lösningen här är att sätta marginalerna på de flytande ele-menten, inte de statiska.

Ytterligare ett prob-lem kan uppstå när man har flera flyt-ande element efter varandra. Dels kan de lägga sig på bredd, fastän det inte finns utrymme för det, eller att de fortsätter ut utanför ett om-slutande element.

Prova att ge det omslutande elemen-tet en given vidd [width]. Kanske inte riktigt vad vi kan kalla önskvärt resultat.

Det som är placerat före det

flytande elementet påverkas

inte.

Det som är placerat efter

påverkas

Page 40: Vi skapar en webbsida

Vi skapar en webbsida

40

Vi ska se till att sidfoten aldrig flyttar upp, utan alltid stannar nedanför det flytande elementet.

Vi gör det genom att lägga till egenskapen [clear] till sidfoten, med värdet [left] eller [both].

1. #sidfot { … clear: left; … }

Nu lägger sig sidfoten snyggt under det flytande elementet!

Men [satsyta]:n fyller inte tommrummet, då den fortfarande får sin storlek utifrån sitt innehåll.

Därför ska vi lägga till en egenskap för höjd [min-height] på den ytan, så att den alltid minst

fyller upp en viss yta. Här väljer jag ett numreriskt tal som motsvarar höjden på menyn. Den

här höjdegenskapen hindrar inte heller att ytan expanderar, den ger bara ett minsta värde…

1. #satsyta { … min-height: 140px; … } /* samma som menyn */

Om du inte vill att bakgrunden till det omslutande elementet skall krypa in under det flytande

elementet lägger du till marginal (i det här fallet [margin-left])på det uppflyttade elementet.

Sådärja! Nu är vi färdiga … nu ska vi bara fylla sidan med innehåll!