Archive for September, 2011

20 High Quality, Extraordinary & Free Web PSD Templates


  

No matter who you are or what your business may be, you will always want your website design to stand out. Having an extraordinary website allows you to stay on the mind of most of your visitors and can help translate how unique your product or service is to someone.

The problem with creating a standout site is sometimes you have no clue where to start. You may have the colors you want, and you may simply have an idea; but as far as it really being unique, you don’t have a single clue. It can sometimes be hard to start with absolutely nothing and try to make it into something that will stick with someone.

Fortunately, there are folks out there who help out by creating fabulous PSD templates to help anyone get started on making a website. The unfortunate truth however, is sometimes, most of these freebies aren’t worth even going through. So, today we’ve created a list of 20 amazing PSD templates to do the sorting work for you and get you inspired with your own website design.

The Templates

All of these PSD templates are free. Please read the license agreements carefully before using the PSD’s exclusively for commercial use.

Gallerise

This is a great place to start off this round-up as this template comes in 9 different colors and is absolutely free. The design is very clean and clear and leaves a lot of room for excess developments.

Template Features:

  • 16 PSD files; 9 different color schemes.
  • Doubles as a Photo Gallery.
  • Well organized for easy editing.
View | Download (Pay With a Tweet)

 

Sleeko

This is a one page template, made with most designers and creatives in mind. Showing off a very clean design and use of trendy elements, this is a no-brainer for any one looking to begin on a single page portfolio.

Template Features:

  • Uses 960 px grid system.
  • Designed contact form.
  • Comes with complimentary social media icons.

Ecommerce Web Template

When doing e-shops and e-commerce, it can be pretty challenging to think of new ways to reinvent it, but this template here has done great at making a welcoming and fun website. A great start for a creative, fun, or family product.

Template Features:

  • Fresh, bright, clean design.
  • Comes with necessary buttons and icons for a web shop.
  • Uses standard fonts (Arial and Rockwell).

Redux Business Website Template

Perfect for pretty much any product or service, this clean web PSD pretty much comes with everything you need. You can use it as is or put your own little spin on it.

Template Features:

  • Flawless design, easily customizable for all. 
  • Leaves room for lots of modern features (slide shows, video screen shots, etc.)
  • Well organized for easy editing.

3D Creative Layout

The navigation of this particular template is the star here–and when coded you’d probably use a script that makes it work similar to most Mac navigation. It’s a very creative concept and can be widely used.

Template Features:

  • Super unique layout.
  • Includes several icons.

Church Website Layout

This is a pretty self explanatory template, with a great layout and attention to detail. It doesn’t just make it look like you’re just going to ‘church’, but to an ‘experience.’ This template could work well with churches as well as bands and musicians.

Template Features:

  • Fully designed photo slider.
  • Social media icons included.

Agregado LifeStream Theme

This theme is not only a PSD, but it is also a WordPress theme. Fortunately, we all don’t use WordPress, so the PSD is available. This is another versatile template, with a wonderful color scheme.

Template Features:

  • WordPress theme is free as well.
  • Fully designed contact form, comments and tags.
  • Uses standard fonts.

Modern Design Studio Template

Textures can add that extra ‘umph’ to sites and this template demonstrates that well. Playing around with textures pretty well without crossing the line and over doing it.

Template Features:

  • Modern, usable design.
  • Uses standard fonts.

Creative Portfolio Template

This is a super crisp and clean template that utilizes a really fresh take on portfolio layouts, not to mention the design is pretty much impeccable. This is definitely a template to keep near by.

Template Features:

  • Resizing is easy with ‘Smart Objects’
  • Includes useful social media icons.
  • 6 PSDs; Home Page, About, Contact, Services, Blog Post, Blog Entries.

Events PSD Template

A one page website that is a great splash site or small site for upcoming events. You’re able to show off exhibits or performers/speakers as well as get your audience to purchase tickets. This is a nice, quick fix for many website needs.

Template Features:

  • Extremely unique design.
  • Uses 960 pixel grid system.
  • Fully customizable contact form and purchase buttons.
View | Download (must Re-Tweet)

Yellow! Minimalist Blog Template

Minimalism is a style that can work for almost any person or product. Here, we have a nice simple blog template, with a wonderful pop of color.

Template Features:

  • Unique one-column design.
  • 2 PSDs; Home Page and Inside Page.
  • Minimalist design

Crisp Presentation

A good mix of crisp, clean and beautiful work. This template uses a very sophisticated color palette, and also has a nicely thought out layout.

Template Features:

  • 2 PSD files; Home Page and Inside Page.
  • Includes useful icons.
  • Extremely versatile design.

oWire Template

This template brings a fresh look at websites, especially their headers. Boasting a colorful palette with clean design elements, this is a great site for agencies or designers.

Template Features:

  • 4 PSD files; Home Page, About, Contact, and Work.
  • Creative and grungy design.
  • Comes with icons and designed contact form.

Education Template

This template sports a very unorthodox layout and design for an education website, but in a very good way. It could use some help as far as the typography is concerned, in regards to making all that clearer; but this template is a great start.

Template Features:

  • 2PSD files; Home Page and Inside Page.
  • Unorthodox and fun layout.
  • Uses standard fonts.

Digital Rust Template

With seven different PSDs, and a very fresh look at website design, this template is nothing short of awesome, and is extremely high quality. This is a great template if you are looking to do something new without straying too far away from the basics.

Template Features:

  • 7 PSD files; Home Page, About, Work, Work Item, Contact, Blog Post and Blog Page.
  • Easy resizing using ‘Smart Objects’ and shapes.
  • Well organized for easy editing.

