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