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
Modern Development Environment for C++: Part 2
In Part 1 of this series, I gave a quick overview of each tool in the development environment and how I came to the conclusion that the tool was a good fit. Today I’m going […]
Mock Intl and Date globals in Jest
In Javascript land, mocking the browser global objects can be a bit of a pain for tests. Searching StackOverflow gives plenty of complicated answers. Some suggesting using 3rd party mock libraries. Some that overwrite the […]
Bitbucket Parameterized Pipelines
Introduction I’d like to address how to handle lots of deployment environments withinBitBucket Pipelines. Below I’m presenting two options: Using tags to parameterize builds Using the BitBucket API to pass variables Lots of Environments There […]
AWS Cloud HSM, Docker and NGINX
There is quite a bit of easily searchable content on the security benefits of leveraging a Hardware Security Module to manage cryptographic keys, so I will leave that to the scope of another article. The […]