Inkfolio

This is a rather simple template, but the detail in the template’s design is extremely noteworthy. Great for small businesses and designers alike!

Template Features:

  • Uses stand fonts.
  • Versatile template.
  • Easily editable.

Creative Mass: One Page Portfolio

This is a wonderful one page site, with a dark theme–great for artists and small products. The detail here is amazing.

Template Features:

  • Uses 960 pixel grid system.
  • Includes complimentary icons and buttons.

Clean Tech

This template is great for businesses centered around technology. The design is exceptionally modern and serves as a great starting point or as a complete site.

Template Features:

  • 3 PSD files; Home page, Inside page and Contact.
  • Fully designed contact form.

Grunge Designer Portfolio

While this was made to be a web designer portfolio, one could easily extend the uses of this to work with businesses and products. This is a great template to get you started with your site.

Template Features:

  • Textures and Icons available on Template Webpage.
  • Customized image slider.

Cafe and Restaurant Template

This template has a very nice color scheme and is very well thought out as far as the layout for all things restaurant. It makes good sense and the design draws you in very easily.

Template Features:

  • Stylish design for restaurants.
  • Uses 960 pixel grid system.
  • Well organized for easy editing.

How’d You Like It?

Being creative is extremely important, so hopefully this collection of PSD’s can catapult you to an area of success. As mentioned, these are great starting points or even ending points depending on what you like (make sure you check the license). If we missed an excellent PSD template, feel free to let us know! Also, leave us a comment and tell us which one was your favorite.

(rb)


Create An Animated Bar Graph With HTML, CSS And jQuery





 



 


People in boardrooms across the world love a good graph. They go nuts for PowerPoint, bullet points and phrases like “run it up the flagpole,� “blue-sky thinking� and “low-hanging fruit,� and everything is always “moving forward.� Backwards is not an option for people who facilitate paradigm shifts in the zeitgeist. Graphs of financial projections, quarterly sales figures and market saturation are a middle-manager’s dream.

screenshot

How can we as Web designers get in on all of this hot graph action? There are actually quite a few ways to display graphs on the Web. We could simply create an image and nail it to a Web page. But that’s not very accessible or interesting. We could use Flash, which is quite good for displaying graphs — but again, not very accessible. Besides, designers, developers and deities are falling out of love with Flash. Technologies such as HTML5 can do many of the same things without the need for a plug-in. The new HTML5 <canvas> element could even be adapted to the task. Plenty of charting tools are online that we might use. But what if we wanted something a little more tailored?

There are pros and cons to the wide range of resources available to us, but this tutorial will not explore them all. Instead, we’ll create our graph using a progressively enhanced sprinkling of CSS3 and jQuery. Because we can.

What Are We Making?

We’re making this. And more! Here are some possibilities on how you can extend the techniques explored in this tutorial:

  • A progress bar that indicates how long until the end of all humanity in the event of a zombie plague;
  • A graph indicating the decline in safe outdoor activities during a zombie plague;
  • A frighteningly similar graph indicating the decline in manners during a zombie plague;
  • The increase of people who were unaware of the zombie plague because they were sharing with all of their now-deceased friends on Facebook what they did on FarmVille.

Or you could create a graph or quota bar that simply illustrates something useful and less full of dread and zombies. So, let’s get on with it.

What You’ll Need

  • A text or HTML editor. Take your pick; many are out there.
  • jQuery. Practice safe scripting and get the latest one. Keep the jQuery website open so that you can look up the documentation as you go.
  • Possibly an image editor, such as Paint, to mock up what your graph might look like.
  • A modern and decent Web browser to preview changes.

That should do it. Please note that this tutorial is not designed as an introduction to either HTML, CSS, jQuery or zombies. Some intermediate knowledge of these three technologies and the undead is assumed.

The Mark-Up

You can create the underlying HTML for a graph in a number of ways. In this tutorial, we’ll start with a table, because it will make the most sense visually if JavaScript or CSS is not applied. That’s a big checkmark in the column for accessibility.

Quick! You’ve just been given some alarming figures. The population of tanned zombies is projected to spiral out of control in the next few years. The carbon tigers and blue monkeys are under immediate threat. Then the tanned zombies will probably come for us. But you’re just a designer. What could you possibly do to help?

I know! You could make a Web page that illustrates our imminent demise with nice, calming, smoothly animated graphics!

To begin, let’s put this data into a table, with columns for each year, and rows for the different species.

<!doctype html>
<html lang="en">
   <head>
      <meta charset="utf-8">
      <meta name="viewport" content="width=1024">
      <title>Example 01: No CSS</title>
   </head>

   <body>
      <div id="wrapper">
         <div class="chart">
            <h3>Population of endangered species from 2012 to 2016</h3>
            <table id="data-table" border="1" cellpadding="10" cellspacing="0"
            summary="The effects of the zombie outbreak on the populations
            of endangered species from 2012 to 2016">
               <caption>Population in thousands</caption>
               <thead>
                  <tr>
                     <td>&nbsp;</td>
                     <th scope="col">2012</th>
                     <th scope="col">2013</th>
                     <th scope="col">2014</th>
                     <th scope="col">2015</th>
                     <th scope="col">2016</th>
                  </tr>
               </thead>
               <tbody>
                  <tr>
                     <th scope="row">Carbon Tiger</th>
                     <td>4080</td>
                     <td>6080</td>
                     <td>6240</td>
                     <td>3520</td>
                     <td>2240</td>
                  </tr>
                  <tr>
                     <th scope="row">Blue Monkey</th>
                     <td>5680</td>
                     <td>6880</td>
                     <td>6240</td>
                     <td>5120</td>
                     <td>2640</td>
                  </tr>
                  <tr>
                     <th scope="row">Tanned Zombie</th>
                     <td>1040</td>
                     <td>1760</td>
                     <td>2880</td>
                     <td>4720</td>
                     <td>7520</td>
                  </tr>
               </tbody>
            </table>
         </div>
      </div>
   </body>
