Je ne sais pas comment faire ce qui suit avec jQuery. J’ai créé un héros de page avec deux sections (rouge / noir):
Ce que je veux, c’est que lorsque vous survolez le noir par exemple, il s’étendra au-dessus de la section rouge, de sorte que vous obtenez une boîte noire complète. Le même résultat que je veux bien sûr pour la section rouge:
Comment dois-je faire ce travail?
var redSection = $('#red'); var blackSection = $('#black'); redSection.on('mouseover', function() { // Do something - overlay the other section });
Le balisage HTML est le suivant:
Et le CSS:
#hero { height: 480px; /* Default 500px */ padding: 0; position: relative; overflow: hidden; z-index: 1; background: url(../images/hero.jpg) no-repeat center; /* remove */ -webkit-background-size: cover; -moz-background-size: cover; -o-background-size: cover; background-size: cover; } #hero figure { position: absolute; top: 0; background: #FFF; } #hero img { width: 100%; max-width: none; position: relative; opacity: 0.4; }
Le résultat final, je veux remplacer la section rouge et noire avec des images. Attention à votre réponse! Je vous remercie.
Un mélange de CSS3 et de jQuery avec dégradation progressive devrait résoudre ce problème.
CSS
.page { position:fixed; width:100%; height:100%; overflow:hidden; } .black { background:#000; width:50%; height:100%; position:absolute; width:100%; left:-50%; transform:skew(30deg,0); transition:0.5s ease-in-out; z-index:1; } .red { background:#ff0000; width:50%; height:100%; position:absolute; width:100%; right:-50%; transform:skew(30deg,0); transition:0.5s ease-in-out; } .red:hover { transform:skew(0); transform:translate(-50%,0); } .black:hover { transform:skew(0); transform:translate(50%,0); } .inactive { z-index:-1 }
HTML
jQuery
JQuery est nécessaire pour résoudre un problème d’index z avec le dernier élément de l’arborescence DOM qui ruine l’animation fluide.
$(document).ready(function(){ $('.black').hover(function(){ $('.red').addClass('inactive'); },function(){ $('.red').removeClass('inactive'); }); $('.red').hover(function(){ $('.black').addClass('inactive'); },function(){ $('.black').removeClass('inactive'); }); });
Sachez que pour append du contenu aux deux div, vous devrez append un div interne et réinitialiser le biais avec ‘transform: skew (-30deg, 0);’. Les versions préfixées de transition et de transformation devront également être ajoutées.
Référence JSFiddle
Vous pouvez le faire en utilisant le path
svg
pour la forme, un pattern
pour l’ image
et un peu de JavaScript pour gérer les événements mouseover
et mouseleave
.
var hero = document.getElementById('hero'); var animLeft = document.getElementById('anim-left'); var animRight = document.getElementById('anim-right'); hero.addEventListener('mouseover', function(e) { (e.target.id == 'left') ? animRight.beginElement() : animLeft.beginElement(); }) hero.addEventListener('mouseleave', function(e) { (e.target.id == 'left') ? animRight.endElement() : animLeft.endElement(); })
Une solution simple avec CSS, sans peinture supplémentaire, etc.:
.parent { overflow: hidden; position: absolute; width: 90%; height: 90%; } .item { position: absolute; top: 0px; bottom: 0px; left: 0px; right: 0px; transition: transform 1s, z-index 1s; z-index: 1; overflow: hidden; } .item .image { transition: transform 1s; } .item:hover { transform: translate3d(0px, 0px, 0px); z-index: 100; } .item:hover .image { transform: skewX(0deg); } .red { background: #f00; transform: translate3d(-50%, 0px, 0px) skewX(-10deg); } .red .image { transform: skewX(10deg); } .black { background: #000; transform: translate3d(50%, 0px, 0px) skewX(-10deg); } .black img { transform: skewX(10deg); }