Top Banner
CSS Technieken toegelicht Robin Poort, CEO & Co-founder, FinishJoomla Joomla!dagen Nederland, april 2011
85

CSS Techniques Explained

Jan 27, 2015

Download

Technology

FinishJoomla

Presentation given by Robin Poort at the Joomladay 2011 in the Netherlands
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: CSS Techniques Explained

CSS Technieken toegelicht

Robin Poort, CEO & Co-founder, FinishJoomla

Joomla!dagen Nederland, april 2011

Page 2: CSS Techniques Explained

Alle bestanden van de voorbeelden in deze presentatie zijn hier te vinden:

http://www.finishjoomla.com/media/css-technieken-toegelicht.zip

Page 3: CSS Techniques Explained
Page 4: CSS Techniques Explained
Page 5: CSS Techniques Explained

CSS technieken toegelicht

Een goede basis

Page 6: CSS Techniques Explained

CSS – Een goede basis

▪Cheatsheets

▪Resets

▪Frameworks

▪Shorthand CSS

▪Specificity + !important

▪Clear & clearfix

▪Code-commenting

Page 7: CSS Techniques Explained

Source: http://www.addedbytes.com/cheat-sheets/css-cheat-sheet/

Page 8: CSS Techniques Explained

Source: http://meyerweb.com/eric/tools/css/reset/

Page 9: CSS Techniques Explained

Source: http://960.gs/demo.html

Page 10: CSS Techniques Explained

div.example {

background-color: #FFFFFF;

background-image:

url(img.png);

background-position: left

top;

background-repeat: repeat-x;

border-width: 1px;

border-style: solid;

border-color: #000000;

margin-top: 10px;

margin-right: 10px;

margin-bottom: 10px;

margin-left: 10px

padding-top: 10px;

padding-right: 15px;

padding-bottom: 20px;

padding-left: 15px;

}

div.example2 {

font-family: Arial, sans-

serif;

font-size: 12px;

line-height: 1.5em;

font-weight: bold;

font-style: italic;

font-variant: small-caps;

list-style-type: disc;

list-style-position: inside;

list-style-image:

url(img.png);

}

Page 11: CSS Techniques Explained

div.example {

background: #FFFFFF url(example.png) left top repeat-x;

border: 1px solid #000000;

margin: 10px;

padding: 10px 15px 20px;

}

div.example2 {

font: bold italic small-caps 1em/1.5em Arial,sans-serif;

list-style: disc inside url(example.png);

}

Page 12: CSS Techniques Explained

Source: http://www.stuffandnonsense.co.uk/archives/css_specificity_wars.html

Page 13: CSS Techniques Explained

* {} /* a=0 b=0 c=0 d=0 -> specificity = 0,0,0,0 */

li {} /* a=0 b=0 c=0 d=1 -> specificity = 0,0,0,1 */

li:first-line {} /* a=0 b=0 c=0 d=2 -> specificity = 0,0,0,2 */

ul li {} /* a=0 b=0 c=0 d=2 -> specificity = 0,0,0,2 */

ul ol+li {} /* a=0 b=0 c=0 d=3 -> specificity = 0,0,0,3 */

h1 + *[rel=up] {} /* a=0 b=0 c=1 d=1 -> specificity = 0,0,1,1 */

ul ol li.red {} /* a=0 b=0 c=1 d=3 -> specificity = 0,0,1,3 */

li.red.level {} /* a=0 b=0 c=2 d=1 -> specificity = 0,0,2,1 */

#x34y {} /* a=0 b=1 c=0 d=0 -> specificity = 0,1,0,0 */

style="" /* a=1 b=0 c=0 d=0 -> specificity = 1,0,0,0 */

Source: http://www.w3.org/TR/CSS2/cascade.html

Page 14: CSS Techniques Explained

!important

Page 15: CSS Techniques Explained

.example {color: red !important}

Wint van

<div class=”example” style=”color: blue;”>

Page 16: CSS Techniques Explained

<div class=”clear”></div>

&<div class=”clearfix”></div>

Page 17: CSS Techniques Explained

HTML markup

<div class=”wrapper”>

Lorem ipsum

<div class=”floatbox”>

Floating box

</div>

</div>

Resultaat

CSS

.wrapper {

background: #FFF;

border: 5px solid #29BDBD;

margin: 10px;

padding: 10px;

}