</html>

View the example below to see how it looks naked, with no CSS or JavaScript applied. The accessibility of this table will enable people using screen readers to understand the data and the underlying message, which is “Run for your life! The zombies are coming!�

screenshot

The easy part is now out of the way. Now, let’s tap into the power of CSS and JavasScript (via jQuery) to really illustrate what the numbers are telling us. Technically, our aim is to create a graph that works in all modern browsers, from IE 8 on.

Did I say all modern browsers? IE 8 is lucky: it gets to hang out with the cool kids. Browsers that support CSS3 will get a few extra sprinkles.

“By Your Powers Combined…�

If you wish to summon Captain Planet, you may have to look elsewhere. If you want to learn how to combine CSS and jQuery to create a graph that illustrates our impending doom at the hands of a growing army of zombies who prefer bronzer over brains, then read on.

The first thing to do is style our table with some basic CSS. This is a nice safety net for people who haven’t enabled JavaScript in their browser.

screenshot

Getting Started In jQuery

We’ll use jQuery to create our graph on the fly, separate from the original data table. To do this, we need to get the data out of the table and store it in a more usable format. Then, we can add to our document new elements that use this data in order to construct our graph.

Let’s get started by creating our main createGraph() function. I’ve abbreviated some of the inner workings of this function so that you get a clearer picture of the structure. Don’t forget: you can always refer to the source code that comes with this tutorial.

Here’s our basic structure:

// Wait for the DOM to load everything, just to be safe
$(document).ready(function() {

   // Create our graph from the data table and specify a container to put the graph in
   createGraph('#data-table', '.chart');

   // Here be graphs
   function createGraph(data, container) {
      // Declare some common variables and container elements
      …

      // Create the table data object
      var tableData = {
         …
      }

      // Useful variables to access table data
      …

      // Construct the graph
      …

      // Set the individual heights of bars
      function displayGraph(bars) {
         …
      }

      // Reset the graph's settings and prepare for display
      function resetGraph() {
         …
         displayGraph(bars);
      }

      // Helper functions
      …

      // Finally, display the graph via reset function
      resetGraph();
   }
});

We pass two parameters to this function:

  1. The data, in the form of a table element;
  2. A container element, where we’d like to place our graph in the document.

Next up, we’ll declare some variables to manage our data and container elements, plus some timer variables for animation. Here’s the code:

// Declare some common variables and container elements
var bars = [];
var figureContainer = $('<div id="figure"></div>');
var graphContainer = $('<div class="graph"></div>');
var barContainer = $('<div class="bars"></div>');
var data = $(data);
var container = $(container);
var chartData;
var chartYMax;
var columnGroups;

// Timer variables
var barTimer;
var graphTimer;

Nothing too exciting here, but these will be very useful later.

Getting The Data

Besides simply displaying the data, a good bar chart should have a nice big title, clearly labelled axes and a color-coded legend. We’ll need to strip the data out of the table and format it in a way that is more meaningful in a graph. To do that, we’ll create a JavaScript object that stores our data in handy little functions. Let’s give birth to our tableData{} object:

// Create table data object
var tableData = {
   // Get numerical data from table cells
   chartData: function() {
      …
   },
   // Get heading data from table caption
   chartHeading: function() {
      …
   },
   // Get legend data from table body
   chartLegend: function() {
      …
   },
   // Get highest value for y-axis scale
   chartYMax: function() {
      …
   },
   // Get y-axis data from table cells
   yLegend: function() {
      …
   },
   // Get x-axis data from table header
   xLegend: function() {
      …
   },
   // Sort data into groups based on number of columns
   columnGroups: function() {
      …
   }
}

We have several functions here, and they are explained in the code’s comments. Most of them are quite similar, so we don’t need to go through each one. Instead, let’s pick apart one of them, columnGroups:

// Sort data into groups based on number of columns
columnGroups: function() {
   var columnGroups = [];
   // Get number of columns from first row of table body
   var columns = data.find('tbody tr:eq(0) td').length;
   for (var i = 0; i < columns; i++) {
      columnGroups[i] = [];
      data.find('tbody tr').each(function() {
         columnGroups[i].push($(this).find('td').eq(i).text());
      });
   }
   return columnGroups;
}

Here’s how it breaks down:

  • Create the columnGroups[] array to store the data;
  • Get the number of columns by counting the table cells (td) in the first row;
  • For each column, find the number of rows in the table body (tbody), and create another array to store the table cell data;
  • Then loop through each row and grab the data from each table cell (via the jQuery text() function), and then add it to the table cell data array.

Once our object is full of juicy data, we can start creating the elements that make up our graph.

Using The Data

Using the jQuery $.each function, we can now loop through our data at any point and create the elements that make up our graph. One of the trickier bits involves inserting the bars that represent each species inside the yearly columns.

Here’s the code:

