I quite like the developer drive logo animation. I remember seeing it a when I first found the site and thought it was simple, yet effective. I also wondered if it would be possible to replicate it using just CSS.
In this snippet we’ll cover CSS3 transitions and using @font-face to import some custom fonts.
The first thing we need to do is import out fonts, I wasn’t sure what the current ‘d’ font is so I have a similar font. The best place to go is www.fontsquirrel.com, you can pick from a wide selection of fonts or upload your own if you have a valid license. Once you’ve picked your font, in this case Alex Brush simply click on “Webfont Kit” and “Download @font-face kit”. You’ll be served a zip file containing the required font files, a sample css and html file. Extract them to your html folder and add the css @font-face to your own css file.
I also used Entypo for the house icon (which renders differently per browser for some reason)
@font-face {
    font-family: 'AlexBrushRegular';
    src: url('AlexBrush-Regular-OTF-webfont.eot');
    src: url('AlexBrush-Regular-OTF-webfont.eot?#iefix') format('embedded-opentype'),
         url('AlexBrush-Regular-OTF-webfont.woff') format('woff'),
         url('AlexBrush-Regular-OTF-webfont.ttf') format('truetype'),
         url('AlexBrush-Regular-OTF-webfont.svg#AlexBrushRegular') format('svg');
    font-weight: normal;
    font-style: normal;
}
@font-face {
    font-family: 'EntypoRegular';
    src: url('Entypo-webfont.eot');
    src: url('Entypo-webfont.eot?#iefix') format('embedded-opentype'),
         url('Entypo-webfont.woff') format('woff'),
         url('Entypo-webfont.ttf') format('truetype'),
         url('Entypo-webfont.svg#EntypoRegular') format('svg');
    font-weight: normal;
    font-style: normal;
}
Next up we’ll need our HTML, it’s actually quiet small.
<div class="logo">
    <a href="#"><div class="wrapper"><span class="d">d</span><span class="home">⌂</span></div></a>
</div>
Now we can start on the CSS properly. First up, let’s use our fonts! In the HTML above you can see I wrapped each character in it’s own <span> tag, that means I can apply the two separate fonts as I need. I’ll need to remove and text decoration from the <a> tag, I’ve also added a margin-right to space out the two characters.
span {
    color: #ffffff;        
    margin-right: 50px;
}
span.d {
    font-family: 'AlexBrushRegular';
    font-size: 70px;
    font-weight: bold;
}
span.home {
    font-family: 'EntypoRegular';
    font-size: 50px;
}
a, a:hover, a:active {
    text-decoration: none;
}
Now that’s done, I’ll have to show only one character at a time. I’ll do that by specifying a width and height on the <a> tag and then hiding it’s overflow. I’m also going to force it’s position property to relative, as I’ll be positioning the wrapper div absolutely in a minute.
div.logo a{
    width: 77px;
    height: 77px;
    position: relative;
    overflow: hidden;
}
As you can see the ‘d’ is not in the right position, so I’m going to force it’s parent <div> (wrapper) to be positioned absolute and set it’s top and left values. I’m also going to add our CSS3 transition here.
div.wrapper {
    position: absolute;
    top: -2px;
    left: 18px;
    padding: 2px;
                
    transition: all 0.5s ease-in-out;
    -webkit-transition: all 0.5s ease-in-out; 
    -moz-transition: all 0.5s ease-in-out; 
    -ms-transition: all 0.5s ease-in-out; 
    -o-transition: all 0.5s ease-in-out; 
    transform: translate3d(0,0,0);
    -o-transform: translate3d(0,0,0);
    -ms-transform: translate3d(0,0,0);
    -webkit-transform: translate3d(0,0,0);
} 
*note I’ve added the transform property here as a fix, as some users where reporting an artifact issue on the animation. This seems to have fixed the problem for them.
Now I need to provide a CSS selector, to start the animation on hover and move the ‘d’ to the left and bring the house into focus.
div.logo a:hover div.wrapper {
    top: -2px;
    left: -65px;
}
So now I have the sliding animation I need, but the Developer Drive logo is a circle with a light grey border. Once again it’s CSS to the rescue! By adding a border-radius and setting the border values I can turn the <a> tag in to a circle, all I need to do then is change it’s display value to block.
div.logo a{
    width: 77px;
    height: 77px;
    position: relative;
    overflow: hidden;
    display: block;
    background-color: #c24e07;
    border: 5px solid #cccccc;
    border-radius: 100%;
    -moz-border-radius: 100%;
    -webkit-border-radius: 100%;
}
And there you have it! No images and no JavaScript, just custom fonts and CSS.




