pure CSS semi transparent backgrounds
A sweet tip I got from one of my collegues: Creating semi transparent backgrounds without using extra HTML:
If you add an alpha channel to an element all child elements inherit the alpha channel so black texts won't be black after applying the style. We can fix this by adding a an extra element to the dom and position it behind the element we want to style and give that an alpha channel but ... we can make this work without any extra elements as well and here's how!
html:
<div class='semi'><p>This site is awesome!</p></div>
css:
.semi {
background-color: rgba(0,0,255,0.5);
}
This works great except for our beloved Internet Explorers below version 9 so let's add the magic:
ie8 and below css:
.semi {
background: transparent;
filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#0000ff50,endColorstr=#0000ff50);
}
Yes you add it as a gradient filter! from starting color #0000ff at 0.5 opacity to #0000ff at 0.5 opacity
Pure CSS buttons
A small entry just because this little script is so pro it will blow your mind!
Remember the days where you needed to use a sliding door principle or a piece of javascript to make buttons with rounded corners, dropshadows and gradients? Those days are still here but wait! There is a solution! let's take a look at it:
- Rounded corners? Most browsers* support CSS3 border-radius!
- Dropshadows? Most browsers* support CSS3 box-shadow (even with alpha channel!)
- Gradients? Most browsers** support CSS3 gradients!
* All modern browsers except IE8
** All modern browsers except IE9 and IE8
So ok, without looking at IE we can turn a simple anchor tag into a nice looking button by just using CSS; for IE we need some magic; this is where your trusty other front-end developers come in and Jason Johnston developed CSS3PIE just for this; take a look at the site by clicking the name or by following this link to CSS3PIE.
Take these small snippets to get things started:
html:
<a href="http://www.logarie.nl/blog/" class="button">This is a link to lo-ga-rie</a>
css:
.button {
display: inline-block;
position: relative;
border: 1px solid #666;
padding: 5px 10px;
text-align: center;
-webkit-border-radius: 8px;
-moz-border-radius: 8px;
border-radius: 8px;
-webkit-box-shadow: #aaa 0px 2px 3px;
-moz-box-shadow: #aaa 0px 2px 3px;
box-shadow: #aaa 0px 2px 3px;
background: #f00;
background: -webkit-gradient(linear, 0 0, 0 bottom, from(#ff0000), to(#00ff00));
background: -moz-linear-gradient(#ff0000, #00ff00);
background: linear-gradient(#ff0000, #00ff00);
-pie-background: linear-gradient(#ff0000, #00ff00);
behavior: url(/PIE.htc);
}
Make sure the path to PIE is working and there you go, a nice looking button while only using html and css! Why should we care about this?
Older techniques like the sliding door are adding unused DOM elements to the html; which slows down page rendering, isn't the best for SEO and could be breaking the accesibility of your site. Techniques like I explained with fancybutton is only working with javascript enabled browsers and thus not fully complient with the accesibility standards. This technique is just using that what is provided by the browser; with a gracefull fallback (background: #f00;) in case nothing else works. Creating hover and visited states of this button is as easy and you think; just a few extra lines of CSS; don't forget to include PIE in those rules!
Eerste stapjes in de wondere wereld van mobiele websites
Toen ik werd getracteerd op een url met een website die gewoon heel netjes rendere op het schermpje van mn Hero dacht ik: daar wil ik meer van weten!
Een eerste stap was natuurlijk de wordpress addon die er zorgt dat deze website het zelfde doet; maar zelf uitzoeken je weet zelf :)
Ok wat verwacht ik op het moment van een mobiele browser wil ik me er druk om gaan maken:
- Enige vorm van HTML4 / xHTML ondersteuning
- Enige vorm van CSS; minimaal 1.0
- Javascript?
WAP browsers vallen wat mij betreft af nu aangezien ik me nu vooral focus op wat er anders is qua html opmaak en CSS gebruik, WAP sites zijn gewoon een eigen niche (die uitsterft).
Eigenlijk hou ik het nu dus op "smartphones" en dus op:
- Windows Mobile 6.1+ (brakke ie6 achtige render engine)
- (Symbian) -- kan ik nu niet zelf testen
- Android (Webkit)
- iPhone (Webkit)
De 3 doelgroepen die ik kan testen bieden tegenwoordig allemaal browsers aan die zelf kunnen switchen tussen de normale en de mobiele website. Sommige mensen zullen het fijner vinden om je echte website te zien en zelf te pannen en zoomen, anderen weer niet; dus die keuze laten we aan de gebruiker zelf; maar bieden in eerste instantie wel een eigen website aan. Hoe gaan we dat doen?
Webserver:
Je kan 2 paden bewandelen: Alles client-side of Server-client. Ik vind hier persoonlijk Server-client mooier werken; de HTML die we uiteindelijk aan de browser geven is helemaal geoptimaliseerd en zo minimaal mogelijk en dus minder bytes om te downloaden terwijl je trein een tunnel inrijdt en 3G wegvalt.
Uit het request object wat je binnenkrijgt op de server kan je destileren welke user-agent gebruikt wordt om de pagina te bekijken, aan de hand daarvan kan je redirecten, een andere masterpage aanbieden, een response variablele aanpassen; wat jij wilt ;)
Voor de bovenstaande browsers moet 1 van de volgende strings in je user-agent staan:
- "iphone", // Apple iPhone
- "ipod", // Apple iPod touch
- "aspen", // iPhone simulator
- "dream", // Pre 1.5 Android
- "android", // 1.5+ Android
- "cupcake", // 1.5+ Android
- "Windows CE" //windows mobile
Client-side:
Om voor alle platformen het zelfde aan te bieden maken we gebruik van een 1 kolom structuur; een content item is altijd 100% breed
< !DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.2//EN" "http://www.openmobilealliance.org/tech/DTD/xhtml-mobile12.dtd">
<_html_>
<_head_>
<_title_>Mobiele test site
<_body_>
<_h1_>Welkom op de mobiele test site
<_h2_>Content item titel
<_p_>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus semper laoreet pharetra. Donec malesuada nulla at est dictum viverra. Proin scelerisque orci ut massa dapibus viverra. Praesent adipiscing aliquam dapibus. Pellentesque at nibh sem, et dictum diam. Vivamus vel ante vitae ligula tempor auctor at vel ante. In lacinia quam vel odio placerat tristique. Vestibulum eu diam velit, vitae eleifend neque. Aenean nunc velit, tristique egestas tempus a, dapibus id mauris. Aenean pulvinar imperdiet sem sed vestibulum. Curabitur consectetur consectetur mi id luctus.
<_h2_>Content item titel
<_p_>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus semper laoreet pharetra. Donec malesuada nulla at est dictum viverra. Proin scelerisque orci ut massa dapibus viverra. Praesent adipiscing aliquam dapibus. Pellentesque at nibh sem, et dictum diam. Vivamus vel ante vitae ligula tempor auctor at vel ante. In lacinia quam vel odio placerat tristique. Vestibulum eu diam velit, vitae eleifend neque. Aenean nunc velit, tristique egestas tempus a, dapibus id mauris. Aenean pulvinar imperdiet sem sed vestibulum. Curabitur consectetur consectetur mi id luctus.
* Sorry voor de incorrecte HTML maar anders krijg ik niet alle tags zichtbaar ...
.post {
-webkit-border-radius: 8px; /* rounded corners in webkit */
-moz-border-radius: 8px; /* rounded corners in firefox */
background-color: #fff;
padding: 10px;
margin-bottom: 12px;
position: relative;
margin-right: 10px;
margin-left: 10px;
border: 1px solid #b1b1b1;
overflow: hidden;
}
Maar hoe breedt is dat dan? iPhone is makkelijk dat is minimaal 320px (portrait mode); Android was makkelijk maar met de komst van Android 1.6 ondersteund Android ook meerdere resoluties zoals WindowsMobile dat al doet. Met onderstaande 2 meta tags geven we aan de browser aan wat er verwacht mag worden:
<_meta name="viewport" content="width=device-width, height=device-height, initial-scale=1.0"> <_meta name="MobileOptimized" content="240" />
* Sorry voor de incorrecte HTML maar anders krijg ik niet alle tags zichtbaar ...
Zo, nu hebben we een 1 kolom template die altijd 100% breed is op wat voor resolutie we ook kijken, op wat voor OS.
Uiteindelijk krijg je dan dit te zien:

Lo-Ga-Rie Mobile
Windows Mobile heeft standaard een zeer brakke browser die iets weg heeft van IE6 maar dan nog erger. Het is wel erg handig om je site eerst te bekijken in IE6 voor je de emulator of je telefoon aanslingert, Veel voorkomende problemen die je hebt in IE6 heb je namelijk ook in Windows Mobile IE. Gebruik ook vooral geen png files, die doen het leuk op je iPhone, Android en Windows Mobile 6.5 maar Windows Mobile 6.1 heeft een png fix nodig. Of het überhaubt werkt weet ik niet eens maar het includen en uitvoeren van een pngfix neemt zo veel tijd in beslag dat het echt niet slim is om dit te proberen. In dit geval kan je, als je dan toch echt png's wilt gebruiken voor IE een andere CSS aan te spreken. Een goed idee hier is bij het serveren van je pagina je server al een id of class op de body te zetten.
Meer later
Iframes die meegroeien met de content / font-size
Stel je maakt een site met een iframe waarvan de content d.m.v. zoom buttons kan veranderd worden.
Men neme:
- buttons om de font-size aan te passen
- een iframe met content
- een paar regels script
Om initieel de iframe de juiste hoogte te geven kan je het volgende gebruiken
$('iframe').load(function(){
this.style.height =
this.contentWindow.document.body.offsetHeight + 30 + 'px';
});
De 30 extra px is voor webkit browsers.
Als je de font-size knopjes indrukt dan kan je in je click event de volgende code gebruiken om iframe mee te laten scalen:
var iframeDoc = $("iframe").contents();
iframeDoc.find("body").attr("class", $(this).attr("class")); // $(this) is de font-size knop met een class 'normal' of 'big' of 'bigger'
$("#myContent").css("height", iframeDoc.find("body").height() + 30);
Dit werkt goed als je de CSS zo opbouwd dat alle font-sizes em based zijn dan kan je via
body.normal {
font-size: 100%;
}
body.big {
font-size: 120%;
}
body.bigger {
font-size: 140%;
}
De font-size van het document en de iframe in 1x aanpassen.