// Loop through column groups, adding bars as we go
$.each(columnGroups, function(i) {
   // Create bar group container
   var barGroup = $('<div class="bar-group"></div>');
   // Add bars inside each column
   for (var j = 0, k = columnGroups[i].length; j < k; j++) {
      // Create bar object to store properties (label, height, code, etc.) and add it to array
      // Set the height later in displayGraph() to allow for left-to-right sequential display
      var barObj = {};
      barObj.label = this[j];
      barObj.height = Math.floor(barObj.label / chartYMax * 100) + '%';
      barObj.bar = $('<div class="bar fig' + j + '"><span>' + barObj.label + '</span></div>')
         .appendTo(barGroup);
      bars.push(barObj);
   }
   // Add bar groups to graph
   barGroup.appendTo(barContainer);
});

Excluding the headings, our table has five columns with three rows. For our graph, this means that for each column we create, three bars will appear in that column. The following image shows how our graph will be constructed:

screenshot

Breaking it down:

  • For each column, create a container div;
  • Loop inside each column to get the row and cell data;
  • Create a bar object (barObj{}) to store the properties for each bar, such as its label, height and mark-up;
  • Add the mark-up property to the column, applying a CSS class of '.fig' + j to color code each bar in the column, wrapping the label in a span;
  • Add the object to our bars[] array so that we can access the data later;
  • Piece it all together by adding the columns to a container element.

Bonus points if you noticed that we didn’t set the height of the bars. This is so that we have more control later on over how the bars are displayed.

Now that we have our bars, let’s work on labelling our graph. Because the code to display the labels is quite similar, talking you through all of it won’t be necessary. Here’s how we display the y-axis:

// Add y-axis to graph
var yLegend   = tableData.yLegend();
var yAxisList   = $('<ul class="y-axis"></ul>');
$.each(yLegend, function(i) {
   var listItem = $('<li><span>' + this + '</span></li>')
      .appendTo(yAxisList);
});
yAxisList.appendTo(graphContainer);

This breaks down as follows:

  • Get the relevant table data for our labels,
  • Create an unordered list (ul) to contain our list items;
  • Loop through the label data, and create a list item (li) for each label, wrapping each label in a span;
  • Attach the list item to our list;
  • Finally, attach the list to a container element.

By repeating this technique, we can add the legend, x-axis labels and headings for our graph.

Before we can display our graph, we need to make sure that everything we’ve done is added to our container element.

// Add bars to graph
barContainer.appendTo(graphContainer);      

// Add graph to graph container
graphContainer.appendTo(figureContainer);

// Add graph container to main container
figureContainer.appendTo(container);

Displaying The Data

All that’s left to do in jQuery is set the height of each bar. This is where our earlier work, storing the height property in a bar object, will come in handy.

We’re going to animate our graph sequentially, one by one, uno por uno.

One possible solution is to use a callback function to animate the next bar when the last animation is complete. However, the graph would take too long to animate. Instead, our graph will use a timer function to display each bar after a certain amount of time, regardless of how long each bar takes to grow. Rad!

Here’s the displayGraph() function:

// Set the individual height of bars
function displayGraph(bars, i) {
   // Changed the way we loop because of issues with $.each not resetting properly
   if (i < bars.length) {
      // Animate the height using the jQuery animate() function
      $(bars[i].bar).animate({
         height: bars[i].height
      }, 800);
      // Wait the specified time, then run the displayGraph() function again for the next bar
      barTimer = setTimeout(function() {
         i++;
         displayGraph(bars, i);
      }, 100);
   }
}

What’s that you say? “Why aren’t you using the $.each function like you have everywhere else?� Good question. First, let’s discuss what the displayGraph() function does, then why it is the way it is.

The displayGraph() function accepts two parameters:

  1. The bars to loop through,
  2. An index (i) from which to start iterating (starting at 0).

Let’s break down the rest:

  • If the value of i is less than the number of bars, then keep going;
  • Get the current bar from the array using the value of i;
  • Animate the height property (calculated as a percentage and stored in bars[i].height);
  • Wait 100 milliseconds;
  • Increment i by 1 and repeat the process for the next bar.

“So, why wouldn’t you just use the $.each function with a delay() before the animation?”

You could, and it would work just fine… the first time. But if you tried to reset the animation via the “Reset graph� button, then the timing events wouldn’t clear properly and the bars would animate out of sequence.

I would like to be proven wrong, and if there is a better way to do this, feel free to sound off in the comments section.

Moving on, here’s resetGraph():

// Reset graph settings and prepare for display
function resetGraph() {
   // Stop all animations and set the bar's height to 0
   $.each(bars, function(i) {
      $(bars[i].bar).stop().css('height', 0);
   });

   // Clear timers
   clearTimeout(barTimer);
   clearTimeout(graphTimer);

   // Restart timer
   graphTimer = setTimeout(function() {
      displayGraph(bars, 0);
   }, 200);
}

Let’s break resetGraph() down:

  • Stop all animations, and set the height of each bar back to 0;
  • Clear out the timers so that there are no stray animations;
  • Wait 200 milliseconds;
  • Call displayGraph() to animate the first bar (at index 0).

Finally, call resetGraph() at the bottom of createGraph(), and watch the magic happen as we bask in the glory of our hard work.

Not so fast, sunshine! Before we go any further, we need to put some clothes on.

The CSS

The first thing we need to do is hide the original data table. We could do this in a number of ways, but because our CSS will load well before the JavaScript, let’s do this in the easiest way possible:

#data-table {
   display: none;
}

Done. Let’s create a nice container area to put our graph in. Because a few unordered lists are being used to make our graph, we’ll also reset the styles for those. Giving the #figure and .graph elements a position: relative is important because it will anchor the place elements exactly where we want in those containers.

/* Containers */

#wrapper {
   height: 420px;
   left: 50%;
   margin: -210px 0 0 -270px;
   position: absolute;
   top: 50%;
   width: 540px;
}

#figure {
   height: 380px;
   position: relative;
}

