Placera objekt vertikalt i block-element

Så här kan man göra för att ange vertikal position på text och bild inuti ett block-element. Man lägger två div runt om varandra och får dem att uppföra sig som tabell respektive tabell-cell.


HTML och CSS

<style type="text/css">
#outer{
width:300px;
height:300px;
border:1px solid #ccc;
padding:5px;
display: table;
position: static;
}
#inner{
display: table-cell;
vertical-align: middle;
position: static;
text-align:center;}
</style>
<div id="outer">
<div id="inner">
<img src="http://www.codeodyssey.se/upload/resource/blog/ufo_light.jpg" alt="ufo light">
</div>
</div>

Att få innehåll att placera sig vertikalt enligt box-modellen har alltid varit lite krångligt. Läs mer på Jakpsatweb.cz där jag hittade lösningen. Finns även länkar till fler som försökt.

By Jesper Lind

Höstens CSS Reboot är igång

http://www.codeodyssey.se/upload/resource/blog/cssrebootbegins.jpg

Yes! Jag har äntligen fått till mitt bidrag till höstens CSS reboot. En tillställningar som knyter samman hundratals webbutvecklare från hela världen och uppmuntrar dem att kollektivt lansera nya versioner av sina webbplatser.

Det nya utseendet på hemsidan är alltså mitt bidrag till årets reboot. Om ni vill se hur den såg ut innan, så kan ni se en skärmdump från när jag bytte design senast.

Processen
Jag är själv ingen webbdesigner utan huvudsakligen programmerare. Jag kan absolut inte tävla med många av de andra deltagarna i "tävlingen". Jag ville skapa en standardsenlig webbsida utan några som helst CSS-hack som min förra version var fylld av. Var rätt så trött på det gamla utseendet och ville ha förändring.

Jag ville ha rundade hörn på en del ställen och till detta använde jag det förträffliga Nifty Corners Tube. Kunde dock inte göra yttre transparens med Nifty CUbe. Det ville ha på de yttersta ramarna. Så jag kompletterade med metoden som finns på 456bereastreet.com.

Inget stöd för IE6
Jag bestämde mig tidigt att inte stödja IE6 eller tidigare versioner av Internet Explorer. Framför allt ville jag prova halvgenomskinliga PNG på en del ställen. Så om du inte ser min logga överst på sidan eller om ramarna ser konstiga ut så använder du antagligen IE6.

Fler rebooters
Det finns många fina webbplatser som deltagit i år, jag kommer uppdatera detta stycket allt eftersom jag hittar fler trevliga bidrag.

Jag gillar bidraget från 32framespersecond.com har gjort ett vacker collage med många mönster.

Den tyska designer-byrån Mein Brandenburg har gjort ett absolut mästerverk. Väldigt fina bilder i galleriet också.

Gillar också Edoardo Sabadelli som är utveckare och har gjort en trevlig upplyftning.

Weknowhtml.com har gjort en stilig design med en groda som maskot.

Gradient Dropshadow Curve är ljus och fin med en häftig AJAX sökruta.

By Jesper Lind

Den förvirrande cursor:hand deklarationen

Att få fram en hand som markör på alla webbläsare är något som länge förvirrat mig hur man gör. Jag hade helt enkelt inte läst på ordentligt och ibland vad den någon webbläsare som markören inte ändrades alls på mina webbplatser. Nu har jag fått klarhet i det hela cursor:hand är inte någon CSS-standard alls utan ett påhitt från Microsoft. Istället ska det standardiserade cursor:pointer användas. Cursor:pointer fungerar dock bara i den nyare IE6 och IE7 och inte i IE5 eller IE5.5. Om man har besökare som fortfarande använder så gamla browers så kan man använda en dubbeldeklaration.

element { cursor: pointer; cursor: hand; }

Ordningen på deklarationerna är viktiga för att moderna läsare ska ignorera det sista som är felaktigt. De gamla versionerna av IE kommer då också att visa en hand som markör. Att använda en sådan deklaration kan ju dock generera CSS fel vid validering så jag väljer nog att lämna de gamla IE versionerna åt sitt öde och bara använda cursor:pointer i framtiden.

Läs mer om stilar på markören
http://www.quirksmode.org/css/cursor.html

By Jesper Lind

Så får du dina länkar att synas

Det finns flera sätt att göra länkar synliga bland textstycken. Här under visar jag några av dem.

This is a link right here but you couldn't see it right? Perhaps we should make them appear with dots beneath them like this or in another color. The yellow shade is a bit too pale, you can hardly see it can you? Or should all links be in bold, inverted or perhaps underlined? Which is your favorite link design?

CSS for the links above

