Feb 5, 2009

The Yucky Parts of Web Development: Mouseovers

In my OPI Tech Talk on Jan 28, 2009 on the Yucky Parts of Web Development, I covered a very simple technique you can use to create mouseover effects for tabular data.

If you want to use the small interaction style mentioned in my talk, or if you just want to add some nice user interaction to your pages, you can use a simple mouse over effect.

As the user moves the mouse over table rows, each row is highlighted and the user sees special links to view the details, edit, or delete the item. (Put in the links or icons that make sense for your application.) These links are invisible until the mouse appears above the row, so it adds a neat effect.

The nice thing is that this is trivial to add.

First, define even and odd row styles for the zebra-striping:


.rowEven {
    background-color : #eeeeff;
    color: #000000;    
}

.rowOdd {
    background-color : #ffffff;
    color: #000000;    
}

Next, add highlighted colors:

.highlight td.rowEven {
    background-color : #ddddaa;
    color: #000000;      
}

.highlight td.rowOdd {
    background-color : #dddd88;
    color: #000000;
}

Note the way these styles are defined means that the parent tag has a class of highlight. That is, the TR, or row, tag will get that style.

Next, you need to define a style for the TD (table cell) tags you want to remain invisible until the mouse is over the row:


td.hiddenRowEven {
    visibility: hidden;   
}

td.hiddenRowOdd {
    visibility: hidden;
}

Next, add highlight styles to make the table cells magically appear:


.highlight td.hiddenRowEven {
    visibility: visible;
    background-color : #ddddaa;
    color: #000000;    
    padding: .3em .3em .6em .3em
}

.highlight td.hiddenRowOdd {
    visibility: visible;
    background-color : #dddd88;
    color: #000000;
    padding: .3em .3em .6em .3em
}

Then, you need a small bit of JavaScript to change the styles:


function changeStyle(element, styleClass) {
    element.className = styleClass;
}

Call this function on the TR tag:

<tr onmouseover="changeStyle(this, 'highlight');"
   onmouseout="changeStyle(this, '');">

Note this is just adding or removing the “highlight” style.

Now, flag the hidden cells with the proper style:

<td class="hiddenRowOdd" >
            <a href="link">Edit</a></td>

You can then see this in action. Move the mouse over the table rows to see the links for modifying the data.

I like this effect because it is so simple, so that it does not require a lot of work, but it looks really good on the page.

-Eric Foster-Johnson

About the Author

Eric Foster-Johnson profile.

Eric Foster-Johnson

Principal Technologist

Eric has decades of industry experience in designing and developing complex enterprise software, including designing and developing Grails and Java EE solutions to tough client problems. He has experience leading development teams, mentoring developers, and helping troublesome projects get back onto a success track. He has lead teams in both traditional and agile settings.

Leave a Reply

Your email address will not be published. Required fields are marked *

Related Blog Posts
Designing Kubernetes Controllers
There has been some excellent online discussion lately around Kubernetes controllers, highlighted by an excellent Speakerdeck presentation assembled by Tim Hockin. What I’d like to do in this post is explore some of the implications […]
React Server Components
The React Team recently announced new work they are doing on React Server Components, a new way of rendering React components. The goal is to create smaller bundle sizes, speed up render time, and prevent […]
Jolt custom java transform
Jolt is a JSON to JSON transformation library where the transform is defined in JSON. It’s really good at reorganizing the json data and massaging it into the output JSON you need. Sometimes, you just […]
Page Object Model for UI Testing