#figure ul {
   list-style: none;
   margin: 0;
   padding: 0;
}

.graph {
   height: 283px;
   position: relative;
}

Now for the legend. We position the legend right down to the bottom of its container (#figure) and line up the items horizontally:

/* Legend */

.legend {
   background: #f0f0f0;
   border-radius: 4px;
   bottom: 0;
   position: absolute;
   text-align: left;
   width: 100%;
}

.legend li {
   display: block;
   float: left;
   height: 20px;
   margin: 0;
   padding: 10px 30px;
   width: 120px;
}

.legend span.icon {
   background-position: 50% 0;
   border-radius: 2px;
   display: block;
   float: left;
   height: 16px;
   margin: 2px 10px 0 0;
   width: 16px;
}

The x-axis is very similar to the legend. We line up the elements horizontally and anchor them to the bottom of its container (.graph):

/* x-axis */

.x-axis {
   bottom: 0;
   color: #555;
   position: absolute;
   text-align: center;
   width: 100%;
}

.x-axis li {
   float: left;
   margin: 0 15px;
   padding: 5px 0;
   width: 76px;
}

The y-axis is a little more involved and requires a couple of tricks. We give it a position: absolute to break it out of the normal flow of content, but anchored to its container. We stretch out each li to the full width of the graph and add a border across the top. This will give us some nice horizontal lines in the background.

Using the power of negative margins, we can offset the numerical labels inside the span so that they shift up and to the left. Lovely!

/* y-axis */

.y-axis {
   color: #555;
   position: absolute;
   text-align: right;
   width: 100%;
}

.y-axis li {
   border-top: 1px solid #ccc;
   display: block;
   height: 62px;
   width: 100%;
}

.y-axis li span {
   display: block;
   margin: -10px 0 0 -60px;
   padding: 0 10px;
   width: 40px;
}

Now for the meat in our endangered species sandwich: the bars themselves. Let’s start with the container element for the bars and the columns:

/* Graph bars */

.bars {
   height: 253px;
   position: absolute;
   width: 100%;
   z-index: 10;
}

.bar-group {
   float: left;
   height: 100%;
   margin: 0 15px;
   position: relative;
   width: 76px;
}

Nothing too complicated here. We’re simply setting some dimensions for the container, and setting a z-index to make sure it appears in front of the y-axis markings.

Now for each individual .bar:

.bar {
   border-radius: 3px 3px 0 0;
   bottom: 0;
   cursor: pointer;
   height: 0;
   position: absolute;
   text-align: center;
   width: 24px;
}

.bar.fig0 {
   left: 0;
}

.bar.fig1 {
   left: 26px;
}

.bar.fig2 {
   left: 52px;
}

The main styles to note here are:

  • position: absolute and bottom: 0, which means that the bars will be attached to the bottom of our graph and grow up;
  • the bar for each species (.fig0, .fig1 and .fig2), which will be positioned within .bar-group.

Now, why don’t we minimize the number of sharp edges on any given page by using the border-radius property to round the edges of the top-left and top-right corners of each bar? OK, so border-radius isn’t really necessary, but it adds a nice touch for browsers that support it. Thankfully, the latest versions of the most popular browsers do support it.

Because we’ve placed the values from each table cell in each bar, we can add a neat little pop-up that appears when you hover over a bar:

.bar span {
   #fefefe url(../images/info-bg.gif) 0 100% repeat-x;
   border-radius: 3px;
   left: -8px;
   display: none;
   margin: 0;
   position: relative;
   text-shadow: rgba(255, 255, 255, 0.8) 0 1px 0;
   width: 40px;
   z-index: 20;

   -webkit-box-shadow: rgba(0, 0, 0, 0.6) 0 1px 4px;
   box-shadow: rgba(0, 0, 0, 0.6) 0 1px 4px;
}

.bar:hover span {
   display: block;
   margin-top: -25px;
}

First, the pop-up is hidden from view via display: none. Then, when a .bar element is hovered over, we’ve set display: block to bring it into view, and set a negative margin-top to make it appear above each bar.

The text-shadow, rgba and box-shadow properties are currently supported by most modern browsers as is. Of these modern browsers, only Safari requires a vendor prefix (-webkit-) to make box-shadow work. Note that these properties are simply enhancements to our graph and aren’t required to understand it. Our baseline of Internet Explorer 8 simply ignores them.

Our final step in bringing everything together is to color code each bar:

.fig0 {
   background: #747474 url(../images/bar-01-bg.gif) 0 0 repeat-y;
}

.fig1 {
   background: #65c2e8 url(../images/bar-02-bg.gif) 0 0 repeat-y;
}

.fig2 {
   background: #eea151 url(../images/bar-03-bg.gif) 0 0 repeat-y;
}

In this example, I’ve simply added a background-color and a background-image that tiles vertically. This will update the styles for the bars and the little icons that represent them in the legend. Nice.

And, believe it or not, that is it!

The Finished Product

screenshot

That about wraps it up. I hope we’ve done enough to alert the public to the dangers of zombie over-population. More than that, however, I hope you’ve gained something useful from this tutorial and that you’ll continue to push the boundaries of what can be done in the browser — especially with proper Web standards and without the use of third-party plug-ins. If you’ve got ideas on how to extend or improve anything you’ve seen here, don’t hesitate to leave a comment below, or find me on Twitter @derek_mack.

Bonus: Unleashing The Power Of CSS3

This bonus is not as detailed as our main example. It serves mainly as a showcase of some features being considered in the CSS3 specification.

Because support for CSS3 properties is currently limited, so is their use. Although some of the features mentioned here are making their way into other Web browsers, Webkit-based ones such as Apple Safari and Google Chrome are leading the way.

We can actually create our graph using no images at all, and even animate the bars using CSS instead of jQuery.

Let’s start by removing the background images from our bars, replacing them with the -webkit-gradient property:

.fig0 {
   background: -webkit-gradient(linear, left top, right top, color-stop(0.0, #747474), color-stop(0.49, #676767), color-stop(0.5, #505050), color-stop(1.0, #414141));
}

.fig1 {
   background: -webkit-gradient(linear, left top, right top, color-stop(0.0, #65c2e8), color-stop(0.49, #55b3e1), color-stop(0.5, #3ba6dc), color-stop(1.0, #2794d4));
}

.fig2 {
   background: -webkit-gradient(linear, left top, right top, color-stop(0.0, #eea151), color-stop(0.49, #ea8f44), color-stop(0.5, #e67e28), color-stop(1.0, #e06818));
}

We can do the same with our little number pop-ups:

.bar span {
   background: -webkit-gradient(linear, left top, left bottom, color-stop(0.0, #fff), color-stop(1.0, #e5e5e5));
   …
}

For more information on Webkit gradients, check out the Surfin’ Safari blog.

Continuing with the pop-ups, let’s introduce -webkit-transition. CSS transitions are remarkably easy to use and understand. When the browser detects a change in an element’s property (height, width, color, opacity, etc.), it will transition to the new property.

Again, refer to Surfin’ Safari for more information on -webkit-transition and CSS3 animation.

Here’s an example:

.bar span {
   background: -webkit-gradient(linear, left top, left bottom, color-stop(0.0, #fff), color-stop(1.0, #e5e5e5));
   display: block;
   opacity: 0;

   -webkit-transition: all 0.2s ease-out;
}

.bar:hover span {
   opacity: 1;
}

When you hover over the bar, the margin and opacity of the pop-up will change. This triggers a transition event according to the properties we have set. Very cool.

Thanks to -webkit-transition, we can simplify our JavaScript functions a bit:

// Set individual height of bars
function displayGraph(bars, i) {
   // Changed the way we loop because of issues with $.each not resetting properly
   if (i < bars.length) {
      // Add transition properties and set height via CSS
      $(bars[i].bar).css({'height': bars[i].height, '-webkit-transition': 'all 0.8s ease-out'});
      // Wait the specified time, then run the displayGraph() function again for the next bar
      barTimer = setTimeout(function() {
         i++;
         displayGraph(bars, i);
      }, 100);
   }
}
// Reset graph settings and prepare for display
function resetGraph() {
   // Set bar height to 0 and clear all transitions
   $.each(bars, function(i) {
      $(bars[i].bar).stop().css({'height': 0, '-webkit-transition': 'none'});
   });

   // Clear timers
   clearTimeout(barTimer);
   clearTimeout(graphTimer);

   // Restart timer
   graphTimer = setTimeout(function() {
      displayGraph(bars, 0);
   }, 200);
}

Here are the main things we’ve changed:

  • Set the height of the bars via the jQuery css() function, and allowed CSS transitions to take care of the animation;
  • When resetting the graph, turned transitions off so that the height of the bars is instantly set to 0.

Check out the example if you have the latest version of Safari or Chrome installed.

Ultra-Mega Webkit Bonus: Now In 3-D!

For a sneak peek of what the future holds, check out a little experiment that I put together, with a 3-D effect and CSS transforms. Again, it requires the latest versions of Safari or Chrome:

As in our previous Webkit example, there are no images, and all animation is handled via CSS. Kiss my face!

I can’t tell you what to do with all this information. But I do caution you about the potential misuse of your new powers. In the words of our friend Captain Planet, “The power is yours!�

Use it wisely.

(al) (kw) (il)


© Derek Mack for Smashing Magazine, 2011.


A Roundup of Valuable Facebook Tools


  

Not long ago we had a post featuring some valuable Twitter tools, and we received requests to do the same kind of post for Facebook. In the interest of giving our readers what they want, and the community content that is useful, this post was born. Today we are presenting a list of tools to enhance your Facebook experience.

Even with Google+ on the virtual horizon, Facebook remains a major social media platform that many users never foresee leaving. So for designers and developers compiling tools for making the most of Facebook will never go out of style. Hopefully in our post today you will find some new tools that will optimize your own Facebook ventures, or those you are preparing for clients.

For the User End

Facebook Tools for WordPress is a WordPress plugin that allows you to auto insert OpenGraph tags, insert a like button, send button, and comments box, and retrieve Facebook comments on your WordPress blog.

Media Feedia is a complete Facebook tool for businesses. It allows you to manage multiple accounts at once, get email notifications from your fan pages, set admin’s to your account and protect your page, and schedule posts with pictures and links.

Buddy Media offers a variety of Facebook tools allowing you to grow and connect with your Facebook fan base, drive traffic to your website, and monitor fan usage and feedback.

AllFacebook Stats lets you track and compare the performance of your Facebook pages and places with deep analyses in the fields fans, interaction and content, benchmarking vs. competitors and best-practice examples, the ability to manage large amounts of pages/places in one place, and a customizable dashboard with all your important stats on one page.

ShrotStack lets you customize your Facebook Page with contests, sweepstakes, videos, custom forms and more.

Wildfire lets you track up to 3 different Facebook pages allowing you to track your own stats along with those of your competitors and receive alerts to changes and trends.

Pagemodo is another site that lets you easily create a custom Facebook fan page including free and paid options.

Webtrends for Facebook pulls data from your Facebook pages and apps using Facebook API. Additional conversion data is available with the Webtrends tag. Within a couple of clicks and less than 30 seconds, you start seeing ideas about what’s working and what’s not.

Vitrue is a social relationship management platform that offers a variety of Facebook tools including a Facebook page evaluator, custom wall apps, the ability to customize the look and feel of your fan page, and more.

How to Design and Program a Facebook Landing Page is an an introduction video tutorial teaching you how to design and program a Facebook landing page using iFrames.

For Facebook Developers

For any developer looking to work within or link with the Facebook Platform with their own work, Facebook Developers is an invaluable resource amassed by the FB team to help you out. With a plethora of tutorials and tools collected there, we could not do this roundup without a nod to this virtual toolbox. Straight from the horses mouth, here are some developer specific tools.

Tools

  • Like Button – The Like button lets users share pages from your site back to their Facebook profile with one click.
  • Comments – The Comments plugin lets users comment on any piece of content on your site.
  • Login Button – The Login Button shows profile pictures of the user’s friends who have already signed up for your site in addition to a login button.
  • Registration – The registration plugin allows users to easily sign up for your website with their Facebook account.
  • Javascript Test Console – A simple way to learn, test and debug the JavaScript SDK. It also includes a large number of working examples.
  • Debugger – Helps you debug your Open Graph protocol pages. Having problems with the Like button or our other Social Plugins? Start here.
  • Test User API – A test user is a user account associated with an app created for the purpose of testing the functionality of that application. Facebook Platform supports the creation of test users via the Graph API for manual and automated tests.

Tutorials

  • Canvas Tutorial – This document walks you through the key steps to getting your app up and running within the Facebook chrome.
  • Apps on Facebook.com – Building an app on Facebook gives you the opportunity to deeply integrate into the core Facebook experience.
  • Page Tab Tutorial – One of the most interesting features of Apps on Facebook.com is the ability for your app to be used within the context of a Facebook Page.
  • Mobil Apps – This guide walks you through the basics of creating mobile apps that leverage Facebook Platform.

(rb)


How to move VirtualBox machines to another hard drive

Recently I needed to free up some space on my Mac’s internal hard drive and decided to move my Virtualbox virtual machine disk images to an external drive.

At first I thought it was going to be as easy as just copying the .vdi files to the other drive and then pointing each Virtualbox machine to the new location of its corresponding .vdi file. Turned out it isn’t quite that easy.

Read full post

Posted in .

Copyright © Roger Johansson



Improving The Online Shopping Experience, Part 2: Guiding Customers Through The Buying Process





 



 


Part 1 of “Improving the Online Shopping Experience� focused on the upper part of the purchase funnel and on ways to get customers to your website and to find your products. Today, we move down the funnel, looking at ways to enable customers to make the decision to buy and to guide them through the check-out process.

The purchase funnel and ways to improve the online experience
Ways to improve the online shopping experience and to reduce the drop in the purchase funnel. Part 1 covered points 1 to 3.

Enable The Customer To Decide

Inform and reinforce the customer’s buying decisions by offering in-depth product information. The content on product pages should be relevant and should give the customer a virtual feel for the product. Ensure that your website addresses the key elements of a product page, listed below.

  • Product name
    Product names should contain relevant keywords to help customers find and identify the right product. For a product such as a book, information about the author and edition is required.
  • Images
    Use clear product images, with alternate views. Where appropriate, allow customers to zoom in, see different color swatches, or spin the product around with a 360° view. The product page for a book could get away with an image or two, but apparel should offer most of these options.
  • Video
    Static images are not always sufficient to present a product. Video is a good way to showcase complex products that need detailed explanation or a “how to� demonstration.
  • Pricing and availability
    Clearly list the price and availability. When products have variations (for example, different capacities for a hard drive, or different colors for shoes), make it easy for users to identify size and color combinations that are in stock (see the screenshot for Kohl’s below). And provide sizing charts to avoid surprises and returns later. If your business also has brick-and-mortar stores, allow users to check in-store availability online.
  • Description
    Give customers a clear understanding of your products by providing detailed descriptions, with text and multimedia. Descriptions should be simple, clear and jargon-free. Consider tablet and mobile users by providing alternatives to Flash and Java content, and don’t require mouse hovering to access essential information.
  • Customer ratings and reviews
    Unbiased and unedited ratings and reviews by customers will help visitors make up their minds about products that they may not be familiar with (for example, customer reviews suggesting to buy half a shoe size larger for a better fit will help others not make the same mistake). Many users look up ratings and reviews when they are in stores, not only at their desk, so make ratings and reviews easily accessible from mobile devices.
  • Suggestions of related products
    These could be complementary products (for example, a USB power adapter when the customer is buying an iPod Touch), alternative products (different styles, models or versions) or recommendations based on other people’s purchases (“Customers who bought this also bought…�). Whatever their nature, they should be relevant and valuable to the user, not just an attempt to sell more.
  • Tools
    Give users ways to save and share pages on the website. Businesses commonly do this through wish lists, “Email this page� features, and social sharing and bookmarking. Speaking of social, companies such as Buy.com (see screenshot below) and Wet Seal are experimenting with social shopping, allowing users to shop with their Facebook friends.
  • Contact information
    Make it easy for customers to reach you when they need help.
  • “Add to cartâ€�
    Last but not least, make the call to action clear and prominent, to ensure that customers know how to check out.

Key product page elements highlighted on Zappos
The key elements of product pages on Zappos.com are highlighted.

Kohl’s offers a visual way to identify color and size combinations that are in stock
Kohl’s offers a visual way to identify color and size combinations that are in stock.

Social shopping on Buy.com
Social shopping on Buy.com includes: (1) friends who are currently shopping together, (2) a chat window.

Reduce Shopping-Cart Abandonment

Customers abandon their shopping carts for numerous reasons, many of which can be prevented by improving the experience.

  • Make the shopping cart always visible and accessible, and display a summary of items in the cart, keeping check-out a click away. As basic as this sounds, some websites still don’t enable customers to get to their shopping cart without adding something else to their order.

    Deal Genius offers no visible way to get to one’s shopping cart.
  • A persistent shopping cart is important. Users who leave the website without completing their purchase should see their items in the cart when they return. If the user is logged in, the cart should also persist across devices, allowing them to seamlessly continue shopping anywhere and anytime.
  • Using the customer’s address or ZIP code, show taxes, shipping options and costs, delivery estimates, and the total cost, thus avoiding last-minute “cart shock.â€�
  • Give users the ability to update their shopping cart without having to go back to the product page.
  • If you offer promotional discounts or coupons, give users the option to redeem them without making others feel like they are missing out on savings. Let users know how they can get these discounts (“Sign up for our weekly newsletter to get a discount on your next purchase!â€�).
  • Offer contextual support to answer questions that shoppers may have regarding when their items will arrive, your return policy, and how to contact live help through a phone number, call-back or chat. Display this information in a sidebar, on the shopping-cart page or in a small pop-up window, so that users do not lose the context of where they are.
    OfficeDepot shopping cart
    Office Depot’s shopping cart features: (1) a persistent shopping cart, which shows the total cost and expands on hover to show its items; (2) the estimated total; (3) options to update the cart; (4) discounts, if applicable; (5) help options.

Keep Registration Short And Optional

Make the registration process optional and short; forcing registration is one of the main reasons why users don’t complete purchases. If you still need convincing, “The $300 Million Button� should drive the point home.

  • When the check-out process starts, allow registered customers to log in, and provide easy ways for them to recover forgotten account information.
  • Allow new customers to check out without registering. At the end of the check-out process, give them the option to register and save their information for future use. By this time, they will be motivated to simply create a password in order to avoid typing all of that information the next time.
    Simple checkout options at Sears.com, new users have the option of registering after checkout
    Sears has simple check-out options, allowing new users to register after checking out.
  • Simplify and minimize the information required during the check-out and registration processes, by logically grouping the most important information first, and putting optional information towards the end. Some retailers, like Adorama, have got their check-out process down to one page.

Streamline Check-Out

Streamline the check-out process with relevant recommendations, a progress indicator, an order summary and confirmation.

  • Relevant recommendations can be a valuable reminder to customers as they check out. Like product suggestions, recommendations at check-out should be relevant and useful to the customer, instead of a way to try to sell anything and everything. Buying the same noise-cancelling headphones from Buy.com and Amazon resulted in very different recommendations, as shown below.
    Very different recommendations from buy.com (above) and amazon.com (lower)
    Very different recommendations from Buy.com (above) and Amazon (below).
  • “Encloseâ€� the check-out process by removing the header, navigation and footer. This will minimize distractions and guide the customer through the last few steps to complete their purchase.
  • Use a progress indicator to show customers where they are in the process. “Three steps completed. Just one more to go!â€�
  • Give users a choice of payment methods. If users prefer not to give their credit-card information, allow them to pay by PayPal, Google Checkout or another trusted local payment option. Make sure the third party displays the total amount to be charged before asking for any payment information.
  • Link to your policies in context: link to the privacy policy when asking for an email address, and a link to the security policy near the credit-card fields. This relieves users from having to hunt for these policies and also instills confidence.
  • When displaying the summary page of their order, allow customers to verify (and change, if necessary) the details before confirming the order. This is also a good place to restate the estimated delivery dates so that they can change the shipping method if desired.
  • The final call to action that directs users to complete their purchase (“Place orderâ€�) should be prominent. Don’t lose customers at this stage by presenting other options to them.
    Streamlined single page checkout at Adorama
    The check-out process on Adorama has been streamlined to a single page: (1) progress indicator; (2) multiple payment options; (3) contextual policies; (4) option to make changes; (5) prominent final call to action.
  • Once the order has been placed, display a confirmation page, with the order number, saving and printing functionality, and a summary of the customer’s next steps or options. The order confirmation page for Shutterfly, a photo publishing website, not only tells users what their next steps are, but also displays timelines for the fulfillment of their order and contextual links to the next steps.
    Shutterfly’s order confirmation informs users what to expect next, with contextual links
    Shutterfly’s order confirmation page informs users what to expect next, using contextual links.
  • If your website allows new customers to check out without registering (as suggested above), then that would be a good time to ask them whether they would like to select a password to create an account and save their information for next time. Highlight some of the benefits of creating an account, so that registering at this stage becomes a no-brainer.

Take Action

Congratulations on making it through the 50 techniques in this two-part series. But this is just the beginning. If you kept your users in mind as you read through this article, you may have already identified areas in your online shopping experience that could be improved. Some of these, like presenting contextual links, are quick fixes, while others, like improving findability, will take weeks or months to implement.

When making changes, measure the impact of the changes using analytics, multivariate or A/B testing, and usability testing (see the further reading below). Improving the online shopping experience not only will make it easier for users and satisfy them more, but will increase your bottom line!

Further Reading

(al)


© Lyndon Cerejo for Smashing Magazine, 2011.


  •   
  • Copyright © 1996-2010 BlogmyQuery - BMQ. All rights reserved.
    iDream theme by Templates Next | Powered by WordPress