.floatbox {

background: #FFF;

border: 5px solid #333;

padding: 10px;

float: right;

}

Page 18: CSS Techniques Explained

HTML markup

<div class=”wrapper”>

Lorem ipsum

<div class=”floatbox”>

Floating box

</div>

<div class=”clear”></div>

</div>

Resultaat

CSS (in 960 grid system)

.clear {

clear: both;

display: block;

overflow: hidden;

visibility: hidden;

width: 0;

height: 0;

}

Page 19: CSS Techniques Explained

HTML markup

<div class=”wrapper clearfix”>

Lorem ipsum

<div class=”floatbox”>

Floating box

</div>

</div>

Resultaat

CSS (in 960 grid system)

.clearfix:before,.clearfix:after {

content: '\0020';

display: block;

overflow: hidden;

visibility: hidden;

width: 0;

height: 0;

}

.clearfix:after {

clear: both;

}

.clearfix {

zoom: 1;

}

Page 20: CSS Techniques Explained

Code commenting

▪Voor jezelf later

▪Voor anderen na jou

▪Bij hacks en adjustments

/* Als kopjes in je CSS file */

h3 {font-size: 1em;}

h3 {font-size: 1em;} /* Achter bepaalde styles */

Page 21: CSS Techniques Explained

CSS technieken toegelicht

Goed om te weten

Page 22: CSS Techniques Explained

CSS – goed om te weten

▪Floating & position: absolute

▪Class stacking

▪ .class.class

▪#id.class

▪CSS selectors

Page 23: CSS Techniques Explained

HTML markup

<div class=”container”>

<div class=”absolute”>

Absolute

</div>

<div class=”floatbox”>

Floating box

</div>

<div class=”clear”></div>

</div>

Resultaat in IE7

CSS

.container {

position: relative;

z-index: 1;

}

.absolute {

right: 10px;

position: absolute;

top: 10px;

z-index: 2;

}

.floatbox {

float: left;

}

Page 24: CSS Techniques Explained

HTML markup

<div class=”container”>

<div>

<div

class=”absolute”>

Absolute

</div>

</div>

<div class=”floatbox”>

Floating box

</div>

<div class=”clear”></div>

</div>

Resultaat

CSS

.container {

position: relative;

z-index: 1;

}

.absolute {

right: 10px;

position: absolute;

top: 10px;

z-index: 2;

}

.floatbox {

float: left;

}

Page 25: CSS Techniques Explained

HTML markup

<div class=”container”>

<div class=”IE-div”>

<div

class=”absolute”>

Absolute

</div>

</div>

<div class=”floatbox”>

Floating box

</div>

<div class=”clear”></div>

</div>

Resultaat

CSS

.container {

position: relative;

z-index: 1;

}

.absolute {

right: 10px;

position: absolute;

top: 10px;

z-index: 2;

}

.floatbox {

float: left;

}

Page 26: CSS Techniques Explained

<div class=”class stacking”></div>

Page 27: CSS Techniques Explained

HTML markup

<div class=”blockBigBoldRed”>

Example

</div>

<div class=”blockBigBlue”>

Example

</div>

Resultaat

CSS

.blockBigBoldRed {

background: #FFFFFF;

border: 1px solid #CCCCCC;

margin: 10px;

padding: 10px;

font-size: 2em;

color: red;

font-weight: bold;

}

.blockBigBlue {

background: #FFFFFF;

border: 1px solid #CCCCCC;

margin: 10px;

padding: 10px;

font-size: 2em;

color: blue;

}

Page 28: CSS Techniques Explained

HTML markup

<div class=”block”>

<div class=”bigFont”>

<div class=”boldFont”>

<div

class=”redFont”>

Example

</div>

</div>

</div>

</div>

<div class=”block”>

<div class=”bigFont”>

<div class=”blueFont”>

Example

</div>

</div>

</div>

CSS

.block {

background: #FFFFFF;

border: 1px solid #CCCCCC;

margin: 10px;

padding: 10px;

}

.bigFont {font-size: 2em;}

.redFont {color: red;}

.blueFont {color: blue;}

.boldFont { font-weight: bold;}

Resultaat

Page 29: CSS Techniques Explained

HTML markup

<div class=”block bigFont boldFont

redFont”>

Example

</div>

<div class=”block bigFont blueFont”>