<style type="text/css">
a.noStyle, a.noStyle:link, a.noStyle:active, a.noStyle:visited { color: #000; text-decoration:none; }
a.noStyle:hover { }

a.dotted, a.dotted:link, a.dotted:active, a.dotted:visited { color: #000; text-decoration:none; border-bottom:1px dotted #333; }
a.dotted:hover { border-bottom:1px solid #000; }

a.invert, a.invert:link, a.invert:active, a.invert:visited { color: #fff;background-color: #000; text-decoration:none; border-bottom:1px dotted #333; }
a.invert:hover { border-bottom:1px solid #000; }

a.yellow, a.yellow:link, a.yellow:active, a.yellow:visited { color: #E2D459; text-decoration:none; }
a.yellow:hover { text-decoration:underline;}

a.underlined,a.underlined:link,a.underlined:
active,a.underlined:visited{text-decoration:underline;}
a.underlined:hover { text-decoration:underline;}</style>

By Jesper Lind

Ha konsekvens på dina länkar

Jag läste en notis på Användbarhet.se som jag instämmer med. Man utforma sina länkar konsekvent och inte blanda understrukna och icke-understrukna länkar. Detta lägger ett alltför tungt tolkningsjobb på användaren.

Menyer och länkar bör vara intuitiva och man ska förstå vad som går att klicka på utan att behöva testa allt. Understrykningar är ett bra sätt eftersom vi är så vana med att länkar ser ut så. Annars är ett annat bra sätt att ange länkar i en speciell utstickande färg.

By Jesper Lind

Rundade hörn med CSS

Jag har tidigare skrivit om hur man kan göra rundade hörn på html objekt utan att använda bilder. I den posten hänvisade jag till Nifty Corners.

Nu har Alessandro Fulciniti som ligger bakom tekniken släppt en ny uppdaterad version som han kallar Nifty Corners Tube. Nu kan man även skapa kolumner knappar och hela layouter med scriptet. Funktionaliteten finns i ett javascript som man kan ladda ner gratis och är släppt under GNU GPL licens.

Jag tycker Nifty Corners Tube är ett väldigt bra skript som jag själv har testat. Det finns dock mängder av andra tekniker och SmileCat.com har sammanställt en fin lista på andra sätt att göra rundade hörn.

By Jesper Lind

Ange relativa fontstorlekar på webben

Jag har tidigare skrivit om vilka typsnitt som är säkra att använda på webben om man vill ha samma resultat på alla olika system. Nu tänkte förklara lite om hur man anger storleken på typsnittet. I CSS har man följande storlekar att välja bland.

* px - pixels, bildskärmspunkter * pt - points, typografiska punkter * pc - picas, typografiska "punkter" * mm - millimeter * cm - centimeter * in - inches, tum * em - typografisk fyrkant * ex - x-höjd

Glöm punkter på skärmar
För det första, glöm bort att visa typsnitt i punkter eller picas. Folk är vana vid att arbeta med punkter i program som Word och Photoshop, och sedan felaktigt använt det för att beskriva textstorlekar på webben. Dessa bör inte användas för skärmvisning. Centimeter, Millimeter och Tum bör också undvikas. Den enda gång man ska ange storlek i punkter är i separata stilmappar för sidor som ska skrivas ut på en skrivare.

Fasta enheter
cm - centimeter
mm - millimeter
in - tum - 1in = 2.54 cm
pc - picas - 1pc = 12 pt
pt - punkter - 1pt=0.353 mm

CSS referens för värden

Pixlar eller em?
Pixlar är ju den naturliga enheten på skärmar och lämpar sig väldigt bra. När det gäller typsnitt har det länge vart populärt att ange storleken i pixlar. Oftast vill designers ha lite mindre text och väljer något mellan 9-11 pixlar på brödtexten. En nackdel med detta är att i vissa webbläsare går det då inte att ändra storleken genom inställningarna (t ex IE6).

Relativa storlekar är bästa valet
Fler och fler webbplatser inser nu fördelarna med att ange typsnittstorlekarna i em eller % istället för i fasta pixlar. Vad betyder då em? Den typografiska fyrkanten är olika stor beroende på vilket teckensnitt man använder. Den utgår nämligen från bokstaven M i valt teckensnitt. Detta innebär alltså att måttet em varken är beroende av skärmens upplösning eller vilket operativsystem man använder. Det som styr är i stället besökarens egna inställningar för teckenstorleken.

Ett exempel
I följande exempel visas all text i 75% av användarens standardinställning. Radhöjden är 133% för att få in lite luft mellan raderna. Rubriken h3 visas i 200% i relation till det värde vi angett i body.

body { font:0.75em/1.3em Arial, Helvetica, sans-serif; }
h3 {font-size:2em;}

Mer läsning
http://www.gilbertson.nu/019.htm
http://www.jonasweb.nu/sidor/stylesheets/font.html

By Jesper Lind

Säkra typsnitt på webben

När man gör html design och anger vilka typsnitt man vill använda brukar man ange några olika alternativ. Alla plattformar som PC, Mac, Linux och Unix har ju alla olika standardfonter installerade. Man anger fonter i CSS enligt följande. Sans-serif är ett generellt samlingsnamn för att ett typsnitt utan "fötter" ska väljas.

body { font:0.75em/1.3em Arial, Helvetica, sans-serif; }

Om man vill att samma font ska visas för alla besökare blir man väldigt begränsad. Hittade en sida på nätet som skriver att de följande är de vanligaste webb-säkra fonterna.

* Arial / Helvetica
* Times New Roman / Times
* Courier New / Courier

Andra alternativ som brukar fungera bra är:

* Palatino
* Garamond
* Bookman
* Avant Garde

Några fonter som fungerar bra på Windows and MacOS men inte Unix+X är:

* Verdana
* Georgia
* Comic Sans MS
* Trebuchet MS
* Arial Black
* Impact

By Jesper Lind

Använda Repeater istället för Menu komponenten

Jag har börjat använda Web.sitemap flitigare i mina applikationer. asp:Menu komponenten är ju smidig eftersom den är så lätt att binda till en SiteMapDataSource och menyn ritas fram automatiskt.

Men jag stötte dock på en del problem som jag inte vet hur man kan lösa. För det första genererar den onödigt mycket kod med mängder av nästlade tabeller och det är väldigt svårt att lista ut hur man ska få den att uppföra sig precis som man vill.

Sen ville jag ha streckade linjer som separatorer och använde StaticBottomSeparatorImageUrl för att ange min bild. Kunde dock inte komma på hur man kan göra för att bara ha dem imellan menylänkarna. Inte före eller efter med andra ord.

Efter ett stunds sökning på nätet gav jag upp. Hittade istället en djupgående artikelserie på www.devx.com där nio problem med sajt navigation tas upp. Där hittade jag ett tips om hur man kan binda ihop en Repeater till sin SiteMapDataSource istället för Menu kontrollen. Men hjälp av Repeatern kunde jag placera separator koden där jag ville samt att få hela menyn att renderera snyggare utan massa överflödiga tabeller.

Repeatern

<table width="100%" cellpadding="0" cellspacing="5px">
<tr>
<td class="menuBack">

<asp:Repeater ID="repeaterMenu" runat="server" DataSourceID="smds" OnItemDataBound="repeaterMenu_ItemDataBound">
<ItemTemplate>
<asp:PlaceHolder ID="phMenuSeparator" runat="server" />
<a class="menu" href='<%# String.Format( ((SiteMapNode)Container.DataItem).Url)%>' target='_top'><%# String.Format( ((SiteMapNode)Container.DataItem).Title)%></a>
</ItemTemplate>
</asp:Repeater>
</td>
</tr>
</table>

<asp:SiteMapDataSource ID="smds" ShowStartingNode="False" runat="server" />

Koden bakom

//Räknare för att hålla reda på vilken länk man är på i menyn
int intCounter = 0;

public void repeaterMenu_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
try
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{

//Lägg bara till separator ifall efter vi passerat första meny objektet
if (intCounter > 0)
{
PlaceHolder phMenuSeparator = (PlaceHolder)e.Item.FindControl("phMenuSeparator");
phMenuSeparator.Controls.Add(new LiteralControl(" &lt;div class='menuSeparator' &gt;&lt;/div&gt;"));
}
intCounter++;
}
}
catch (Exception objException)
{
Trace.Write("repeaterMenu_OnDataBinding() Fel!", objException.Message);
}
}

Css

.menuBack
{
border:1px solid #cccccc;
background-image: url('../images/menu_back.gif') ;
background-repeat:repeat-x;
background-position:top;
height:1.6em;

}

.menuBackSelected
{

background-image: url('../images/menu_back_selected.gif') ;
background-repeat:repeat-x;
background-position:top;
display:block;
float:left;
height:110%;
margin:0;
color:#000;
}

.menuSeparator
{
background-image: url('../images/menu_separator.gif') ;
background-repeat:repeat-y;
display:block;
float:left;
margin:0;
height:110%;
width:1px;

}


a.menu
{
padding: 0.2em 10px 0.2em 10px;
font-weight:bold;
text-decoration: none;
color: #fff;
display:block;
float:left;
}

a.menu:link
{
color: #fff;
}

a.menu:visited
{
color: #fff;
}

a.menu:hover
{

color: #fff;
text-decoration: underline;}

a.menu:active
{
color: #fff;
text-decoration: underline;}

a.menuselected
{
padding: 0.2em 10px 0.2em 10px;
font-weight:bold;
color: #000;
text-decoration: none;
display:block;
float:left;
}

a.menuselected:link
{
color: #000;
}

a.menuselected:visited
{
color: #000;
}

a.menuselected:hover
{
text-decoration: underline;}

a.menuselected:active
{
text-decoration: underline;}

By Jesper Lind