A List Apart

Menu
Issue № 275

Duty now for the future: HTML 5 and extensible semantics; plus the ins and outs of mobile CSS.

Return of the Mobile Stylesheet

by Dominique Hazaël-Massieux · 35 Comments

At least 10% of your visitors access your site over a mobile device. They deserve a good experience (and if you provide one, they'll keep coming back). Converting your multi-column layout to a single, linear flow is a good start. But mobile devices are not created equal, and their disparate handling of CSS is like 1998 all over again. Please your users and tame their devices with handheld style sheets, CSS media queries, and (where necessary) JavaScript or server-side techniques.

Semantics in HTML 5

by John Allsopp · 107 Comments

The BBC's dropping of hCalendar because of accessibility and usability concerns demonstrates that we have pushed the semantic capability of HTML far beyond what it can handle. The need to clearly and unambiguously add rich, meaningful semantics to markup is a driving goal of the HTML 5 project. Yet HTML 5 has two problems: it is not backward compatible because its semantic elements will not work in 75% of our browsers; and it is not forward compatible because its semantics are not extensible. If “making up new elements” isn't the solution, what is?

More from A List Apart

Columnists

Matt Griffin on How We Work

Pricing the Web

If you plan to bill your clients, you need a method for putting a price on what you do. The variables are always money, time, and scope of work, but the way they relate to each other can bring different client motivations to the foreground and fit different agency needs.

From the Blog

Driving Phantom from Grunt

For this example, we're going to build a Grunt task that takes a screen shot of the pages we're building (similar to Wraith, but far less advanced). There are multiple parts to make this work, so let's break it down. First, we will write a PhantomJS script that renders each page. Second, we make a NodeJS function that calls this script. Finally, we make a GruntJS task that calls that Node function. Fun!