Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
If you have worked with SharePoint 2013, you may have noticed a “tile” button. Something that looks like this:
![]() |
![]() |
Normal State |
On mouse over (hover) |
This looks good (at least to me) and I wanted to find a simple way to create such a button. I’m mainly a XAML guy, and can create something like this VERY easily in XAML; and I can reuse this as a single unit, like a button. But with HTML, it’s a little different. To make this a reusable component, I’ll use ASP.NET MVC and make this a HtmlHelper. For this reason, I wanted to build this without JavaScript – it’s easier to create a HtmlHelper with just HTML and CSS.
To start things off, I created a plain HTML/CSS version of the Tile button:
<div class="tile" style="background:url(‘Pic.jpg'); background-size:200px 200px" >
<div class="caption" onclick="alert('Hi!');" >
<p>Some caption</p>
<p id="description">Some lengthy description that may potentially overflow into two lines</p>
</div>
</div>
And the CSS:
.tile{
height: 200px;
width: 200px;
overflow: hidden;
background-repeat: no-repeat;
max-width: 100%;
text-align: center;
vertical-align: middle;
background-size:200px 200px;
}
.caption{
background-color: rgba(50,50,50,0.4);
overflow: hidden;
color: #fff;
font-weight: bold;
margin: 150px 0px 0px 0px;
height: 200px;
width: 200px;
}
.caption:hover {
transition: margin .5s;
margin: 0px 0px 20px 0px;
background-color: rgba(50,50,50,0.4);
cursor: pointer;
}
#description{
overflow: hidden;
margin: 25px 0px 0px 0px;
}
I’ve used CSS3 transitions for the smooth animation, and it works beautifully on most modern browsers.
Next, I wanted to make this a reusable control and not leave it as just a bunch of HTML tags that has to be repeated all over.
Creating an ASP.NET MVC HtmlHelper
Less talk, more code :D
public static class MyHelpers
{
public static MvcHtmlString TileButton(string backgroundUrl, string jsAction,
string caption, string description = "")
{
var outerDiv = new TagBuilder("div");
var captionDiv = new TagBuilder("div");
var captionP = new TagBuilder("p");
var descP = new TagBuilder("p");
outerDiv.AddCssClass("tile");
//style="background:url('AmarProfilePicSmall.jpg');
// background-size:200px 200px"
outerDiv.MergeAttribute("style",
"background:url(" + backgroundUrl + "); background-size:200px 200px");
captionDiv.AddCssClass("caption");
descP.AddCssClass("description");
captionDiv.MergeAttribute("onclick", jsAction);
captionP.SetInnerText(caption);
descP.SetInnerText(description);
captionDiv.InnerHtml = captionP.ToString() + descP.ToString();
outerDiv.InnerHtml = captionDiv.ToString();
return new MvcHtmlString(outerDiv.ToString());
}
}
The code is pretty simple, so at an overview level, ’m using TagBuilder to create the components that I used in HTML for the tile. I’m going to reuse the same CSS I used earlier, and have copied it to the site.css file in the Content folder in a new ASP.NET MVC project.
And although I could’ve created this as an extension method to the HtmlHelper class, I created this as a static method to start with, so I can use it like this in my views:
@TileButtonSample.Helpers.MyHelpers.TileButton("../Images/AmarProfilePicSmall.jpg",
"alert('Hi');", "Caption", "Some lengthy description")
And, that’s about it! A short post this time – and hopefully simple enough.
If you think this can be improved, please mention what approach you would take to implement this.
Thanks for reading!
Amar
PS: You can follow me on twitter at “_amarnit”, where I share some quick tips/learning at times!
Comments
- Anonymous
November 15, 2013
Pretty good one with minimal CSS. - Anonymous
April 22, 2014
very nice post!! If I might share a little tweak I made to it:I placed the transition on the main .caption class, and not on :hover, and modified it to.caption { ... width: 200px; transition: margin .5s ease-in-out;}this allows for the 'reverse' animation on ending the hover. - Anonymous
May 11, 2014
Thanks Sumit!PgS_, Thank you for sharing! That's a good tweak :)