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
Using Conftest to Validate Configuration Files
Conftest is a utility within the Open Policy Agent ecosystem that helps simplify writing validation tests against configuration files. In a previous blog post, I wrote about using the Open Policy Agent utility directly to […]
SwiftGen with Image & Color Asset Catalogs
You might remember back in 2015 when iOS 9 was introduced, and we were finally given a way to manage all of our assets in one place with Asset Catalogs. A few years later, support […]
Tracking Original URL Through Authentication
If you read my other post about refreshing AWS tokens, then you probably have a use case for keeping track of the original requested resource while the user goes through authentication so you can route […]
Using Spring Beans in a Kafka Streams ExceptionHandler
There are many things to know before diving into Kafka Streams. If you haven’t already, check out these 5 things as a starting point. Bullet 2 mentions designing for exceptions. Ironically, this seems to be […]