Multi-direction hover

by Ali Khaled

HTML

<p>Try to hover this block from different directions</p>
<p>↓</p>
<span>→ </span>
<div class="b-block">
    <div class="b-block__hoverer"></div>
    <div class="b-block__hoverer"></div>
    <div class="b-block__hoverer"></div>
    <div class="b-block__hoverer"></div>
    
    <div class="b-block__content">
        Hover me!
    </div>
</div>
<span> ←</span>
<p>↑</p>

CSS

/* The wrapper */
.b-block {
    position: relative;

    display: inline-block;
    overflow: hidden;
    width: 10em;
    height: 10em;

    vertical-align: middle;

    -webkit-transform: translateZ(0);
    }

/* The blocks that would be hovered */
.b-block__hoverer {
    position: absolute;
    z-index: 1;

    width: 71%;
    height: 71%;

    -webkit-transform: rotate(45deg);
       -moz-transform: rotate(45deg);
         -o-transform: rotate(45deg);
            transform: rotate(45deg);
    }

/* Positioning for hoverers */
.b-block__hoverer:nth-child(1) {
    top: 0;
    right: 0;
    -webkit-transform-origin: 100% 0;
       -moz-transform-origin: 100% 0;
         -o-transform-origin: 100% 0;
            transform-origin: 100% 0;
    }
.b-block__hoverer:nth-child(2) {
    bottom: 0;
    right: 0;
    -webkit-transform-origin: 100% 100%;
       -moz-transform-origin: 100% 100%;
         -o-transform-origin: 100% 100%;
            transform-origin: 100% 100%;
    }
.b-block__hoverer:nth-child(3) {
    bottom: 0;
    left: 0;
    -webkit-transform-origin: 0 100%;
       -moz-transform-origin: 0 100%;
         -o-transform-origin: 0 100%;
            transform-origin: 0 100%;
    }
.b-block__hoverer:nth-child(4) {
    top: 0;
    left: 0;
    -webkit-transform-origin: 0 0;
       -moz-transform-origin: 0 0;
         -o-transform-origin: 0 0;
            transform-origin: 0 0;
    }

/* Enlarge the hoverer to cover the whole area */
.b-block__hoverer:hover {
    z-index: 9;

    width: 100%;
    height: 100%;

    -webkit-transform: none;
       -moz-transform: none;
         -o-transform: none;
            transform: none;
    }

/* Styles for content block */
.b-block__content {
    position: absolute;
    top: 0;
    left: 0;
    
    width: 100%;
    height: 100%;
    
    text-align: center;
    line-height: 10em;

    background: #333;
    color: #FFF;
    
    /* Restore the antialiasing lost from translateZ */
    -webkit-font-smoothing:...

JavaScript

// Created by http://twitter.com/#!/kizmarh