A history of the Apple mouse in CSS

Wdd Logo.
October 24, 2013
A history of the Apple mouse in CSS.

thumbnailTake a look at this incredible Pen, it's an homage to how radically the Apple mouse has evolved over the years. Using a clever blend of CSS drawing and transitions, Josh Bader illustrates the beautiful simplicity of a device that — without giving a second glance — we use every single day.

Clicking through the different mice (how meta!) is nostalgic. It is reminiscent of a time when what was possible to accomplish with the peripheral was nowhere near as impressive as it is today. With apps like BetterTouchTool and Apple’s own operating system, we can interact with the mouse in ways that Doug Engelbart could never have imagined in 1963 (twenty years before the original Lisa Mouse).

Watching the seamless transitions between the different models reveals some peculiar similarities in the mice, and gives a sense of the mouse evolving. The apple logo, while not always given the same emphasis, is present in all of the designs. We begin to see the slow disappearance of the standard single-click interface in 1998 with the release of Apple’s USB Mouse (iMac Mouse in the pen).

By reusing all of the same basic elements, and applying transitioning styles to each one, the code is, like the subject matter, elegant and simple. Using just a handful of <i> elements with mouse-specific styles applied to each of them, Bader has created a unique work of art that can be appreciated by even those who may be less CSS-savvy.

mice_001

mice_002

mice_003

mice_004

mice_005

mice_006

mice_007

mice_008

How's it done?

As previously stated, each mouse reuses some of the same components. This allows the markup to be concise and the CSS to be structured in a logical way that is easy to read. Each mouse is represented by its own block similar to what is displayed below:

/* Name */
/* Shapes and Colors */
.name.mouse, .lisa.mouse .top { }
.name.mouse { }
.name.mouse .top { }
.name .cable, .lisa .cable i, .lisa .button { }
.name .cable { }

/* Common styles for all “cable” elements like side buttons or cable protectors */
.name .cable i { }

/* Handles size and positioning of “cable” elements */
.name .cable i:nth-child(1) { }
.name .cable i:nth-child(2) { width: 60px; height: 10px; top: 90px; left: -25px; }
.name .cable i:nth-child(3) { }
.name .cable i:nth-child(4) { }
.name .cable i:nth-child(5) { }

/* These are self-explanatory */
.name .button { }
.name .logo { }

I’ve stripped out the actual styles so that we can focus on the actual structure of the CSS. It’s actually not as complicated as one might think. If you’d like to dig into what styles are applied where, refer to the original source.

The shapes and colors are mostly accomplished using the border-radius property with Multiple Box-Shadows, while the actual size and placement of the mouse-specific elements is handled by the cable’s child elements.

Finally, with some clever Javascript, Bader updates the parent mouse class based on the list-item that the user clicks on:

$('li').on('click', function() {
var self = $(this);
$('.active').removeClass('active');
self.addClass('active');
self.closest('ul').attr('data-mouse', self.data('mouse') + ' mouse');
$('.mouse').removeAttr('class').addClass('mouse ' + self.data('mouse'));
});

Overall, this is very fun bit of code to play around with, even if just for the nostalgia. The patterns used here could easily be applied to other projects. It’s fascinating to see these projects come alive on a site like Codepen, and the open nature of the site means that anyone is able to fork this pen and change it in any way they see fit.

Have you tried drawing in just CSS? Which is your favorite Apple mouse? Let us know in the comments.

WDD Staff

WDD staff are proud to be able to bring you this daily blog about web design and development. If there's something you think we should be talking about let us know @DesignerDepot.

Read Next

15 Best New Fonts, July 2024

Welcome to our monthly roundup of the best fonts we’ve found online in the last four weeks. This month, there are fewer…

20 Best New Websites, July 2024

Welcome to July’s round up of websites to inspire you. This month’s collection ranges from the most stripped-back…

Top 7 WordPress Plugins for 2024: Enhance Your Site's Performance

WordPress is a hands-down favorite of website designers and developers. Renowned for its flexibility and ease of use,…

Exciting New Tools for Designers, July 2024

Welcome to this July’s collection of tools, gathered from around the web over the past month. We hope you’ll find…

3 Essential Design Trends, July 2024

Add some summer sizzle to your design projects with trendy website elements. Learn what's trending and how to use these…

15 Best New Fonts, June 2024

Welcome to our roundup of the best new fonts we’ve found online in the last month. This month, there are notably fewer…

20 Best New Websites, June 2024

Arranging content in an easily accessible way is the backbone of any user-friendly website. A good website will present…

Exciting New Tools for Designers, June 2024

In this month’s roundup of the best tools for web designers and developers, we’ll explore a range of new and noteworthy…

3 Essential Design Trends, June 2024

Summer is off to a fun start with some highly dramatic website design trends showing up in projects. Let's dive in!

15 Best New Fonts, May 2024

In this month’s edition, there are lots of historically-inspired typefaces, more of the growing trend for French…

How to Reduce The Carbon Footprint of Your Website

On average, a web page produces 4.61 grams of CO2 for every page view; for whole sites, that amounts to hundreds of KG…

20 Best New Websites, May 2024

Welcome to May’s compilation of the best sites on the web. This month we’re focused on color for younger humans,…