Strukturera dina CSS-filer i tre steg

När ens sida växer och byggs ut eller förändras så växer också kaoset i CSS-filerna. Det finns flera olika lösningar hur man kan organisera upp sina filer och CSS-kod men det finns ett sätt jag riktigt har fastnat för.
css_i

1. Dela upp dina filer

Dela upp filerna i flera mindre delar. Importera en main.css fil och därifrån använd @import url(annanfil.css); för att öka översikten. Personligen väljer jag att dela upp min CSS i tre olika delar: layout, basic och typo. Layout.css lägger jag allt som påverkar eller är involverad i kontruktionen av sidan. basic.css är främst omdefinerade HTML-taggars utseende och placering (till exempel a, body, div, p etc) och typo.css hanterar all typografi och text.

Fördel
+ Bra översikt
+ Mindre antal rader
+ Perfekt för större sajter

Nackdel
- Ökar antalet HTTP-requests från ett till fyra.

2. Använd shorthands

Att använda förkortningar i sina CSS-filer är ett mycket bra sätt att öka läsbarheten när man väl lärt sig. De vanligaste är margin/padding som kan förkorta fyra rader till en rad genom att skriva margin: top right bottom left. Men det många glömmer bort är font och background:
[code language="css"]font-size: 0.5em;
font-family: arial, sans-serif;
font-weight: thick;
line-height: 0.7em;

Kan förkortas till font: thick 0.5em/0.7em arial, sans-serif.

Fördel
+ Mindre rader
+ Högre läsbarhet
+ Mindre risk för dubletter

Nackdel

- Kan ta lite tid innan man fullt ut greppat

3. CSS möjligheter till kommentarer kan utnyttjas

När filen börjar uppgå till 200 rader så kan det kännas lönlöst att hitta dit man ska. För att lösa problemet skapar jag ett slags index i början av varje fil samt ett övergripande index i main.css.
[code language="css"]*
*    MAP:
*    _____LAYOUT
*    _____NAV
*    _____GENERIC
*/

Sen ovanför varje sektion sättes en kommentar med:
[code language="css"]/*
*     ______LAYOUT
*/

Använder man systemet blir det enklare att ögna igenom och snabbt hitta det man söker.

Fördel
+ Hittar dit man ska
+ Känns mer strukturerad

Nackdel
- Tar utrymme
- Tar tid

Finns det andra tips hur man ökar hanteringen av CSS-filerna?

Typografera dina förkortningar med CSS och PHP

Enligt Typografisk Handbok (Hellmark) så kan versala ord se ut som fläckar i din text. Detta kan avhjälpas genom att spärra dem smått och sätta de i kapitäler. Jag tänkte gå igenom ett snabbt tips hur man enkelt kan lösa detta med hjälp av PHP och CSS.

Flera versaler efter varandra i löpande text blir ofta påträngande […]. Det kan avhjälpas genom att man sätter versalerna en punkt mindre än den övriga texten och spärrar dem lite […].

För det första är denna koden ganska generell och det reguljära uttrycket är på inget sätt optimerat då mina kunskaper inom det fortfarande är ganska låga, det finns säkert en smartare sträng som löser uppgiften.
Först antar vi att din text är i en string:
[code language="php"]$str = "Hej en förkortning kan se ut som detta CSS eller HTML-kod samt PHP";

Sen behöver vi reguljära uttryck och en replace på de förkortningar som finns:
[code language="php"]$pattern = array(
"/s([A-Z][A-Z0-9]{2,})s/",
"/s([A-Z][A-Z0-9]{2,}+)/"
);
$replace = array(
" $1 ",
" $1"
);
$str = preg_replace( $pattern, $replace, $str);

Detta byter ut alla förekomster av förkortningar med tre tecken eller mer i den löpande texten. Att vi har två reguljära uttryck är eftersom en förkortning kan finns som ensamstående, HTML, eller som del av ett ord, HTML-koden.

Det som är kvar är att sätta en stilmall på den nya layouten:
[code language="css"]abbr {
letter-spacing: 0.1em;
font-variant: small-caps;
font-size: 11px;
}

Att vi väljer dessa regler är ganska enkelt. En förkortning ska enligt Hellmark spärras med ungefär 10%, alltså blir det 0.1em. Istället för att använda versaler som ser konstigt ut så kan man istället använda kapitäler som har samma x-höjd som resterande text. Det kan också vara en bra idé att minska textstorleken med 1pixel (eller punkt i print) för att linjera texten ytterligare.

Sammanfattning

[code language="php"]$str = "Hej en förkortning kan se ut som detta CSS eller HTML-kod samt PHP";
$pattern = array(
"/s([A-Z][A-Z0-9]{2,})s/",
"/s([A-Z][A-Z0-9]{2,}+)/"
);
$replace = array(
" $1 ",
"
$1"
);
$str = preg_replace( $pattern, $replace, $str);

Och CSS:
[code language="css"]
abbr {
letter-spacing: 0.1em;
font-variant: small-caps;
font-size: 11px;
}

Fixa snyggare inputknappar med css

Internet svämmar över med olika lösningar för hur man modifierar utseendet på sina knappar. Många av lösningarna består rena länkar (a-taggar) som modifieras, vilket går emot hela syftet och funktionen med en knapp.

Resultatet kommer bli så här i alla moderna webbläsare:
style_button
Och så här i Internet Explorer 7:
style_button_ie
Ska ta upp hur man enkelt stylar en input med ren CSS och en liten ikon.

Först HTML koden där vi skapar två knappar, en submit och en reset, med id b1 och b2:
[code language="css"]

Ganska enkelt? Givetvis. Nu blir det lite mer kod när CSSen ska läggas till.

Först måste du hämta hem ikonerna, de jag använt finns här och här. Båda är släppta under GPL så det är fritt att använda dem.

Vi sätter för det första en ny border vilket tar gör att den gamla layouten försvinner. En padding sätts också och så att knappen blir den storleken vi är ute efter. Om ikonen känns lite malplacerad så justeras den enkelt med background-position:.

Sen kommer fusket, eftersom Explorer inte stödjer border-radius (varken version 7 eller 8), så lägger vi till -moz och -webkit för de som använder Mozilla eller WebKit-baserad läsare.
[code language="css"]
#b1, #b2 {
padding: 3px 12px 3px 27px;
border: 1px #ccc solid;
background: #f9f9f9 url(button_ok.png) no-repeat center left;
background-position: 7px;

color: #333;
font-family: Helvetica, sans-serif;
font-size: 11px;
font-weight: bold;

-moz-border-radius: 10px;
-webkit-border-radius: 10px;
}
#b1:hover, #b2:hover {
background-color: #f5f5f5;
}
#b2 {
background: #f9f9f9 url(button_cancel.png) no-repeat center left;
background-position: 7px;
}

Sådär, nu ska du ha det färdiga resultatet och få alla fördelar med en riktig input utan att behöva hantera javascript, konstiga hack eller andra element.