Example

</div>

Resultaat

CSS

.block {

background: #FFFFFF;

border: 1px solid #CCCCCC;

margin: 10px;

padding: 10px;

}

.bigFont {font-size: 2em;}

.redFont {color: red;}

.blueFont {color: blue;}

.boldFont {font-weight: bold;}

Page 30: CSS Techniques Explained

.class.class

Page 31: CSS Techniques Explained

HTML markup

<div class=”block bigFont redFont”>

Example

<div class=”caption redFont”>

Example

</div>

</div>

Resultaat

CSS

.block {

background: #FFFFFF;

border: 1px solid #CCCCCC;

margin: 10px;

padding: 10px;

}

.bigFont {font-size: 2em;}

.redFont {color: red;}

.caption {

background: #CCC;

padding: 10px;

}

Page 32: CSS Techniques Explained

HTML markup

<div class=”block bigFont redFont”>

Example

<div class=”caption redFont”>

Example

</div>

</div>

Resultaat

CSS

.block {

background: #FFFFFF;

border: 1px solid #CCCCCC;

margin: 10px;

padding: 10px;

}

.bigFont {font-size: 2em;}

.redFont {color: red;}

.caption {

background: #CCC;

padding: 10px;

}

.caption.redFont {color: darkred;}

Page 33: CSS Techniques Explained

#id.class

Page 34: CSS Techniques Explained

HTML markup

<div id=”bar1” class=”grid_4”>

Example

</div>

<div id=”bar2” class=”grid_4”>

Example

</div>

<div id=”bar3” class=”grid_4”>

Example

</div>

CSS

.grid_4 {

display: inline;

float: left;

margin-left: 10px;

margin-right: 10px;

position: relative;

width: 300px;

}

Page 35: CSS Techniques Explained

HTML markup

<div id=”bar1” class=”grid_4”>

Example

</div>

<div id=”bar2” class=”grid_4”>

Example

</div>

<div id=”bar3” class=”grid_4”>

Example

</div>

CSS

.grid_4 {

display: inline;

float: left;

margin-left: 10px;

margin-right: 10px;

position: relative;

}

#bar1.grid_4 {margin-left: 0;}

#bar3.grid_4 {margin-right: 0;}

Page 36: CSS Techniques Explained

Handige CSS selectors

E F Matches any F element that is a descendant of an E element.

E > F Matches any F element that is a child of an element

E.

E + F Matches any F element immediately preceded by a

sibling element E.

E:first-child Matches element E when E is the first child of its

parent.

E[foo] Matches any E element with the "foo"

attribute set (whatever the value).

E[foo="warn"] Matches any E element whose "foo" attribute value

is exactly equal to "warn".

E[foo~="warn"] Matches any E element whose "foo" attribute value

is a list of space-separated values, one of which

is exactly equal to "warn".

Source: http://www.w3.org/TR/CSS2/selector.html

Page 37: CSS Techniques Explained

E > F

HTML markup

<div class=”blog”>

<p>Introduction</p>

<div class=”story”>

<p>Lorem ipsum dolor</p>

<div class=”date”>

<p>Date</p>

</div>

</div>

</div>

CSS

.blog p {

font-family: Arial, sans-

serif;

font-size: 1em;

color: #555;

}

.story p {

font-size: 1.3em;

color: #111;

}

Resultaat

Page 38: CSS Techniques Explained

E > F

HTML markup

<div class=”blog”>

<p>Introduction</p>

<div class=”story”>

<p>Lorem ipsum dolor</p>

<div class=”date”>

<p>Date</p>

</div>

</div>

</div>

CSS

.blog p {

font-family: Arial, sans-

serif;

font-size: 1em;

color: #555;

}

.story > p {

font-size: 1.3em;

color: #111;

}

Resultaat

Page 39: CSS Techniques Explained

E + F

HTML markup

<div class=”blog”>

<h1>Title</h1>

<h2>Subtitle</h2>

<h2>Subtitle</h2>

<p>Lorem ipsum</p>

<h2>Subtitle</h2>

<p>Lorem ipsum</p>

</div>

CSS

h1 {

margin: 0 0 1em 0;

font-size: 2em;

}

h2 {

margin: 0 0 .5em 0;

font-size: 1.4em;

color: #000;

}

Page 40: CSS Techniques Explained

E + F

