<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Broken Links &#187; css</title>
	<atom:link href="http://www.broken-links.com/category/css/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.broken-links.com</link>
	<description>Thoughts on web development and technologies by Peter Gasston</description>
	<lastBuildDate>Fri, 03 Feb 2012 19:47:00 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
	<atom:link rel='hub' href='http://www.broken-links.com/?pushpress=hub'/>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>DRY vs Media Queries — a use case for Mixins</title>
		<link>http://www.broken-links.com/2012/01/17/dry-vs-media-queries-a-use-case-for-mixins/</link>
		<comments>http://www.broken-links.com/2012/01/17/dry-vs-media-queries-a-use-case-for-mixins/#comments</comments>
		<pubDate>Tue, 17 Jan 2012 15:00:11 +0000</pubDate>
		<dc:creator>Peter</dc:creator>
				<category><![CDATA[css]]></category>
		<category><![CDATA[less]]></category>
		<category><![CDATA[mixins]]></category>
		<category><![CDATA[sass]]></category>
		<category><![CDATA[standards]]></category>
		<category><![CDATA[variables]]></category>

		<guid isPermaLink="false">http://www.broken-links.com/?p=1475</guid>
		<description><![CDATA[CSS pre-processors like Sass and LESS extend CSS in many useful ways, not least by allowing you to use variables in your code either as single values or blocks of multiple property/value pairs, called Mixins. So useful are these that developer Tab Atkins proposed to the W3C that they be adopted into CSS itself, but [...]]]></description>
			<content:encoded><![CDATA[<p>CSS pre-processors like <a href="http://sass-lang.com/">Sass</a> and <a href="http://lesscss.org/"><abbr>LESS</abbr></a> extend <abbr>CSS</abbr> in many useful ways, not least by allowing you to use variables in your code either as single values or blocks of multiple property/value pairs, called Mixins. So useful are these that developer <a href="http://www.xanthir.com/blog/b49w0">Tab Atkins proposed to the W3C</a> that they be adopted into <abbr>CSS</abbr> itself, but they were rejected as no suitable use cases were seen.</p>
<p>I think I’ve found a scenario in which, while the use of Mixins aren’t vital, they’re certainly very useful, and it’s because of one of the core principles of coding: <abbr>DRY</abbr> (Don’t Repeat Yourself).</p>
<p><span id="more-1475"></span></p>
<p>Just in case you’re not familiar with Mixins, they are reusable blocks of code. In Sass they’re defined with the <code>@mixin</code> at-rule and a unique identifier, like so:</p>
<pre>@mixin foobar {
  color: red;
  font-size: 1.5em;
}</pre>
<p>And wherever you want those rules to apply, you call them with <code>@include</code>:</p>
<pre>h1 {
  @include foobar;
  font-weight: bold;
}
h2 { @include foobar; }</pre>
<p>So you can see, it prevents repetition. The W3C’s case is that you can code around this using CSS as it is:</p>
<pre>h1, h2 {
  color: red;
  font-size: 1.5em;
}
h1 { font-weight: bold; }</pre>
<p>Which is fair enough in the example I’ve provided, and in simple stylesheets. But what about in more complex stylesheets? Depending on how they’re ordered, you either have to use some selectors very far away from where the other rules are applied to it, or you repeat the rules. And what happens when you bring Media Queries into the equation?</p>
<p>Imagine you have two elements and you want to have them styled differently, but if a media query is in play for them both to be the same, like this:</p>
<pre>h1 { color: red; }
h2 { color: blue; }
@media screen and (max-width: 640px) {
  h2 { color: red; }
}</pre>
<p><b><abbr lang="la" title="Nota Bene">NB</abbr>:</b> I’ve used only a single property here for the sake of clarity, but it’s more likely I would be using multiple properties so the situation would be even more complicated.</p>
<p>To avoid repeating myself I could add a class to the <code>h1</code> using JavaScript and <code>matchMedia</code>, but that of course relies on the user having JS enabled and so isn’t a real solution. Or I could pre-process the CSS with a server-side language, but again that’s reliant on another technology which I can’t say for certain is available (in an offline appplication, for example).</p>
<p>With the example I’ve given, I could actually approach the problem from the opposite direction:</p>
<pre>h1, h2 { color: red; }
@media screen and (min-width: 640px) {
  h2 { color: blue; }
}</pre>
<p>But that means the queries I use are being forced on me by the limitations of CSS; I may want to use my original query for different reasons, but if I want to avoid repetition I have no choice.</p>
<p>That’s where Mixins would come in handy, allowing me both the flexibility to choose the queries that better suit the way I’m working, and avoiding repetition:</p>
<pre>@mixin primarycolor { color: red; }
h1 { @include primarycolor; }
h2 { color: blue; }
@media screen and (max-width: 640px) {
  h2 { @include primarycolor; }
}</pre>
<p>So, there’s my use case. It’s not bulletproof, there are ways around it, but they all impose limitations on me which I don’t feel should be imposed. I’d be interested to hear your thoughts on this, so please leave a comment if you have something to add.</p>
 <p><a href="http://www.broken-links.com/?flattrss_redirect&amp;id=1475&amp;md5=56811f9bcb637bfe0b9b6edb6d8acbaf" title="Flattr" target="_blank"><img src="http://www.broken-links.com/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.broken-links.com/2012/01/17/dry-vs-media-queries-a-use-case-for-mixins/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" href="http://www.broken-links.com/?flattrss_redirect&amp;id=1475&amp;md5=56811f9bcb637bfe0b9b6edb6d8acbaf" type="text/html" />
	</item>
		<item>
		<title>The new (and hopefully final) linear gradient syntax</title>
		<link>http://www.broken-links.com/2012/01/11/the-new-and-hopefully-final-linear-gradient-syntax/</link>
		<comments>http://www.broken-links.com/2012/01/11/the-new-and-hopefully-final-linear-gradient-syntax/#comments</comments>
		<pubDate>Wed, 11 Jan 2012 11:30:31 +0000</pubDate>
		<dc:creator>Peter</dc:creator>
				<category><![CDATA[css]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[firefox 10]]></category>
		<category><![CDATA[gradients]]></category>
		<category><![CDATA[linear gradients]]></category>

		<guid isPermaLink="false">http://www.broken-links.com/?p=1445</guid>
		<description><![CDATA[The latest Working Draft of the CSS3 Image Values and Replaced Content module was released last month, and contains some changes to the gradient syntaxes — for what you’d hope would be the last time. The updated syntaxes are a little more logical, but offer the same flexibility. Firefox 10, which is due for release [...]]]></description>
			<content:encoded><![CDATA[<p>The latest Working Draft of the <i>CSS3 Image Values and Replaced Content</i> module was released last month, and contains some changes to the gradient syntaxes — for what you’d hope would be the last time. The updated syntaxes are a little more logical, but offer the same flexibility.</p>
<p>Firefox 10, which is due for release in a few weeks, will see an implementation of the updated <code>linear-gradient</code> and <code>repeating-linear-gradient</code> functions, so in this article I’ll take a look at those, and write a follow-up when the radial gradient updates are available for use.</p>
<p><span id="more-1445"></span></p>
<p>The simplest linear gradient function remains this, which creates a top to bottom gradient (you can see it in <a href="http://www.broken-links.com/tests/newgradients/#example1">Example 1</a>):</p>
<pre>div { background: linear-gradient(#000, #FFF); }</pre>
<p>If you want the gradient to go in a different direction (and you probably will), you should now use the keyword ‘<em>to</em>’ plus the side  (<em>top</em>, <em>bottom</em>, <em>left</em>, <em>right</em>) you want the gradient to end at; for example, a gradient from left to right would go like this:</p>
<pre>div { background: linear-gradient(to right, #000, #FFF); }</pre>
<p><a href="http://www.broken-links.com/tests/newgradients/#example2">Example 2</a> shows that in action, as long as you have Firefox version 10 or greater.</p>
<p>You can make simple diagonals by using two direction keywords; this one will go from top-left to bottom-right:</p>
<pre>div { background: linear-gradient(to right bottom, #000, #FFF); }</pre>
<p>The previous syntax allowed you to use direction keywords without <em>to</em>, and this would be the origin of the gradient; that is, the previous example (top-left to bottom-right) would be written like this:</p>
<pre>div { background: linear-gradient(left top, #000, #FFF); }</pre>
<p><a href="http://www.broken-links.com/tests/newgradients/#example3">Example 3</a> illustrates this; if you have Firefox 9 or below you’ll see the old syntax in use, but if you have 10 or above you’ll see the new one. The new Firefox implementation allows you to still use the old syntax for the sake of backwards compatibility, but it will be dropped when the unprefixed functions are implemented.</p>
<p>The rest of the syntax remains consistent. For more complex diagonals you can still use angles:</p>
<pre>div { background: linear-gradient(70deg, #000, #FFF); }</pre>
<p>That’s shown in <a href="http://www.broken-links.com/tests/newgradients/#example4">Example 4</a>. <b><abbr title="Nota Bene" lang="la">NB</abbr>:</b> although the spec states that <em>0deg</em> is bottom to top, all current implementations (including this updated one in Firefox 10) measure <em>0deg</em> as left to right. I’m not sure whether all of the browsers will have to change, or the spec will.</p>
<p>Each <em>color-stop</em> can also have a length or percentage value to further customise the gradient:</p>
<pre>div { background: linear-gradient(#000 20px, #FFF 90%, #000); }</pre>
<p><a href="http://www.broken-links.com/tests/newgradients/#example5">Example 5</a> shows this.</p>
<p>There have been a lot of changes to the syntax since it was first proposed, but I think they’ve all been for the better. The linear gradient functions are quite straightforward, understandable, and flexible enough for the majority of use cases, which is what we want from CSS.</p>
<p>To know more, I recommend you read the relevant section of the <a href="http://www.w3.org/TR/css3-images/#linear-gradients">CSS3 Image Values and Replaced Content</a> module.</p>
 <p><a href="http://www.broken-links.com/?flattrss_redirect&amp;id=1445&amp;md5=5a0f962794077b6d1875e7663788c56b" title="Flattr" target="_blank"><img src="http://www.broken-links.com/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.broken-links.com/2012/01/11/the-new-and-hopefully-final-linear-gradient-syntax/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<atom:link rel="payment" href="http://www.broken-links.com/?flattrss_redirect&amp;id=1445&amp;md5=5a0f962794077b6d1875e7663788c56b" type="text/html" />
	</item>
		<item>
		<title>My Happy New Year</title>
		<link>http://www.broken-links.com/2012/01/06/my-happy-new-year/</link>
		<comments>http://www.broken-links.com/2012/01/06/my-happy-new-year/#comments</comments>
		<pubDate>Fri, 06 Jan 2012 16:00:10 +0000</pubDate>
		<dc:creator>Peter</dc:creator>
				<category><![CDATA[css]]></category>
		<category><![CDATA[Miscellanea]]></category>
		<category><![CDATA[3d transforms]]></category>
		<category><![CDATA[animations]]></category>
		<category><![CDATA[transforms]]></category>
		<category><![CDATA[writing]]></category>

		<guid isPermaLink="false">http://www.broken-links.com/?p=1448</guid>
		<description><![CDATA[One more post about things I’ve written elsewhere, then I’ll be back to writing original content here again… Another pair of articles by me got published today; they’re both introduction-level: Adventures In The Third Dimension, on Smashing Magazine, is a beginners guide to CSS 3D Transforms, explaining the syntax with a few demos; and for [...]]]></description>
			<content:encoded><![CDATA[<p>One more post about things I’ve written elsewhere, then I’ll be back to writing original content here again…</p>
<p>Another pair of articles by me got published today; they’re both introduction-level:</p>
<p><a href="http://coding.smashingmagazine.com/2012/01/06/adventures-in-the-third-dimension-css-3-d-transforms/">Adventures In The Third Dimension</a>, on <strong>Smashing Magazine</strong>, is a beginners guide to CSS 3D Transforms, explaining the syntax with a few demos; and for <strong>Ubelly</strong> I wrote <a href="http://www.ubelly.com/2012/01/the-five-minute-guide-to-css-animations/">The Five-Minute Guide to CSS Animations</a>, which does the same job for CSS Animations.</p>
<p>I’ve an article coming up for .net Magazine soon; it’s called <em>10 CSS Techniques for 2012</em>, it’ll be the cover article, and I’m very excited about as I wrote it in collaboration with <a href="http://ibuypink.com/">Andreas Johansson</a>, <a href="http://csswizardry.com/">Harry Roberts</a>, <a href="http://lea.verou.me/">Lea Verou</a>, <a href="http://nicolasgallagher.com/">Nicolas Gallagher</a>, and <a href="http://pauladamdavis.com/">Paul Adam Davis</a>, all of whom do great work.</p>
<p>After that I have two more articles to write, should be tech editing a book on CSS3, then probably starting work on my own second book. 2012 is going to be a very busy year.</p>
 <p><a href="http://www.broken-links.com/?flattrss_redirect&amp;id=1448&amp;md5=7b342b3b6500c7545c21d9334ac3a28d" title="Flattr" target="_blank"><img src="http://www.broken-links.com/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.broken-links.com/2012/01/06/my-happy-new-year/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" href="http://www.broken-links.com/?flattrss_redirect&amp;id=1448&amp;md5=7b342b3b6500c7545c21d9334ac3a28d" type="text/html" />
	</item>
		<item>
		<title>Introducing CSS Regions</title>
		<link>http://www.broken-links.com/2011/11/07/introducing-css-regions/</link>
		<comments>http://www.broken-links.com/2011/11/07/introducing-css-regions/#comments</comments>
		<pubDate>Mon, 07 Nov 2011 14:45:36 +0000</pubDate>
		<dc:creator>Peter</dc:creator>
				<category><![CDATA[css]]></category>

		<guid isPermaLink="false">http://www.broken-links.com/?p=1394</guid>
		<description><![CDATA[The latest stable release for Chrome (version 15) brings experimental support for a new feature, CSS Regions. What this does is take content from a source, and flow that content into a target — or, more importantly, multiple targets. This allows layouts which are more flexible than are currently possible. This is still a very [...]]]></description>
			<content:encoded><![CDATA[<p>The latest stable release for Chrome (version 15) brings experimental support for a new feature, <a href="http://dev.w3.org/csswg/css3-regions/"><abbr>CSS</abbr> Regions</a>. What this does is take content from a source, and flow that content into a target — or, more importantly, multiple targets. This allows layouts which are more flexible than are currently possible.</p>
<p>This is still a very experimental feature but it’s worth beginning to investigate, so in this article I’m going to very quickly walk through the syntax and discuss the current level of implementation. <b>Update, Nov 15:</b> I realised that I overlooked Microsoft’s implementation of <abbr>CSS</abbr> Regions, so I’ve updated this post to correct that.</p>
<p><span id="more-1394"></span></p>
<h2><abbr>CSS</abbr> Regions in Chrome</h2>
<p>If you’re using at least version 15 of Chrome, the example below should show you a paragraph of content split between three boxes; if you’re using another browser, you should see a paragraph of text followed by three empty boxes (<a href="http://jsfiddle.net/stopsatgreen/V4xAq/embedded/result/">see this example on JSFiddle</a> if the iframe’s not working, and resize the browser to see the flow in action).</p>
<p><iframe style="width: 100%; height: 300px" src="http://jsfiddle.net/stopsatgreen/V4xAq/embedded/result/" allowfullscreen="allowfullscreen" frameborder="0"></iframe></p>
<p>The syntax itself is quite straightforward. We’ll start with the source element — this must be included in your markup, but won’t show up in the document. <abbr>CSS</abbr> is used to set the source, but the property is currently in a state of flux: in Chrome 15 you must use the <code>–webkit-flow</code> property, and in Chrome 16, the newly revised <code>–webkit-flow-into</code> property. In both cases the value is a unique identifier of your own choice — note, however, that in the first property I’ve quoted the identifier as it’s actually a string:</p>
<pre>#source {
  -webkit-flow: 'foo';
  -webkit-flow-into: foo;
}</pre>
<p>You can then distribute that content across as many target elements as you like. The content will flow through those elements in DOM order, with overflow from the first element appearing in the second, overflow from there appearing in the third, and so on. Once again, how you do this has changed: in Chrome 15 you use the <code>content</code> property with the <code>–webkit-from-flow()</code> function as a value, and in Chrome 16 you use the <code>–webkit-flow-from</code> property — in both cases, referring to the identifier you created (formatted as a string for Chrome 15):</p>
<pre>.target1, .target2 {
  content: -webkit-from-flow('foo');
  -webkit-flow-from: foo;
}</pre>
<p>Just to muddy the waters even further, the build of Chrome I’m currently using (16.0.912.21) is halfway through the transition between the old and new syntaxes, and so although I expect this to change before 16 becomes stable, currently only works with this syntax:</p>
<pre>#source { -webkit-flow-into: foo; }
.target1, .target2 { content: -webkit-from-flow('foo'); }</pre>
<p>Anyway, the flowed content is effectively invisible to the target elements, so by default they will have neither <code>height</code> nor <code>width</code>; that being the case, you need to assign some dimensions to them. <abbr title="Nota Bene" lang="la">NB</abbr>: Not being aware of the flowed content also means <code>min-height</code> and <code>min-width</code> will behave identically to <code>height</code> and <code>width</code> (respectively).</p>
<pre>.target1, .target2 { height: 100px; width: 100%; }</pre>
<p>Having to set explicit dimensions does somewhat limit the possibilities of CSS Regions; they were created to support print-influenced semi-fixed layouts aimed at tablets or ebook readers, so their usefulness on the web at large is perhaps restricted (certainly when viewed against some of the <a href="http://www.netmagazine.com/features/future-css-layouts">more flexible layout methods that are being planned</a>).</p>
<p>A quick note about styling the flowed content: long term there will be a new rule, <code>@region</code>, which will allow you to style the content for each target, for example:</p>
<pre>@region .target1 { color: #F00; }</pre>
<p>At the current level of implementation, however, you have to apply the rules to the <strong>source</strong>, not to the targets; that is to say, you can only style the box of the target elements, not the content within them.</p>
<h2><abbr>CSS</abbr> Regions in <abbr title="Internet Explorer 10">IE10</abbr></h2>
<p>The <a href="http://msdn.microsoft.com/en-us/windows/apps/br229516.aspx">preview release of <abbr>IE10</abbr></a> also has support for <abbr>CSS</abbr> Regions, although their implementation has one important difference, in that the source must be contained in an <code>iframe</code>:</p>
<pre>&lt;iframe id="source" content="source.html"&gt;&lt;/iframe&gt;</pre>
<p>This is then used in the same way as the standard dictates:</p>
<pre>#source { -ms-flow-into: foo; }
.target1, .target2 { -ms-flow-from: foo; }</pre>
<p>You can read more in the <a href="http://msdn.microsoft.com/en-us/ie/hh272902.aspx#_CSSConnected"><abbr>IE10</abbr> Developer Guide</a>. I’d imagine this implementation will be updated to fully meet the spec before <abbr>IE10</abbr> is officially released. I don’t have access to a copy of the preview browser at the moment so I can’t test if this works, but will update this post when I get the opportunity.</p>
 <p><a href="http://www.broken-links.com/?flattrss_redirect&amp;id=1394&amp;md5=ab2bf6f77521522551cb5b1b9c85a8c3" title="Flattr" target="_blank"><img src="http://www.broken-links.com/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.broken-links.com/2011/11/07/introducing-css-regions/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<atom:link rel="payment" href="http://www.broken-links.com/?flattrss_redirect&amp;id=1394&amp;md5=ab2bf6f77521522551cb5b1b9c85a8c3" type="text/html" />
	</item>
		<item>
		<title>Opera’s CSS Pagination Build</title>
		<link>http://www.broken-links.com/2011/10/27/operas-css-pagination-build/</link>
		<comments>http://www.broken-links.com/2011/10/27/operas-css-pagination-build/#comments</comments>
		<pubDate>Thu, 27 Oct 2011 13:07:18 +0000</pubDate>
		<dc:creator>Peter</dc:creator>
				<category><![CDATA[browsers]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[experimental]]></category>
		<category><![CDATA[media queries]]></category>
		<category><![CDATA[opera]]></category>
		<category><![CDATA[pagination]]></category>

		<guid isPermaLink="false">http://www.broken-links.com/?p=1385</guid>
		<description><![CDATA[Opera recently released a Labs build of their browser with support for CSS pagination; that is, removing the scrollbar from documents and adding page controls instead (this is ideal for non-desktop devices, especially TV, where scrolling can be onerous). The syntax (as described in the Generated Content for Paged Media module) is very simple; you [...]]]></description>
			<content:encoded><![CDATA[<p>Opera recently released <a href="http://labs.opera.com/news/2011/10/19/">a Labs build of their browser with support for CSS pagination</a>; that is, removing the scrollbar from documents and adding page controls instead (this is ideal for non-desktop devices, especially TV, where scrolling can be onerous). The syntax (as described in the <a href="http://dev.w3.org/csswg/css3-gcpm/">Generated Content for Paged Media module</a>) is very simple; you first use a media query with the <code>paged</code> media type (prefixed in Opera) like so:</p>
<pre>@media -o-paged {}</pre>
<p>Then use new values for the <code>overflow</code> property on the scrollable element to control whether the pagination moves horizontally or vertically, and whether or not on-screen controls are shown, like so:</p>
<pre>@media -o-paged {
  html {
    height: 100%;
    overflow: -o-paged-x-controls;
  }
}</pre>
<p>This paginates the whole document horizontally, and adds controls. To see this working, you’ll need to <a href="http://labs.opera.com/news/2011/10/19/">download a copy of the Labs build</a> (available for Mac, Windows, Linux and Android), then you can visit this <a href="http://www.broken-links.com/tests/diveinto/">example page from Dive Into HTML5</a> I quickly set up. Navigate by dragging/swiping, cursor keys, or the native controls.</p>
<p>I really like this; it’s still early days, but the syntax seems clear and logical and works well in the demos I’ve seen, and I think it’s going to be really useful as the web migrates away from the desktop and onto other connected devices. More <a href="http://people.opera.com/howcome/2011/reader/index.html">information and examples are in the ‘Paging the Web’ article</a> on Håkon Wium Lie’s website, and I’ll definitely be delving further into this.</p>
 <p><a href="http://www.broken-links.com/?flattrss_redirect&amp;id=1385&amp;md5=acc3715e9826691d4f1c345d6dbff672" title="Flattr" target="_blank"><img src="http://www.broken-links.com/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.broken-links.com/2011/10/27/operas-css-pagination-build/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" href="http://www.broken-links.com/?flattrss_redirect&amp;id=1385&amp;md5=acc3715e9826691d4f1c345d6dbff672" type="text/html" />
	</item>
		<item>
		<title>Three Practical Uses for FlexBox</title>
		<link>http://www.broken-links.com/2011/08/31/three-practical-uses-for-flexbox/</link>
		<comments>http://www.broken-links.com/2011/08/31/three-practical-uses-for-flexbox/#comments</comments>
		<pubDate>Wed, 31 Aug 2011 10:32:44 +0000</pubDate>
		<dc:creator>Peter</dc:creator>
				<category><![CDATA[css]]></category>
		<category><![CDATA[css3]]></category>
		<category><![CDATA[layout]]></category>

		<guid isPermaLink="false">http://www.broken-links.com/?p=1328</guid>
		<description><![CDATA[The Flexible Box Layout module (commonly referred to as FlexBox, for convenience) is implemented in Firefox, Chrome, Safari, and IE10 (Platform Preview, at least). I wrote an article explaining FlexBox in detail in .net magazine last year, but thought it worth following up with a short, practical guide on a few things it’s useful for. [...]]]></description>
			<content:encoded><![CDATA[<p>The <a href="http://www.w3.org/TR/2009/WD-css3-flexbox-20090723/">Flexible Box Layout module</a> (commonly referred to as <em>FlexBox</em>, for convenience) is implemented in Firefox, Chrome, Safari, and <abbr>IE</abbr>10 (Platform Preview, at least). I wrote <a href="http://www.netmagazine.com/tutorials/css3-flexible-box-model-explained">an article explaining FlexBox in detail in .net magazine</a> last year, but thought it worth following up with a short, practical guide on a few things it’s useful for.</p>
<p>I actually don’t think it’s perfectly suited for complex page layouts, but it does some simple things very well, so that’s what I’ll concentrate on. There are three use cases in this article, none of which are impossible using <abbr>CSS</abbr>2.1, but all of which are made easier with FlexBox.</p>
<p><span id="more-1328"></span></p>
<p>You can see all of the examples in action on this page: <a href="http://www.broken-links.com/tests/flexbox/">Demo: Three Practical Uses for FlexBox</a> — it should go without saying that you’ll need to be using a decent browser.</p>
<h2>Equally-distributed Navigation Items</h2>
<p>For the first example I’m going to make a horizontal tabbed navigation, where all of the tabs have equal widths and spacing. In my example I have four tabs inside a parent which is 600px wide, each tab has a 1px border, and between each of the tabs I have a 4px gap. I can set the tab widths by using absolute numbers or percentages* but both of these mean making calculations, and having to recalculate when new items are added — not practical if you create a website for a client with no knowledge of <abbr>CSS</abbr>.</p>
<p>Using FlexBox makes this much easier; you just need to give the list parent a <code>display</code> value of <code>box</code>, and each item a <code>box-flex</code> value of <em>1</em>:</p>
<pre>ul.nav { display: box; }
.nav li { box-flex: 1; }</pre>
<p>Of course, you will have to use all of the prefixed properties (<em>–moz–</em>, <em>–ms–</em> and <em>–webkit–</em>), but these are the core rules. What this does is distribute all of the <code>li</code> elements equally into the parent, after margins have been accounted for; no calculations required, and no modification of the <abbr>CSS</abbr> needed if an extra nav item’s added.</p>
<p><strong>Update:</strong> As pointed out in the comments, if you have very varied text in the list items this actually doesn’t work the way you think it should (especially in Firefox), as the widths of the tab will vary to fit the content. To work around this in WebKit browsers you just need to add a <code>width</code> value other than <code>auto</code>; even <i>0</i> is acceptable. In Firefox you need to add a greater <code>width</code> value (in my example I’ve used <i>150px</i> which, as there are four children, is 25% of the parent) just to get the layout working in the first place, and there is no way to stop the tabs from resizing.</p>
<h2>Vertical Centring</h2>
<p>Horizontal centring is easily achieved by using an <code>auto</code> value for <code>margin-left</code> and <code>margin-right</code>, but vertical centring is not so easy; there are <a href="http://blog.themeforest.net/tutorials/vertical-centering-with-css/">a handful of different methods</a>, but they involve either extra markup, or a fixed height on the centred element, or both. FlexBox does away with those drawbacks.</p>
<p>In this example I’m going to centre an element horizontally and vertically inside it’s parent, using these rules:</p>
<pre>.parent {
  box-align: center;
  box-pack: center;
  display: box;
}
.child { box-flex: 0; }</pre>
<p>The <code>box-align</code> and <code>box-pack</code> properties control the distribution of unused space on the horizontal and vertical axes (respectively), so giving them a value of <code>center</code> means all space will be distributed equally on all sides, positioning its child in the dead centre. The <code>box-flex</code> value of <i>0</i> on the child element just means it will retain its set dimensions and not be resized.</p>
<h2>Start and End Alignment</h2>
<p>In my third example I’m going to use a fairly common design pattern, which is two elements positioned at opposite ends of their parent, on the same axis. This is quite often seen in headers and footers, and the way to do this currently is using either absolute positioning or floats; both involve setting dimensions, so aren’t very flexible.</p>
<p>With FlexBox this can be done with the <code>box-align</code> property we saw in the previous example, but with a value of <code>justify</code>:</p>
<pre>.footer {
  box-align: justify;
  display: box;
}
.footer p { box-flex: 0; }</pre>
<p>The two <code>p</code> elements in the footer have the <code>box-flex</code> value of <em>0</em> so retain their dimensions, and are displayed justified in their parent — that is, one at each end of the <i>.footer</i> element. Note that this value doesn’t work in Firefox’s implementation of FlexBox; hopefully that will be resolved in the near future.</p>
<h2>Wrapping Up</h2>
<p>So can you use FlexBox on your sites today? I think so, if you take care; you can detect support using <a href="http://www.modernizr.com/">Modernizr</a>, and provide fallbacks for incompatible browsers. A couple of things to bear in mind, however: first, Firefox’s implementation is quite old and not quite in sync with the spec, as well as having some bugs (I intend to write more about that in a future post); second, the syntax is going to change in the future, and perhaps behaviour will change slightly too.</p>
<p>You can read about the new syntax in <a href="http://www.w3.org/TR/css3-flexbox/">the latest version of the spec</a>; I know the WebKit team are implementing this right now, so it may appear in the very near future. But these prefixed properties should be supported for a while to come, so it’s reasonably safe to use them, in my opinion; although perhaps not if you’re going to hand the site over to a client and never touch it again.</p>
 <p><a href="http://www.broken-links.com/?flattrss_redirect&amp;id=1328&amp;md5=6936c022e9c9c4df1cf2f77424aed30b" title="Flattr" target="_blank"><img src="http://www.broken-links.com/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.broken-links.com/2011/08/31/three-practical-uses-for-flexbox/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<atom:link rel="payment" href="http://www.broken-links.com/?flattrss_redirect&amp;id=1328&amp;md5=6936c022e9c9c4df1cf2f77424aed30b" type="text/html" />
	</item>
		<item>
		<title>On Mark Boulton’s Grids Proposal</title>
		<link>http://www.broken-links.com/2011/08/11/on-mark-boultons-grids-proposal/</link>
		<comments>http://www.broken-links.com/2011/08/11/on-mark-boultons-grids-proposal/#comments</comments>
		<pubDate>Thu, 11 Aug 2011 21:23:00 +0000</pubDate>
		<dc:creator>Peter</dc:creator>
				<category><![CDATA[css]]></category>
		<category><![CDATA[Opinion]]></category>
		<category><![CDATA[standards]]></category>
		<category><![CDATA[feedback]]></category>
		<category><![CDATA[grids]]></category>
		<category><![CDATA[typographic grids]]></category>

		<guid isPermaLink="false">http://www.broken-links.com/?p=1260</guid>
		<description><![CDATA[I recently wrote a feature for .net Magazine, The Future of CSS Layouts, which took a look at several proposed CSS modules intended to provide more flexibility for laying out websites. One of those modules, Grid Layout, has been experimentally implemented in IE10 Platform Preview, and it prompted Mark Boulton to propose an alternative approach [...]]]></description>
			<content:encoded><![CDATA[<p>I recently wrote a feature for .net Magazine, <a href="http://www.netmagazine.com/features/future-css-layouts">The Future of CSS Layouts</a>, which took a look at several proposed CSS modules intended to provide more flexibility for laying out websites. One of those modules, <a href="http://dev.w3.org/csswg/css3-grid-align/">Grid Layout</a>, has been experimentally implemented in <a href="http://ie.microsoft.com/testdrive/">IE10 Platform Preview</a>, and it prompted Mark Boulton to propose an alternative approach in his article <a href="http://www.markboulton.co.uk/journal/comments/rethinking-css-grids">Rethinking CSS Grids</a>.</p>
<p>While I think the alternative syntax is pretty robust, I did detect a couple of flaws in it which I promised Mark I would write about, and that’s what I’ll do in this article. Before I get to that, I just want to quickly address one of the key points from his proposal.</p>
<p><span id="more-1260"></span></p>
<h2>Defining a Grid</h2>
<blockquote><p>grids have been around for quite a while and there is established words for things like Columns, Fields, Modules and Gutters. It’s my feeling that the CSS grid module should speak the same language as designers, not that of developers.</p></blockquote>
<p>I’m not certain that I wholeheartedly agree with this; not that the Grid Layout syntax uses terms that are more familiar from tables or spreadsheets rather than typographic grids, as this is certainly true; but the contention in the second sentence, that the Grid module should be aimed at designers rather than developers.</p>
<p>The language of grids may be obvious to those that are trained in using them, but I wonder just how many people that includes. For the non-typographically savvy I think it’s not as literal; speaking for myself I find Rows and Cells more logical than Fields and Modules.</p>
<p>And while Mark’s proposed syntax works well for typographic grids, it does mean that making an irregular grid becomes extremely hard. Using the Grid Layout syntax you can make regular and irregular grids very easily, whereas this new proposal is really intended only to make one very strict type of grid.</p>
<p>Anyway, that’s kind of besides the point; I’m not strongly convinced of my own argument, just thought it was worth raising. But I’ll take Mark’s premise at face value and go along with the syntax that he proposes. If that’s a more logical way to think about grids, then the syntax seems pretty solid. There are, however, a few potential problems I can see with it.</p>
<h2>Fractions</h2>
<p>The first problem is that basing the grid on modules eliminates the effectiveness of the <code>fr</code> (<em>fraction</em>) unit. In the example in section 4 of the article a three column grid is created using this code (NB: I’ve changed some of the values a little to bring them into line with existing properties):</p>
<pre>div {
grid-columns: 3md 1fr 2md;
grid-x-count: 10;
}</pre>
<p>As this is on a grid made of 10 horizontal modules, the central column is five modules wide. But what if we used four columns, with two fraction units?</p>
<pre>div { grid-columns: 3md <mark>1fr 1fr</mark> 2md; }</pre>
<p><img src="/wp-content/uploads/2011/08/grids-fractions.png" alt="" width="580" height="296" /></p>
<p>That would make the second and third columns 2.5 modules wide. I’m presuming that we can’t have fractions of modules, so if the fraction unit can’t be used to create fractions then it becomes useless (or, at least, very hard to work with). In this case we should just go back to using the <code>md</code> unit for everything:</p>
<pre>div { grid-columns: 3md <mark>5md</mark> 2md; }</pre>
<p>And if we’re doing it this way, then we don’t need the proposed <code>grid-x-count</code> property any more; that count can be obtained by the sum of the <code>md</code> units in <code>grid-columns</code>. This brings it a little closer to the existing Grid Layout syntax.</p>
<h2>Breaking the Grid</h2>
<p>The second problem is that the grid is now very hard to break out of. What if, after we’ve laid out our grid, we wanted to put an item that broke into the gutters:</p>
<p><img src="/wp-content/uploads/2011/08/grids-break.png" alt="" width="580" height="296" /></p>
<p>How do I position that? Unlike in the Grid Layout syntax, gutters aren’t available as slots to position elements in. I could use relative positioning to move it into the gutter, but how do I also expand the element so that it’s larger than the modules it covers? Maybe with padding:</p>
<pre>div {
left: -21px;
padding: 21px;
position: relative;
top: -21px;
}</pre>
<p>But if, in this box model, padding is added to make the element bigger, then how would I put put internal padding on an element which I didn’t want to get bigger? A possible alternative solution to this would be to add a new property, something like:</p>
<pre>grid-gutter-span: all;</pre>
<p>This could also have the keywords <em>top</em>, <em>right</em>, <em>bottom</em>, <em>left</em>, or <em>none</em>, to provide flexibility to the elements that are placed in the grid.</p>
<h2>Conclusion</h2>
<p>For defining a typographic grid I think this syntax is pretty well thought out, certainly for a first draft, and the problems I’ve pointed out here are not insurmountable, but just require some more consideration. I hope that the feedback I’ve given is constructive — well, most of all I hope that I’ve understood the proposed syntax correctly and not made any stupid mistakes! If you’ve anything you’d like to add, feel free to leave a comment.</p>
 <p><a href="http://www.broken-links.com/?flattrss_redirect&amp;id=1260&amp;md5=5b586789412316d1249f41b1800f1d55" title="Flattr" target="_blank"><img src="http://www.broken-links.com/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.broken-links.com/2011/08/11/on-mark-boultons-grids-proposal/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<atom:link rel="payment" href="http://www.broken-links.com/?flattrss_redirect&amp;id=1260&amp;md5=5b586789412316d1249f41b1800f1d55" type="text/html" />
	</item>
		<item>
		<title>A Busted Neon Sign with CSS Animations</title>
		<link>http://www.broken-links.com/2011/06/27/a-busted-neon-sign-with-css-animations/</link>
		<comments>http://www.broken-links.com/2011/06/27/a-busted-neon-sign-with-css-animations/#comments</comments>
		<pubDate>Mon, 27 Jun 2011 13:32:01 +0000</pubDate>
		<dc:creator>Peter</dc:creator>
				<category><![CDATA[Asides]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[animation]]></category>
		<category><![CDATA[css animations]]></category>
		<category><![CDATA[css3]]></category>
		<category><![CDATA[demo]]></category>
		<category><![CDATA[keyframes]]></category>

		<guid isPermaLink="false">http://www.broken-links.com/?p=1230</guid>
		<description><![CDATA[For no particular reason other than idle curiosity, I made a demo of a broken neon sign, using CSS Animations (you’ll need Firefox 5, Safari or Chrome to see it). It doesn’t degrade well at the moment, the root cause of which is down to what I think is a bug in Firefox’s implementation — [...]]]></description>
			<content:encoded><![CDATA[<p>For no particular reason other than idle curiosity, I made <a href="http://www.broken-links.com/tests/animations/">a demo of a broken neon sign, using CSS Animations</a> (you’ll need Firefox 5, Safari or Chrome to see it). It doesn’t degrade well at the moment, the root cause of which is down to what I think is a bug in Firefox’s implementation — I’ll need to confirm that.</p>
<p>One quick learning from making this: it would be really useful to have <a href="http://www.xanthir.com/blog/b4Av0">CSS Mixins</a> when using a lot of repetitive keyframes, as I do in this animation. The W3C seem to be quite against them, however.</p>
 <p><a href="http://www.broken-links.com/?flattrss_redirect&amp;id=1230&amp;md5=288a32a9d41087a526f4811eab2dcb3a" title="Flattr" target="_blank"><img src="http://www.broken-links.com/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.broken-links.com/2011/06/27/a-busted-neon-sign-with-css-animations/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<atom:link rel="payment" href="http://www.broken-links.com/?flattrss_redirect&amp;id=1230&amp;md5=288a32a9d41087a526f4811eab2dcb3a" type="text/html" />
	</item>
		<item>
		<title>Styling HTML5 Form Validation Errors</title>
		<link>http://www.broken-links.com/2011/06/16/styling-html5-form-validation-errors/</link>
		<comments>http://www.broken-links.com/2011/06/16/styling-html5-form-validation-errors/#comments</comments>
		<pubDate>Thu, 16 Jun 2011 13:25:37 +0000</pubDate>
		<dc:creator>Peter</dc:creator>
				<category><![CDATA[css]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[forms]]></category>
		<category><![CDATA[html5]]></category>

		<guid isPermaLink="false">http://www.broken-links.com/?p=1213</guid>
		<description><![CDATA[Back in March I wrote about HTML5 Form validation and the problem with the appearance of error messages. I proposed a syntax for styling the error messages, and shortly after I published the post, I submitted the proposal to the W3C via the www-style mailing list. I’ll discuss quickly the result of that submission, but [...]]]></description>
			<content:encoded><![CDATA[<p>Back in March I wrote about <a href="http://www.broken-links.com/2011/03/28/html5-form-validation/">HTML5 Form validation</a> and the problem with the appearance of error messages. I proposed a syntax for styling the error messages, and shortly after I published the post, I submitted the proposal to the <a href="http://w3.org/"><abbr title="World Wide Web Consortium">W3C</abbr></a> via the <a href="http://lists.w3.org/Archives/Public/www-style/">www-style mailing list</a>.</p>
<p>I’ll discuss quickly the result of that submission, but first I should mention that I’ve since found out that the Google Chrome developers have already implemented their own syntax, and it’s not too far removed from what I proposed. Before I get to that, however, allow me to gripe.</p>
<p><span id="more-1213"></span></p>
<p>What the feedback on my proposal would be, I have no idea — and may never know. As I mentioned, I submitted it via the www-style list, but my emails were never published. I was told that as a new user my mail would be held for approval, but that was six weeks ago. I emailed the list administrator and tried to submit it again, but never got a reply.</p>
<p>I have to say that, as a developer trying to get involved in the standards process — which is what the <abbr>W3C</abbr> claim they want — this was not a good experience for me. I had a serious proposal which I wanted to open up for discussion, but was completely unable to do so and met with a wall of silence. I’m not against there being a moderation and approval process, but only if there’s an eventual result and some kind of communication throughout.</p>
<p>OK, with the moan out of the way, I’ll talk about the Chrome validation error styling syntax. The error message, known as the ‘bubble’, is made of four <code>div</code> elements which are accessible via four pseudo-classes, each of which applies to a different <code>div</code> in the bubble:</p>
<pre>::-webkit-validation-bubble {}
::-webkit-validation-bubble-arrow-clipper {}
::-webkit-validation-bubble-arrow {}
::-webkit-validation-bubble-message {}</pre>
<p>The parent element is <code>::-webkit-validation-bubble</code>, which sets the size and position of the bubble, and has two child elements. The first child is <code>::-webkit-validation-bubble-arrow-clipper</code>, which has its own child, <code>::-webkit-validation-bubble-arrow</code>; these two set the styles of the tail of the bubble. The body of the bubble is the second child, <code>::-webkit-validation-bubble-message</code>, which contains the text node with the error itself.</p>
<p>I’ve made a quick example which you can see in action on the <a href="http://www.broken-links.com/tests/html5forms/">HTML5 Forms demo</a> — you’ll need to use Chrome to see it, and you can view the source to see the styles I’ve used. Below is an image comparison of the default message (top) and my styled version. Note: I took a little criticism for calling the default styles ‘ugly’ in my original post, and I don’t want to claim that mine is any better, because it’s really not; it’s just different, to act as an example.</p>
<p><img width="349" height="246" alt="Default (top) and styled validation error message" src="/wp-content/uploads/2011/06/error-bubble-2.png"></p>
<p>You can <a href="http://trac.webkit.org/wiki/Styling%20Form%20Controls#WebKitr82180orlater">read a little more about this syntax on the WebKit wiki</a>, and also see <a href="http://trac.webkit.org/browser/trunk/Source/WebCore/css/html.css?rev=82180#L588">the default styles</a> the error message uses. I’ve no idea if Firefox or Opera implement their error messages in the same way so don’t know if this is likely to become standard, or will always remain a WebKit-only syntax. I have to say it’s not really an elegant solution, but it works.</p>
 <p><a href="http://www.broken-links.com/?flattrss_redirect&amp;id=1213&amp;md5=d4d1a1dec76bde2977b63f8c3e59eba7" title="Flattr" target="_blank"><img src="http://www.broken-links.com/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.broken-links.com/2011/06/16/styling-html5-form-validation-errors/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		<atom:link rel="payment" href="http://www.broken-links.com/?flattrss_redirect&amp;id=1213&amp;md5=d4d1a1dec76bde2977b63f8c3e59eba7" type="text/html" />
	</item>
		<item>
		<title>Introducing The Book of CSS3</title>
		<link>http://www.broken-links.com/2011/05/10/introducing-the-book-of-css3/</link>
		<comments>http://www.broken-links.com/2011/05/10/introducing-the-book-of-css3/#comments</comments>
		<pubDate>Tue, 10 May 2011 13:53:16 +0000</pubDate>
		<dc:creator>Peter</dc:creator>
				<category><![CDATA[Books]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[book]]></category>
		<category><![CDATA[css3]]></category>
		<category><![CDATA[the book of css3]]></category>

		<guid isPermaLink="false">http://www.broken-links.com/?p=1194</guid>
		<description><![CDATA[After more than a year of work, I’m absolutely proud and delighted to introduce my first book: The Book of CSS3. As well as the prosaic title, the subtitle — A Developer’s Guide to the Future of Web Design — should give you some idea of what to expect from it: it’s a book written [...]]]></description>
			<content:encoded><![CDATA[<p>After more than a year of work, I’m absolutely proud and delighted to introduce my first book: <a href="http://nostarch.com/css3.htm">The Book of CSS3</a>. As well as the prosaic title, the subtitle — A Developer’s Guide to the Future of Web Design — should give you some idea of what to expect from it: it’s a book written by a developer, for developers; in other words, by me, for you.</p>
<p><img src="/wp-content/uploads/2011/05/cover-250.png" alt="The Book of CSS3" width="250" height="330" class="thebookofcss3">The book doesn’t aim to teach CSS from scratch; it presumes that you’re a working developer with a good knowledge of web technologies, especially CSS, and you want to take your knowledge to the next level. It aims to translate the sometimes complex specification into something that’s easier to understand, and has plenty of code examples and illustrations to aid in achieving that aim.</p>
<p>It’s not a book of step-by-step techniques, it’s for keeping at hand to use as a resource; and as such, I believe it’s the first book of it’s kind on this topic. There are plenty of books available which teach you about the exciting visual elements of CSS3 like animations, border radius, and so on, and while my book certainly covers those areas it also goes deeper into looking at new layout methods and what we can expect to see in the future.</p>
<p>If you’re a regular reader of my blog you should find plenty in the book that you’ll enjoy; many of the more popular posts I’ve written, such as <a href="http://www.broken-links.com/2011/02/21/using-media-queries-in-the-real-world/">Using Media Queries in the Real World</a> or <a href="http://www.broken-links.com/2009/11/26/css-gradient-syntax-comparison-of-mozilla-and-webkit/">CSS gradient syntax: comparison of Mozilla and WebKit</a>, have been adapted for the book in one way or another.</p>
<p>If you’d like to read a sample the publisher has made available <a href="http://www.nostarch.com/download/CSS3_ch6.pdf">a PDF of Chapter 6: Text Effects and Typographic Styles</a>.</p>
<p>You can <a href="http://nostarch.com/css3.htm">buy The Book of CSS3 direct from the publisher</a>, No Starch Press, as either a print copy with free eBook (PDF, ePub or Mobi), or eBook alone. You can also order the print book from many online retailers including <a href="http://www.amazon.co.uk/gp/product/1593272863?ie=UTF8&#038;tag=brokenlinks-21&#038;linkCode=as2&#038;camp=1634&#038;creative=6738&#038;creativeASIN=1593272863">Amazon UK</a> and <a href="http://www.amazon.com/gp/product/1593272863?ie=UTF8&#038;tag=broklink-20&#038;link_code=as3&#038;camp=211189&#038;creative=373489&#038;creativeASIN=1593272863">Amazon USA</a>.</p>
<p>There’s a <a href="http://thebookofcss3.com/">companion website</a> with examples and resources from the book, which I aim to keep updated so that it becomes a constant online reference guide; with browser implementation of CSS3 changing so quickly it’s inevitable that some references in the print book will become outdated in the long term, so the website should go some way to combating that.</p>
<p>I’m anxiously awaiting the first reviews, although initial feedback has been promising. I hope it’s popular not only because I put a lot of time and effort into it — the sense of achievement I have from writing it has been worth all of that effort on it’s own — but also because I believe it’s a book that will be of great use to many people. (I know, I would say that!)</p>
 <p><a href="http://www.broken-links.com/?flattrss_redirect&amp;id=1194&amp;md5=1f579281f71fd19c0d7460fb0ee69909" title="Flattr" target="_blank"><img src="http://www.broken-links.com/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.broken-links.com/2011/05/10/introducing-the-book-of-css3/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<atom:link rel="payment" href="http://www.broken-links.com/?flattrss_redirect&amp;id=1194&amp;md5=1f579281f71fd19c0d7460fb0ee69909" type="text/html" />
	</item>
	</channel>
</rss>

