img及父元素(容器)实现类似css3中的background-size:contain / background-size:cover

img及父元素(容器)实现类似css3中的background-size:contain / background-size:cover

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
<style>
    .item{
        width:600px;
        height:500px;
        float:left;
        background-color:black;
    }
    body:after{
        content:"";
        display:block;
        clear:both;
    }
</style>
</head>
<body>
<div class="item"><img src="img/720x480.jpg" /></div>
<div class="item"><img src="img/snack.jpg" /></div>
<script type="text/javascript" src="js/jquery.js"></script>
<script>
    $(function () {
        /*
           定义jQuery插件 imageSize
           使用方式
           $("容器").imageSize("contain") 或 $("容器").imageSize("cover")
        */
        $.fn.imageSize = function (type) {
            this.each(function () {
                var This = $(this),
                    $img = This.find(">img"),
                    box_width = This.width(),
                    box_height = This.height();
                getRealImageSize($img.attr("src"), function (w, h) {
                    if (type == "contain") {//跟background-size:contain一样效果
                        if (box_width / box_height <= w / h) {
                            $img.css({ width: "100%", height: "auto", paddingTop: ((box_height - box_width * h / w) / 2) + "px" });
                        }
                        else {
                            $img.css({ height: "100%", width: "auto", paddingLeft: ((box_width - box_height * w / h) / 2) + "px" });
                        }
                    } else if (type == "cover") {//跟background-size:cover一样效果
                        This.css("overflow", "hidden");
                        if (box_width / box_height <= w / h) {
                            $img.css({ width: "auto", height: "100%" });
                        }
                        else {
                            $img.css({ height: "auto", width: "100%" });
                        }
                    } else {//无效果
                        This.css("overflow", "hidden");
                    }
                });
            });            //引用自http://www.zhihu.com/question/28733200
            function getRealImageSize(url, callback) {
                var img = new Image();
                img.src = url;

                // 如果图片被缓存,则直接返回缓存数据
                if (img.complete) {
                    callback(img.width, img.height);
                } else {
                    // 完全加载完毕的事件
                    img.onload = function () {
                        callback(img.width, img.height);
                    }
                }

            }
        };

        /*
        开始调用插件
        */
        $(".item").imageSize("contain");
    });
</script>
</body>
</html>
时间: 2024-12-28 10:09:27

img及父元素(容器)实现类似css3中的background-size:contain / background-size:cover的相关文章

子元素scroll父元素容器不跟随滚动JS实现

$.fn.scrollUnique = function() { return $(this).each(function() { var eventType = 'mousewheel'; if (document.mozHidden !== undefined) { eventType = 'DOMMouseScroll'; } $(this).on(eventType, function(event) { // 一些数据 var scrollTop = this.scrollTop, sc

css等比例分割父级容器(完美三等分)

父级容器的宽度一定,要实现子元素等比例完美均分父级宽度,实现方式有哪些? html部分代码: 方法一: 浮动布局+百分比 (将子元素依次左浮动,根据子元素的个数,设定每个子元素的宽度百分比) 方法二:行内元素(inline-block)+百分比 方法三: 父元素  display:table  +  子元素   display:table-cell 方法四: css3  display:flex:(flex布局) 方法五:栅格系统(bootstrap) 给子元素添加class属性        

判断子div存在勾选的input就将父元素的input勾选上;负责格式化父元素的input

$(".manage_xin_hou input").click(function() { //给子div的input绑定点击事件 var inputes=$(this).parent().parent().find('input'); //父元素下所有的input var k=1; for(var g=0;g<inputes.length;g++){ if($(inputes[g]).prop('checked')){ //如果父元素下所有的input中存在已经勾选的input

让子元素在父元素中水平居中align-items

做案例中,我们会发现让子元素在父元素中垂直居中,要设置margin和padding等,各种设置才能垂直居中 现在可以使用CSS3中的align-items实现 align-items 定义子元素在父元素交叉轴上如何对齐的,大多数不理解交叉轴是什么,下面举例来说明,不多说直接上代码 现在是这样显示的,我需要让子元素在父元素中垂直居中 1需要给父元素加display:flex;(不明白的可以先查下,后期会说明这个属性的作用) 2.再给父元素(也就是box)加align-items:center; 效

width:100%与绝对定位同时存在,偏移出父级容器

当父级容器内的子元素width设为100%,而子元素又有绝对定位时,子元素伸展超出父级容器,像下面 出现这种情况的原因,width:100%,这个百分之百是相对其定位父级而言的,其定位父级有多宽,这个子元素就有多宽,所以子元素跑到了父级容器外 html <div class="container"> <div class="content">好的</div> </div> css .container { positi

子元素margin-top属性传递给父元素的问题 转!

问题描述:一个父包含框包含一个子元素.给正常流的子元素一个垂直外边距margin-top就会使得父元素跟着往下走,而子元素和父元素的边距则没有发生变化. html结构:<div class="box1"><div class="box1_1"></div></div>css样式:.box1{height:400px;background:#fad;}.box1_1{height:100px;margin-top:50p

子元素的margin-top和margin-bottom影响父元素定位的原因和解决方法

<!DOCTYPE HTML> <html> <head> <title>margin transfer </title> <meta charset="utf-8"> <style type="text/css"> body{margin: 0;padding: 0;} .outer{width: 100px;height: 100px;background: #ccc;} .in

JQuery中查找父元素,子元素,追加元素,插入元素和删除元素

Jquery之所以强大,和其在获取对象时使用与css选择器兼容的语法有很大关系.而且它还兼容了CSS3的选择器,而且多出了不少. 所以jQuery的选择器也就变得很多很强大.就最基本的有以下四个: $('*')  匹配页面所有元素 $('#id') id选择器 $('.class') 类选择器 $('element') 标签选择器 $('E[attr]') 含有属性attr的元素E $('E[attr=value]') 属性attr=value的元素E JQuery中查找父元素 .closest

如何使父元素透明,子元素不透明

以下内容转自:http://www.wfuns.com/?p=142 当我们在使用opactity 属性给DIV设置半透明度的时候,DIV下的子元素(标签和文字)都会继承父元素的透明度属性,并且无论我们重置子元素的透明度属性情况都不会发生变化,而这往往不是我们想要看到的效果. 代码设置如下: //样式 <style type=”text/css”> .father{height:400px;filter:alpha(opacity=90);-moz-opacity:0.9; -khtml-op