HTML markup

<div class=”blog”>

<h1>Title</h1>

<h2>Subtitle</h2>

<h2>Subtitle</h2>

<p>Lorem ipsum</p>

<h2>Subtitle</h2>

<p>Lorem ipsum</p>

</div>

CSS

h1 {

margin: 0 0 1em 0;

font-size: 2em;

}

h2 {

margin: 0 0 .5em 0;

font-size: 1.4em;

color: #000;

}

h1 + h2 {

margin-top: -1em;

font-style: italic;

}

Page 41: CSS Techniques Explained

E:first-child

HTML markup

<div class=”blog”>

<h1>Title</h1>

<p>Lorem ipsum</p>

<p>Lorem ipsum</p>

</div>

CSS

h1 {

margin: 0 0 1em 0;

font-size: 2em;

color: #222;

}

p {

color: #444;

margin-bottom: 1em;

}

.blog p:first-child {

font-family: serif;

font-style: italic;

color: #000;

}

Page 42: CSS Techniques Explained

E:first-child

HTML markup

<div class=”blog”>

<h1>Title</h1>

<div class=”story”>

<p>Lorem ipsum</p>

<p>Lorem ipsum</p>

</div>

</div>

CSS

h1 {

margin: 0 0 1em 0;

font-size: 2em;

color: #222;

}

p {

color: #444;

margin-bottom: 1em;

}

.story p:first-child {

font-family: serif;

font-style: italic;

color: #000;

}

Page 43: CSS Techniques Explained

E[foo="warn"]

HTML markup

<label>Naam</label><br />

<input type="text" />

<label>Geslacht</label><br />

<label>

<input type="radio" />Man

</label>

<label>

<input type="radio" />Vrouw

</label>

CSS

input[type="text"] {

width: 200px;

border: 1px solid #CCC;

background: #F5F5F5;

padding: 5px;

}

input[type="radio"] {

margin-left: 1em;

}

Page 44: CSS Techniques Explained

CSS technieken toegelicht

CSS in gebruik

Page 45: CSS Techniques Explained

CSS – In gebruik

▪Google Fonts

▪Attribute styling

▪DropCaps

▪Suckerfish menu

▪Styling images

Page 46: CSS Techniques Explained

Source: http://www.google.com/webfonts?subset=latin&sort=pop

Page 47: CSS Techniques Explained

HTML markup

<!-- Begin plaats in <head> -->

<link href=”http://fonts.googleapis.com/css?family=Yanone+Kaffeesatz|Ubuntu”

rel=”stylesheet” type=”text/css” />

<!-- Eind plaats in </head> -->

<h1>Title</h1>

<p>The quick brown fox jumps over the lazy dog.</p>

CSS

h1 {

font-family: 'Yanone Kaffeesatz', arial, serif;

}

p {

font-family: 'Ubuntu', arial, serif;

}

Page 48: CSS Techniques Explained
Page 49: CSS Techniques Explained
Page 50: CSS Techniques Explained

HTML markup

<ul>

<li><a class=”doc-icon” href="test.doc">Lorem ipsum

dolor</a></li>

<li><a class=”pdf-icon” href="test.pdf">Sit amet

consect</a></li>

<li><a class=”xls-icon” href="test.xls">Lorem ipsum

dolor</a></li>

<li><a class=”png-icon” href="test.png">Sit amet

consectet</a></li>

</ul>

CSS

li a.doc-icon {background: url(doc.gif) no-repeat; }

li a.pdf-icon {background: url(pdf.gif) no-repeat; }

li a.xls-icon {background: url(xls.gif) no-repeat; }

li a.png-icon {background: url(png.gif) no-repeat; }

Page 51: CSS Techniques Explained

HTML markup

<ul>

<li><a href="test.doc">Lorem ipsum dolor</a></li>

<li><a href="test.pdf">Sit amet consectetuer</a></li>

<li><a href="test.xls">Lorem ipsum dolor</a></li>

<li><a href="test.png">Sit amet consectetuer</a></li>

</ul>

<ul>

<li><a href="http://twitter.com/finishjoomla">Twitter</a></li>

<li><a

href="http://www.facebook.com/profile.php">Facebook</a></li>

<li><a href="http://www.linkedin.com/company/">Linkedin</a></li>

<li><a href="http://www.youtube.com/user/">Youtube</a></li>

