Creazione di un effetto zoom su un'immagine al passaggio del mouse utilizzando CSS?


87

Attualmente sto cercando di creare un effetto zoom al passaggio del mouse su una delle mie quattro immagini. Il problema è che la maggior parte degli esempi di solito usa tabelle o div maschera per applicare una sorta di effetto.

Ecco un esempio che implementa quello che vorrei questo .

Questo è il mio codice finora.

HTML

<div id="menu">
<img class ="blog" src="http://s18.postimg.org/il7hbk7i1/image.png" alt="">
<img class ="music" src="http://s18.postimg.org/4st2fxgqh/image.png" alt="">
<img class ="projects" src="http://s18.postimg.org/sxtrxn115/image.png" alt="">
<img class ="bio" src="http://s18.postimg.org/5xn4lb37d/image.png" alt="">
</div>

CSS

#menu {
    max-width: 1200px;
    text-align: center;
    margin: auto;
}

#menu img {
    width: 250px;
    height: 375px;
    padding: 0px 5px 0px 5px;
    overflow: hidden;
}

.blog {
    height: 375px;
    -webkit-transition: all 1s ease;
    -moz-transition: all 1s ease;
    -o-transition: all 1s ease;
    -ms-transition: all 1s ease;
    transition: all 1s ease;
}

.blog:hover {
    cursor: pointer;
    height:475px;
    width: 350px;
}

.music {
    height: 375px;
}

.projects {
    height: 375px;
}

.bio {
    height: 375px;
}

Risposte:


164

Che ne dici di usare CSS3 transformproprietà e usi scaleche danno un effetto simile allo zoom, questo può essere fatto in questo modo,

HTML

<div class="thumbnail">
    <div class="image">
        <img  src="http://placehold.it/320x240" alt="Some awesome text"/>
    </div>
</div>

CSS

.thumbnail {
    width: 320px;
    height: 240px;
}

.image {
    width: 100%;
    height: 100%;    
}

.image img {
    -webkit-transition: all 1s ease; /* Safari and Chrome */
    -moz-transition: all 1s ease; /* Firefox */
    -ms-transition: all 1s ease; /* IE 9 */
    -o-transition: all 1s ease; /* Opera */
    transition: all 1s ease;
}

.image:hover img {
    -webkit-transform:scale(1.25); /* Safari and Chrome */
    -moz-transform:scale(1.25); /* Firefox */
    -ms-transform:scale(1.25); /* IE 9 */
    -o-transform:scale(1.25); /* Opera */
     transform:scale(1.25);
}

Ecco un violino dimostrativo . Ho rimosso alcuni elementi per renderlo più semplice, puoi sempre aggiungere l'overflow nascosto .imageper nascondere l'overflow dell'immagine ridimensionata.

zoom proprietà funziona solo in IE


14
E vincendo il premio "lezioni di vita profonde dal codice", il tuo CSS sta cantando "Tutto è facile, tutto è facile".
Nerrolken

1
Come eviterai la pixelizzazione?
Waltari

1
@Waltari la dimensione dell'immagine dovrebbe essere del 25% (la quantità che stiamo ingrandendo) più grande dell'area del contenuto, quindi se la miniatura è 320x240 e stiamo ingrandendo del 25% l'immagine dovrebbe essere 400x300.
Mitchell Layzell,

25

Ecco qui.

Demo

http://jsfiddle.net/27Syr/4/

HTML

