Effektiviser CSS og (X)HTML

Denne artikkelen handler litt om hvordan du kan effektivisere CSS-en din litt. Bak uttrykket å effektivisere mener jeg og styre mest mulig igjennom CSS og kalle frem til minst mulig klasser og id-er. På den måten kan du styre mye mer igjennom CSS og endre til et totalt nytt design uten å måtte knote noe særlig / ikke i det hele tatt med (X)HTML kodene dine. Artikkelen sier også litt om hvordan du kan endre stil på forskjellige elementer. For at du skal dra noe særlig stor nytte av teksten, burde du kunne noe grunnleggende CSS og litt HTML, men det er ikke noe krav. Du kan sikkert lære litt basic CSS ut av dette og.

Forskjellen mellom class og id

Jeg kan forklare litt om hva forskjellen er mellom class="" og id="". For at det skal funke bra i alle nettlesere, d.v.s. validere, så skal en id være unik. Den skal altså ikke kalles på flere enn en gang for hvert dokument. Så har du noe som er unikt på siden så skal det ha id="". Eksempel på dette er en header-, wrapper-, eller menydiv (les: divisjon).

Da kan du selv tenke deg når class skal brukes; når det er et element som forekommer flere ganger per dokument. Eksempel på dette er headers (h1, h2 osv) eller divisjoner med innhold.

Mindre klasser og id-er

Jeg kommer med en oppfordring som gjør at det går mye enklere om du skal skrive en lang side i (X)HTML. Bruk mindre klasser og id-er på elementer/tags. Om du må skrive class="className" for hver h4 tag i et dokument kan det bli mye. Derfor kan du tenke litt langt og dele opp i ytre og indre oppdelinger. Med dette mener jeg at du har alltid et ytre hovedelement som ligger utenfor de som kommer ofte. Eksempel på hva jeg mener i html:

  1. <div id="wrapper">
  2. <div id="topper">
  3. <h1>My headertop number one</h1>
  4. <a href="http://mikaelb.net/#">topperlink</a></div>
  5. <div id="content">
  6. <h2>My sub-header1</h2>
  7. Here is my test text. It is very well put.
  8. And <a href="http://mikaelb.net/#">this is a regular link</a>.</div>
  9. <div id="contentTwo">
  10. <h2>My sub-header2</h2>
  11. Here is my test text under another division.
  12. <a href="http://mikaelb.net/#">This is NOT a regular link</a>.</div>
  13. </div>

Der har vi helt vanlig (X)HTML som et eksempel på hvordan du kan ha det. Og her kan du se et eksempel på hvordan mange ville ha hatt det:

  1. <div id="wrapper">
  2. <div id="topper">
  3. <h1>My headertop number one</h1>
  4. <a href="http://mikaelb.net/#">topperlink</a></div>
  5. <div id="content">
  6. <h2 class="header2">My sub-header1</h2>
  7. Here is my test text. It is very well put.
  8. And <a href="http://mikaelb.net/#">this is a regular link</a>.</div>
  9. <div id="contentTwo">
  10. <h2 class="header2">My sub-header2</h2>
  11. <p class="lookingDifferent">Here is my test text under another division.
  12. <a class="unusualLink" href="http://mikaelb.net/#">This is NOT a regular link</a>.</p></div>
  13. </div>

Og de mener kanskje de trenger en id/class for hvert element de skal endre på. Men det stemmer ikke! Det hadde tatt mye lengre tid om jeg skulle ha fortsatt slik som i andre eksempel om det hadde vært en stor side. I mitt eksempel helt øverst, tar det kortere tid å skrive og mulighetene for endring er mye, mye større.

Her er et eksempel på hvordan jeg kan style effektivt til øverste eksempel:

  1. div#wrapper {
  2. background-color: #CDCDCD;
  3. width: 500px;
  4. border: 1px solid black;
  5. }
  6. div#topper {
  7. width: 99%;
  8. margin: 0px auto;
  9. background-color: #F1F1F1;
  10. }
  11.  
  12. /* her vil alle headers bli satt til RØD tekst farge */
  13. h1, h2, h3, h4, h5, h6 {
  14. color: red;
  15. }
  16.  
  17. /* Her vil kun h1 i topper divisjonen endre farge */
  18. div#topper h1 {
  19. color: green;
  20. }
  21.  
  22. /* da har dere kanskje skjønt poenget, men tar noen eksempler til */
  23.  
  24. /*setter default link stil */
  25. a:link, a:visited {
  26. color: yellow;
  27. text-decoration: none;
  28. }
  29. a:hover, a:active {
  30. color: blue;
  31. text-decoration: underline;
  32. }
  33.  
  34. /*
  35. Men om jeg vil endre linkstilen kun under divisjonen
  36. med id contentTwo så kan jeg gjøre det slik:
  37. */
  38.  
  39. div#contentTwo a:link, div#contentTwo a:visited {
  40. color: #666666;
  41. text-decoration: underline;
  42. }
  43.  
  44. div#contentTwo a:hover, div#contentTwo a:active {
  45. color: #666666;
  46. text-decoration: none;
  47. }
  48. /* da gjelder ikke dette noen andre a-tags enn de i contentTwo */