</ul>

Page 52: CSS Techniques Explained

CSS

li a[href$='.doc'],

li a[href$='.pdf'],

li a[href$='.xls'],

li a[href$='.png'],

li a[href*='twitter.com'],

li a[href*='facebook.com'],

li a[href*='linkedin.com'],

li a[href*='youtube.com'] {

padding-left:40px;

min-height:24px;

display:inline-block;

line-height:24px;

}

Page 53: CSS Techniques Explained

CSS

li a[href$='.doc'] {background: url(doc.gif) no-repeat; }

li a[href$='.pdf'] {background: url(pdf.gif) no-repeat; }

li a[href$='.xls'] {background: url(xls.gif) no-repeat; }

li a[href$='.png'] {background: url(png.gif) no-repeat; }

li a[href*='twitter.com'] {background: url(twitter.gif) no-repeat; }

li a[href*='facebook.com'] {background: url(facebook.gif) no-repeat; }

li a[href*='linkedin.com'] {background: url(linkedin.gif) no-repeat; }

li a[href*='youtube.com'] {background: url(youtube.gif) no-repeat; }

Page 54: CSS Techniques Explained
Page 55: CSS Techniques Explained

HTML markup

<p>

<span class=”dropcap”>L</span>orem ipsum dolor sit amet,

consectetur adipiscing elit...

</p>

CSS

p {font-family: Arial, sans-serif;}

span.dropcap {

font-size: 3em;

color: #29BDBD;

float: left;

margin: 10px 10px 0 0;

display: block;

}

Page 56: CSS Techniques Explained

HTML markup

<p class=”dropcap”>

Lorem ipsum dolor sit amet, consectetur adipiscing elit...

</p>

CSS

p.dropcap {font-family: Arial, sans-serif;}

p.dropcap:first-letter {

font-size: 3em;

color: #29BDBD;

float: left;

margin: 10px 10px 0 0;

}

Page 57: CSS Techniques Explained

HTML markup

<p class=”dropcap”>

Lorem ipsum dolor sit amet, consectetur adipiscing elit...

</p>

CSS

p.dropcap {font-family: 'Old Standard TT', Times, serif;}

p.dropcap:first-letter {

font-family: 'UnifrakturMaguntia', Times, serif;

font-size: 3em;

color: #29BDBD;

float: left;

margin: 10px 10px 0 0;

}

Page 58: CSS Techniques Explained
Page 59: CSS Techniques Explained

Source: http://www.flickr.com/photos/shadeofmelon/3584367692/

Page 60: CSS Techniques Explained

HTML markup

<ul>

<li><a href="#">Item 1</a></li>

<li class="parent"><a href="#">Item 2</a>

<ul>

<li><a href="#">Sub item 1</a></li>

<li><a href="#">Sub item 2</a></li>

<li class="parent"><a href="#">Sub item 3</a>

<ul>

<li><a href="#">Sub sub item 1</a></li>

<li><a href="#">Sub sub item 2</a></li>

</ul>

</li>

<li><a href="#">Sub item 4</a></li>

</ul>

</li>

<li><a href="#">Item 3</a></li>

</ul>

Page 61: CSS Techniques Explained
Page 62: CSS Techniques Explained