<div id="menu">

    <div class="fader">
        <div class="text">
            <p>Yay!</p>
        </div>
        <a href="http://stackoverflow.com/questions/15732643/jquery-masonry-and-css3/">
            <img class ="blog" src="http://s18.postimg.org/il7hbk7i1/image.png" alt="">
        </a>
    </div>

    <div class="fader">
        <div class="text">
            <p>Yay!</p>
        </div>
        <a href="http://stackoverflow.com/questions/15732643/jquery-masonry-and-css3/">
            <img class ="blog" src="http://s18.postimg.org/4st2fxgqh/image.png" alt="">
        </a>
    </div>

    <div class="fader">
        <div class="text">
            <p>Yay!</p>
        </div>
        <a href="http://stackoverflow.com/questions/15732643/jquery-masonry-and-css3/">
            <img class ="projects" src="http://s18.postimg.org/sxtrxn115/image.png" alt="">
        </a>
    </div>

    <div class="fader">
        <div class="text">
            <p>Yay!</p>
        </div>
        <a href="http://stackoverflow.com/questions/15732643/jquery-masonry-and-css3/">
            <img class ="blog" src="http://s18.postimg.org/5xn4lb37d/image.png" alt="">
        </a>
    </div>

</div>

CSS

#menu {
    text-align: center; }


.fader {
    /* Giving equal sizes to each element */
    width:    250px;
    height:   375px;

    /* Positioning elements in lines */
    display:  inline-block;

    /* This is necessary for position:absolute to work as desired */
    position: relative;

    /* Preventing zoomed images to grow outside their elements */
    overflow: hidden; }


    .fader img {
        /* Stretching the images to fill whole elements */
        width:       100%;
        height:      100%;

        /* Preventing blank space below the image */
        line-height: 0;

        /* A one-second transition was to disturbing for me */
        -webkit-transition: all 0.3s ease;
        -moz-transition:    all 0.3s ease;
        -o-transition:      all 0.3s ease;
        -ms-transition:     all 0.3s ease;
        transition:         all 0.3s ease; }

        .fader img:hover {
            /* Making images appear bigger and transparent on mouseover */
            opacity: 0.5;
            width:   120%;
            height:  120%; }

    .fader .text {
        /* Placing text behind images */
        z-index: -10;     

        /* Positioning text top-left conrner in the middle of elements */
        position: absolute;
        top:      50%;
        left:     50%; }

        .fader .text p {
            /* Positioning text contents 50% left and top relative
               to text container's top left corner */
            margin-top:  -50%; 
            margin-left: -50%; }

Suggerimento

Invece di .fader { inline-block; }considerare l'utilizzo di un sistema a griglia. In base alla tua tecnologia preferita, puoi scegliere Foundation , Susy , Masonry o le loro alternative.


19
.aku { 
    transition: all .2s ease-in-out; 
}

.aku:hover {
    transform: scale(1.1); 
}

16

Mi piace usare un'immagine di sfondo. Lo trovo più facile e flessibile:

DEMO

CSS:

#menu {
    max-width: 1200px;
    text-align: center;
    margin: auto;
}
.zoomimg {
    display: inline-block;
    width: 250px;
    height: 375px;
    padding: 0px 5px 0px 5px;
    background-size: 100% 100%;
    background-repeat: no-repeat;
    background-position: center center;
    transition: all .5s ease;
}
.zoomimg:hover {
    cursor: pointer;
    background-size: 150% 150%;
}
.blog {
    background-image: url(http://s18.postimg.org/il7hbk7i1/image.png);
}
.music {
    background-image: url(http://s18.postimg.org/4st2fxgqh/image.png);
}
.projects {
    background-image: url(http://s18.postimg.org/sxtrxn115/image.png);
}
.bio {
    background-image: url(http://s18.postimg.org/5xn4lb37d/image.png);
}

HTML:

<div id="menu">
    <div class="blog zoomimg"></div>
    <div class="music zoomimg"></div>
    <div class="projects zoomimg"></div>
    <div class="bio zoomimg"></div>
</div>

DEMO 2 con Overlay


Non consiglierei di utilizzare un'immagine di sfondo per questo, perderai tutto l'incredibile SEO relativo all'immagine che viene fornito con l'utilizzo di un tag immagine e attributi alt.
Mitchell Layzell

Penso che sia fantastico, ma perdi tutta l'utilità del tag img.
Daniel Naab

Se l'immagine non è rilevante per la SEO, ho trovato questa soluzione più pulita.
NLemay

7

Semplicemente:

.grow { transition: all .2s ease-in-out; }

Ciò consentirà all'elemento di assegnare un'animazione tramite css.

.grow:hover { transform: scale(1.1); }

Questo lo farà crescere!



3

SOLUZIONE 1: Puoi scaricare zoom-master .
SOLUZIONE 2: vai qui .
SOLUZIONE 3: i tuoi codici

.hover-zoom {
    -moz-transition:all 0.3s;
    -webkit-transition:all 0.3s;
     transition:all 0.3s
 }
.hover-zoom:hover {
    -moz-transform: scale(1.1);
    -webkit-transform: scale(1.1);
     transform: scale(1.5)
 }
<img class="hover-zoom"  src="https://i.stack.imgur.com/ewRqh.jpg" 
     width="100px"/>



0
 -webkit-transition: all 1s ease; /* Safari and Chrome */
-moz-transition: all 1s ease; /* Firefox */
-ms-transition: all 1s ease; /* IE 9 */
-o-transition: all 1s ease; /* Opera */
transition: all 1s ease;  

voglio solo fare una nota sulle transizioni di cui sopra solo bisogno

 -webkit-transition: all 1s ease; /* Safari and Chrome */
transition: all 1s ease;

e -ms- certamente non funziona per IE 9, non so da dove ti sia venuta l'idea.


IE10 (la prima versione stabile di IE a supportare la transizione) non richiede il prefisso -ms-, le build instabili precedenti lo fanno e lo stesso vale per -moz- e -o-, le versioni attuali non richiedono ma le build precedenti sì.
Mitchell Layzell

-ms- non è completamente richiesto in quanto non offre una soluzione per nessuno dei browser IE per far funzionare la transizione. Usi il prefisso per far funzionare la regola specifica, non li butti dentro solo per divertimento.
DCdaz

-MS- è un venditore prefisso che hanno caduto sul rilascio di IE 10, il che significa versioni precedenti, come IE 9 ancora utilizzare il prefisso vendor, molte persone tristemente usano IE 9 fino ad oggi, adesso, quando si tratta di transitionproprietà IE ufficialmente portato transitiona IE 10 quindi non lo richiede, tuttavia se vuoi essere al 100% ci sono versioni di IE 9 che sono instabili che usano -ms-transition.
Mitchell Layzell

1
Queste false transizioni non funzionano in IE9 con il prefisso del fornitore. -ms- è un prefisso completamente inutile per le transizioni.
DCdaz

1
Vedi -ms- ovunque anche -o- su Opera Mobile in realtà non fa funzionare le transizioni, quindi è inutile e -moz- per le rapide versioni successive del 2011 è inutile perché stai letteralmente parlando di una piccola manciata di utenti che lo faranno Essere al 100% sviluppatori e istituzioni che non utilizzano il Web come utente generico ma per scopi di piattaforma. Ma ancora l'argomento principale rimane -ms- è totalmente inutile e non è minimamente richiesto. non c'è bisogno di -moz- o -o- E al 100% non c'è bisogno di -ms-
DCdaz

0

    .img-wrap:hover img {
        transform: scale(0.8);
    }
    .img-wrap img {
        display: block;
        transition: all 0.3s ease 0s;
        width: 100%;
    }
    <div class="img-wrap">
    <img src="http://www.sampleimages/images.jpg"/> // Your image
    </div>

Questo codice è solo per l'effetto zoom-out. Imposta il div "img-wrap" in base ai tuoi stili e inserisci i risultati dello stile sopra l'effetto zoom-out. Per l'effetto zoom-in devi aumentare il valore della scala (es: per zoom- in, usa transform: scale (1.3);


0
  <div class="item">
  <img src="yamahdi1.jpg" alt="pepsi" width="50" height="58">
  <img src="yamahdi.jpg" alt="pepsi" width="50" height="58">
  <div class="item-overlay top"></div>

css:

.item img {

  -moz-transition: all 0.3s;
  -webkit-transition: all 0.3s;
  transition: all 0.3s;
}
.item img:hover {
  -moz-transform: scale(1.1);
  -webkit-transform: scale(1.1);
  transform: scale(1.1);
}

0

@import url('https://fonts.googleapis.com/css?family=Muli:200,300,400,700&subset=latin-ext');
 body{ font-family: 'Muli', sans-serif; color:white;}
 #lists {
   width: 350px;
   height: 460px;
   overflow: hidden;
   background-color:#222222;
   padding:0px;
   float:left;
    margin: 10px;
 }
 
 .listimg {
   width: 100%;
   height: 220px;
   overflow: hidden;
   float: left;
  
 }
  #lists .listimg img {
   width: 350px;
   height: 220px;
   -moz-transition: all 0.3s;
   -webkit-transition: all 0.3s;
   transition: all 0.3s;
 }
 #lists:hover{cursor: pointer;}
 #lists:hover > .listimg img {
   -moz-transform: scale(1.3);
   -webkit-transform: scale(1.3);
   transform: scale(1.3);
   -webkit-filter: blur(5px);
   filter: blur(5px);
 }

#lists h1{margin:20px; display:inline-block; margin-bottom:0px; }
#lists p{margin:20px;}

.listdetail{ text-align:right; font-weight:200; padding-top:6px;padding-bottom:6px;}
<div id="lists">
<div class="listimg">
  <img src="https://lh3.googleusercontent.com/WeEw5I-wk2UO-y0u3Wsv8MxprCJjxTyTzvwdEc9pcdTsZVj_yK5thdtXNDKoZcUOHlegFhx7=w1920-h914-rw">
</div>
<div class="listtext">
<h1>Eyes Lorem Impsum Samet</h1>
<p>Impsum Samet Lorem</p>
</div>
<div class="listdetail">
<p>Click for More Details...</p>
</div>
</div>

<div id="lists">
<div class="listimg">
  <img src="https://lh4.googleusercontent.com/fqK7aQ7auobK_NyXRYCsL9SOpVj6SoYqVlgbOENw6IqQvEWzym_3988798NlkGDzu0MWnR-7nxIhj7g=w1920-h870-rw">
</div>
<div class="listtext">
<h1>Two Frogs Lorem Impsum Samet</h1>
<p>Impsum Samet Lorem</p>
</div>
<div class="listdetail">
<p>More Details...</p>
</div>
</div>


0
<!DOCTYPE html>
<html>
<head>
<style>
.zoom {

  overflow: hidden;
}

.zoom img {
  transition: transform .5s ease;
}
.zoom:hover img {
  transform: scale(1.5);
}

</style>
</head>
<body>

<h1>Image Zoom On Hover</h1>
<div class="zoom">
  <img src="/image-path-url" alt="">
</div>

</body>
</html>

Aggiungi qualche spiegazione per rimuovere la tua risposta da un post di bassa qualità.
Harsha Biyani,

-3

Aggiungi la libreria jQuery JavaScript insieme a jquery.zbox.css e jquery.zbox.js alla tua pagina web.

<link rel="stylesheet" href="jquery.zbox.css">
<script src="jquery.min.js"></script>
<script src="jquery.zbox.min.js"></script>

Aggiungi un gruppo di miniature con collegamenti che puntano alle immagini a grandezza naturale nella pagina web.

<a class="zb" rel="group" href="1.png" title="Image 1">
  <img src="thumb1.png">
</a>
<a class="zb" rel="group" href="2.png" title="Image 2">
  <img src="thumb2.png">
</a>
<a class="zb" rel="group" href="3.png" title="Image 3">
 <img src="thumb3.png">
</a>

Chiama la funzione su documento pronto. Questo è tutto.

Nella vista sorgente fai:

$(".zb").zbox();

2
OP ha chiesto un modo per farlo in CSS. Una risposta jQuery non è utile qui.
TylerH
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.