JSFiddle - React, Tailwind, and code Playground

by lollero

HTML

<div class="zoom">
    <img src="http://placekitten.com/400/200" alt="" />
    <div class="zText">Lorem ipsum dolor sit amet.</div>
</div>


<div class="zoom">
    <img src="http://placekitten.com/200/200" alt="" />
    <div class="zText">Mauris a ipsum nec arcu hendrerit aliquam eu tempor ante. </div>
</div>


<div class="zoom">
    <img src="http://placekitten.com/50/50" alt="" />
    <div class="zText">Lorem ipsum dolor sit amet.</div>
</div>

CSS

body { margin: 40px; }

.zoom img {
    max-width: 100px;
    max-height: 100px;
}

.zoom,
.zoom img {
    float: left;
}

.zoom_wrap {
    float: left;
    position: relative;
    z-index: 1;
    overflow: visible;
}

.zoom_wrap .zoom {
    background: #fff;
    overflow: hidden;
    float: left;
    position: absolute;
    top: 0px;
    left: 0px;
}

.zText {
    float: left;
    display: none;
    width: 100%;
    padding-top: 10px;
}

.zoom,
.zoom_wrap { margin: 10px;  }
.zoom_wrap .zoom { margin: 0px; }

.zoom_active img { width: 100%; }

.zoom_active .zoom { box-shadow: 0 0 10px #999; }

JavaScript

var zoomDistance = 10;

  
/*!
 * jQuery imagesLoaded plugin v2.0.1
 * http://github.com/desandro/imagesloaded
 *
 * MIT License. by Paul Irish et al.
 */
(function(c,n){var k="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==";c.fn.imagesLoaded=function(l){function m(){var b=c(h),a=c(g);d&&(g.length?d.reject(e,b,a):d.resolve(e));c.isFunction(l)&&l.call(f,e,b,a)}function i(b,a){b.src===k||-1!==c.inArray(b,j)||(j.push(b),a?g.push(b):h.push(b),c.data(b,"imagesLoaded",{isBroken:a,src:b.src}),o&&d.notifyWith(c(b),[a,e,c(h),c(g)]),e.length===j.length&&(setTimeout(m),e.unbind(".imagesLoaded")))}var f=this,d=c.isFunction(c.Deferred)?c.Deferred():
0,o=c.isFunction(d.notify),e=f.find("img").add(f.filter("img")),j=[],h=[],g=[];e.length?e.bind("load.imagesLoaded error.imagesLoaded",function(b){i(b.target,"error"===b.type)}).each(function(b,a){var e=a.src,d=c.data(a,"imagesLoaded");if(d&&d.src===e)i(a,d.isBroken);else if(a.complete&&a.naturalWidth!==n)i(a,0===a.naturalWidth||0===a.naturalHeight);else if(a.readyState||a.complete)a.src=k,a.src=e}):m();return d?d.promise(f):f}})(jQuery);

$('.zoom').each(function() {
    
    var obj = $(this),
        objI = $('img', obj),
        zText = $(".zText", obj),
        images = $('img').imagesLoaded();

    images.done( function( ){
        
        var objIW = objI.outerWidth(true),
            objIH = objI.outerHeight(true);
        
        obj.wrap('<div class="zoom_wrap"></div>');
            
        var objWrap = obj
                        .parents('.zoom_wrap')
                        .css({ width: objIW, height: ( objIH ) });
        
        var objT = $('.zText', obj),
            objTH = objT.outerHeight(true);
        
        obj.css({ width: objIW });
    
        objWrap.on({
            mouseenter: function() {
                
                objWrap.css({ zIndex: 2 }).addClass('zoom_active');
                
                obj.stop().animate({
                    padding: 10,
             ...