ul li {float:left;position:relative;background:#555;}

ul li a {color:#FFF;display:block;padding:5px 20px;}

ul li ul {position:absolute;}

ul li li {float:none;}

ul li li a {width:200px;padding:5px 10px;}

ul li li ul {left:220px;top:0;}

Page 63: CSS Techniques Explained
Page 64: CSS Techniques Explained

ul li {float:left;position:relative;background:#555;}

ul li a {color:#FFF;display:block;padding:5px 20px;}

ul li ul {position:absolute;display:none;}

ul li li {float:none;}

ul li li a {width:200px;padding:5px 10px;}

ul li li ul {left:220px;top:0;}

Page 65: CSS Techniques Explained
Page 66: CSS Techniques Explained

ul li {float:left;position:relative;background:#555;}

ul li a {color:#FFF;display:block;padding:5px 20px;}

ul li ul {position:absolute;display:none;}

ul li li {float:none;}

ul li li a {width:200px;padding:5px 10px;}

ul li li ul {left:220px;top:0;}

ul li:hover ul {display:block;}

ul li:hover {background:#333;}

Page 67: CSS Techniques Explained
Page 68: CSS Techniques Explained

ul li {float:left;position:relative;}

ul li a {background:#555;color:#FFF;display:block;padding:5px 20px;}

ul li ul {position:absolute;display:none;}

ul li li {float:none;}

ul li li a {width:200px;padding:5px 10px;}

ul li li ul {left:220px;top:0;}

ul li:hover > ul {display:block;}

ul li:hover {background:#333;}

Page 69: CSS Techniques Explained
Page 70: CSS Techniques Explained

ul li {float:left;position:relative;}

ul li a {background:#555;color:#FFF;display:block;padding:5px 20px;}

ul li ul {position:absolute;display:none;}

ul li li {float:none;}

ul li li a {width:200px;padding:5px 10px;}

ul li li ul {left:220px;top:0;}

ul li:hover > ul {display:block;}

ul li:hover {background:#333;}

ul li:hover {background:#333;}

ul li li:hover {background:#111;}

ul li li:hover {background:#000;}

Page 71: CSS Techniques Explained
Page 72: CSS Techniques Explained

ul li {float:left;position:relative;}

ul li a {background:#555;color:#FFF;display:block;padding:5px 20px;}

ul li ul {position:absolute;display:none;}

ul li li {float:none;}

ul li li a {width:200px;padding:5px 10px;}

ul li li ul {left:220px;top:0;}

ul li:hover > ul {display:block;}

ul li.parent:hover {background:#333;}

ul li:hover {background:#333;}

ul li li:hover {background:#111;}

ul li li:hover {background:#000;}

ul li.parent a {background:url(arrow_down.png) no-repeat right 20px;}

Page 73: CSS Techniques Explained
Page 74: CSS Techniques Explained

ul li {float:left;position:relative;}

ul li a {background:#555;color:#FFF;display:block;padding:5px 20px;}

ul li ul {position:absolute;display:none;}

ul li li {float:none;}

ul li li a {width:200px;padding:5px 10px;}

ul li li ul {left:220px;top:0;}

ul li:hover > ul {display:block;}

ul li.parent:hover {background:#333;}

ul li:hover {background:#333;}

ul li li:hover {background:#111;}

ul li li:hover {background:#000;}

ul li.parent > a {background:url(arrow_down.png) no-repeat right 20px;}

Page 75: CSS Techniques Explained
Page 76: CSS Techniques Explained

ul li {float:left;position:relative;}

ul li a {background:#555;color:#FFF;display:block;padding:5px 20px;}

ul li ul {position:absolute;display:none;}

ul li li {float:none;}

ul li li a {width:200px;padding:5px 10px;}

ul li li ul {left:220px;top:0;}

ul li:hover > ul {display:block;}

ul li.parent:hover {background:#333;}

ul li:hover {background:#333;}

ul li li:hover {background:#111;}

ul li li:hover {background:#000;}

ul li.parent > a {background:url(arrow_down.png) no-repeat right 20px;}

ul li li.parent > a {background:url(arrow_side.png) no-repeat right 15px;}

Page 77: CSS Techniques Explained
Page 78: CSS Techniques Explained
Page 79: CSS Techniques Explained
Page 80: CSS Techniques Explained

HTML markup

<img class=”img1” src=”image.png” alt=”image” />

CSS

img.img1 {

background: #FFF;

padding: 2px;

border: 2px solid #AAA;

}

Page 81: CSS Techniques Explained

HTML markup

<img class=”img2” src=”image.png” alt=”image” />

CSS

img.img2 {

background: url(seamless.png);

padding: 4px;

}

Page 82: CSS Techniques Explained

HTML markup

<img class=”img3” src=”image.png” alt=”image” />

CSS

img.img3 {

background: url(seamless.png);

padding: 3px;

border: 1px solid #000;

}

Page 83: CSS Techniques Explained

HTML markup

<img class=”img4” src=”image.png” alt=”image” />

CSS

img.img4 {

background: #000;

padding: 1px;

border: 2px solid #FFF;

outline: 1px solid #AAA;

}

Page 84: CSS Techniques Explained

Vragen?

Page 85: CSS Techniques Explained

Coupon code

JD11NL– 15% discount on all our products

– Valid until 2 weeks from now

– 50 coupons available

Robin Poort

[email protected]

Twitter: @finishjoomla