Med det lille eksempelet tror jeg dere fatter hovedpoenget. Som dere kanskje skjønner vil dette skape mye mer dynamikk i sidene deres. Det blir lettere for dere å endre noe senere. Dere gjør dere selv en tjeneste for å si det slik!

Du ser formen, det er et ytre element som styrer hvordan det som er inni skal se ut. Formen av dette er, om det er id: #elementId tag-i-elementet { /*style */ }. Du kan gå inn flere nivåer og, om du har f.eks en a inni en divisjon og en a inni et paragraf kan du ha forskjellige med å bruke følgende: #elementId tag-i-elementet>inni-div-eller-p { /*style */ }. Der bruker du altså "krokodille" klemmen > som viser hva som er inni hva. Dette fungerer fint i Opera så langt som jeg vet, men er ikke sikker på om IE < = 6 (under og lik 6) takler dette. Men det er det jo bare til å teste ut!

Ellers tenkte jeg at jeg skulle gjennomgå noen gode måter å effektivisere styling av former. For dere som ikke er så inne på html, kan jeg gjøre et kjapt eksempel:

  1. <form> <input type="text" name="tekst" />
  2. <input type="text" name="tekst2" />
  3. <input type="checkbox" value="Check" name="tekst2" />
  4. <input type="submit" name="submit" value="Send" />

Om man skulle style disse kunne man bare ha brukt input { /*style*/ } ikke sant? Men hva om jeg skal style de forskjellige typene i forskjellige måter? Submit knappen skal for eksempel ha padding, og text skal ha en grå bakgrunn. Checkboxen skal ha svarte kanter. Hva gjør jeg? Jeg kunne alltids ha lagt en klasse på hvert enkelt element. Men det er jo ikke noe hendig om jeg skal forandre ting senere og ikke er det noe raskt om jeg skal skrive lange, lange former. Da har jeg noen tips til dere her. Dere kan bruke [] klemmer til å vise til særtegn/attributs i elementene!

Eksempel:

  1. input[type="submit"] {
  2. padding: 4px;
  3. font-size: 15px;
  4. }
  5. input[type="checkbox"] {
  6. border: 1px solid #000000;
  7. }
  8. input[type="text"] {
  9. background-color: #CDCDCD;
  10. }

Håper dere skjønner strukturen for dette siden jeg ikke kommer til å gå noe nærmere inn på det denne gangen.

Slutt

Da var det ikke så mye mer og skrive. Det gikk kanskje litt i harelabb, og ble litt mye eksempler. Men personlig liker jeg godt å lære igjennom å se på eksempler så slik ble det nå en gang. Gikk ikke innpå alt som var, men om jeg får spørsmål om å utdype noe så skal jeg gjøre så godt jeg kan i å forlenge og eventuelt forklare.

Håper dere lærte noe!

2 responser om “Effektiviser CSS og (X)HTML”

  1. Viktig å huske at attribute-selectors ikke støttes i IE, (input[type=text]) samt at du ikke trenger å bruke hermetegn rundt verdien i attributten.

    I tillegg er det stor forskjell mellom descendant selectors (eks: body p { } ) og child-selectors (eks: body > p { } ). I første eksempel vil _alle_ p elementer med body som overliggende element få egenskapene, mens i andre eksempel vil _kun_ de p-elementene med body som første overliggende element få egenskapene.


  2. Takk for de tilleggsopplysningene. Jeg var ikke klar over at du ikke behøvde "" rundt attributtene. At det ikke støttes i IE skriver jeg i artikkelen, men kanskje jeg ikke presiserer det godt nok. Samme med body > p og body p. Jeg forklarer kanskje forskjellen litt dårlig. Så takk for at du presiserer det.

    Vi får forresten håpe på at IE7 har støtte for attribute-selectors.


Legg igjen respons

Fyll ut alle felt markert med *

Brukerinformasjon
  1. Kan bruke følgende html: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong> og [html] [css], [mysql] og [php] Hold posten ren og fin!

    Siter valgt tekst

E-post-varsel uten å skrive kommentar.

Info om posten

Innlegget ble postet 08.03.06 17:39 og ligger under kategorien CSS / (X)HTML. Du kan abonnere på kommentarene ved å bruke RSS 2.0 feed. Du kan legge til kommenter, eller trackback fra din blogg/side.

Resurser

Arkiver

Metainfo


Siste Flickr-bilder

  • Commentsystem (20070308)
  • Ukraina Aksjonen 2006 (20070306)
  • Mikael Brevik blogg (20070306)
  • Mikael Brevik (20070306)
  • Brukerdefinert side - AVIS2 (20070306)
  • Brevik Webutvikling (20070306)
  • skyscraper
  • visittkort